From d1880de30eddeb4aa58a22cac258db530038794b Mon Sep 17 00:00:00 2001 From: JC5 Date: Fri, 11 Apr 2025 20:00:17 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=20Auto=20commit=20for=20release=20?= =?UTF-8?q?'develop'=20on=202025-04-11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Summary/BasicController.php | 39 +++++----- .../Admin/UnknownUserLoginAttempt.php | 11 +-- .../Budget/OperationsRepository.php | 2 +- composer.lock | 78 +++++++++---------- config/firefly.php | 2 +- config/mail.php | 18 ++--- package-lock.json | 30 +++---- resources/assets/v1/src/locales/zh-cn.json | 14 ++-- 8 files changed, 97 insertions(+), 97 deletions(-) diff --git a/app/Api/V1/Controllers/Summary/BasicController.php b/app/Api/V1/Controllers/Summary/BasicController.php index 5da48115ac..f5feb2fa2c 100644 --- a/app/Api/V1/Controllers/Summary/BasicController.php +++ b/app/Api/V1/Controllers/Summary/BasicController.php @@ -472,21 +472,22 @@ class BasicController extends Controller { Log::debug(sprintf('Now in getLeftToSpendInfo("%s", "%s")', $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s'))); - $return = []; - $today = today(config('app.timezone')); - $available = $this->abRepository->getAvailableBudgetWithCurrency($start, $end); - $budgets = $this->budgetRepository->getActiveBudgets(); - $spent = $this->opsRepository->sumExpenses($start, $end, null, $budgets); - $days = (int) $today->diffInDays($end, true) + 1; + $return = []; + $today = today(config('app.timezone')); + $available = $this->abRepository->getAvailableBudgetWithCurrency($start, $end); + $budgets = $this->budgetRepository->getActiveBudgets(); + $spent = $this->opsRepository->sumExpenses($start, $end, null, $budgets); + $days = (int) $today->diffInDays($end, true) + 1; $currencies = []; + // first, create an entry for each entry in the "available" array. /** @var array $availableBudget */ - foreach($available as $currencyId => $availableBudget) { + foreach ($available as $currencyId => $availableBudget) { $currencies[$currencyId] ??= $this->currencyRepos->find($currencyId); - $return[$currencyId] = [ + $return[$currencyId] = [ 'key' => sprintf('left-to-spend-in-%s', $currencies[$currencyId]->code), 'title' => trans('firefly.box_left_to_spend_in_currency', ['currency' => $currencies[$currencyId]->symbol]), - 'no_available_budgets' => false, + 'no_available_budgets' => false, 'monetary_value' => $availableBudget, 'currency_id' => (string) $currencies[$currencyId]->id, 'currency_code' => $currencies[$currencyId]->code, @@ -504,25 +505,25 @@ class BasicController extends Controller } foreach ($spent as $row) { // either an amount was budgeted or 0 is available. - $currencyId = (int) $row['currency_id']; - $amount = (string) ($available[$currencyId] ?? '0'); - if(0 === bccomp($amount,'0')) { + $currencyId = (int) $row['currency_id']; + $amount = (string) ($available[$currencyId] ?? '0'); + if (0 === bccomp($amount, '0')) { // #9858 skip over currencies with no available budget. continue; } - $spentInCurrency = $row['sum']; - $leftToSpend = bcadd($amount, $spentInCurrency); - $perDay = '0'; + $spentInCurrency = $row['sum']; + $leftToSpend = bcadd($amount, $spentInCurrency); + $perDay = '0'; if (0 !== $days && bccomp($leftToSpend, '0') > -1) { $perDay = bcdiv($leftToSpend, (string) $days); } Log::debug(sprintf('Spent %s %s', $row['currency_code'], $row['sum'])); - $return[$currencyId] = [ + $return[$currencyId] = [ 'key' => sprintf('left-to-spend-in-%s', $row['currency_code']), 'title' => trans('firefly.box_left_to_spend_in_currency', ['currency' => $row['currency_symbol']]), - 'no_available_budgets' => false, + 'no_available_budgets' => false, 'monetary_value' => $leftToSpend, 'currency_id' => (string) $row['currency_id'], 'currency_code' => $row['currency_code'], @@ -539,12 +540,12 @@ class BasicController extends Controller ]; } if (0 === count($return)) { - $currency = $this->nativeCurrency; + $currency = $this->nativeCurrency; $return[$currency->id] = [ 'key' => sprintf('left-to-spend-in-%s', $currency->code), 'title' => trans('firefly.box_left_to_spend_in_currency', ['currency' => $currency->symbol]), 'monetary_value' => '0', - 'no_available_budgets' => true, + 'no_available_budgets' => true, 'currency_id' => (string) $currency->id, 'currency_code' => $currency->code, 'currency_symbol' => $currency->symbol, diff --git a/app/Notifications/Admin/UnknownUserLoginAttempt.php b/app/Notifications/Admin/UnknownUserLoginAttempt.php index 35e79cb206..57723356fc 100644 --- a/app/Notifications/Admin/UnknownUserLoginAttempt.php +++ b/app/Notifications/Admin/UnknownUserLoginAttempt.php @@ -80,10 +80,10 @@ class UnknownUserLoginAttempt extends Notification { $settings = ReturnsSettings::getSettings('ntfy', 'owner', null); $message = new Message(); - $ip = Request::ip(); + $ip = Request::ip(); $message->topic($settings['ntfy_topic']); $message->title((string) trans('email.unknown_user_subject')); - $message->body((string) trans('email.unknown_user_message', ['address' => $this->address, 'ip' =>$ip])); + $message->body((string) trans('email.unknown_user_message', ['address' => $this->address, 'ip' => $ip])); return $message; } @@ -93,9 +93,9 @@ class UnknownUserLoginAttempt extends Notification */ public function toPushover(OwnerNotifiable $notifiable): PushoverMessage { - $ip = Request::ip(); + $ip = Request::ip(); - return PushoverMessage::create((string) trans('email.unknown_user_message', ['address' => $this->address, 'ip' =>$ip])) + return PushoverMessage::create((string) trans('email.unknown_user_message', ['address' => $this->address, 'ip' => $ip])) ->title((string) trans('email.unknown_user_subject')) ; } @@ -105,7 +105,8 @@ class UnknownUserLoginAttempt extends Notification */ public function toSlack(OwnerNotifiable $notifiable): SlackMessage { - $ip = Request::ip(); + $ip = Request::ip(); + return new SlackMessage()->content( (string) trans('email.unknown_user_body', ['address' => $this->address, 'ip' => $ip]) ); diff --git a/app/Repositories/Budget/OperationsRepository.php b/app/Repositories/Budget/OperationsRepository.php index 42dc06d239..18cf66c3d4 100644 --- a/app/Repositories/Budget/OperationsRepository.php +++ b/app/Repositories/Budget/OperationsRepository.php @@ -247,6 +247,6 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn } $summarizer = new TransactionSummarizer($this->user); - return $summarizer->groupByCurrencyId($journals,'negative', false); + return $summarizer->groupByCurrencyId($journals, 'negative', false); } } diff --git a/composer.lock b/composer.lock index 6ce53baff4..2f5519c402 100644 --- a/composer.lock +++ b/composer.lock @@ -1010,16 +1010,16 @@ }, { "name": "firebase/php-jwt", - "version": "v6.11.0", + "version": "v6.11.1", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "8f718f4dfc9c5d5f0c994cdfd103921b43592712" + "reference": "d1e91ecf8c598d073d0995afa8cd5c75c6e19e66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/8f718f4dfc9c5d5f0c994cdfd103921b43592712", - "reference": "8f718f4dfc9c5d5f0c994cdfd103921b43592712", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/d1e91ecf8c598d073d0995afa8cd5c75c6e19e66", + "reference": "d1e91ecf8c598d073d0995afa8cd5c75c6e19e66", "shasum": "" }, "require": { @@ -1067,9 +1067,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.11.0" + "source": "https://github.com/firebase/php-jwt/tree/v6.11.1" }, - "time": "2025-01-23T05:11:06+00:00" + "time": "2025-04-09T20:32:01+00:00" }, { "name": "fruitcake/php-cors", @@ -3472,16 +3472,16 @@ }, { "name": "mailersend/laravel-driver", - "version": "v2.9.0", + "version": "v2.9.1", "source": { "type": "git", "url": "https://github.com/mailersend/mailersend-laravel-driver.git", - "reference": "a34e2db5d63d2421b055d8271066d204479a8b6a" + "reference": "87fd5ab76808bbaac9221be0d306baef13e98725" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mailersend/mailersend-laravel-driver/zipball/a34e2db5d63d2421b055d8271066d204479a8b6a", - "reference": "a34e2db5d63d2421b055d8271066d204479a8b6a", + "url": "https://api.github.com/repos/mailersend/mailersend-laravel-driver/zipball/87fd5ab76808bbaac9221be0d306baef13e98725", + "reference": "87fd5ab76808bbaac9221be0d306baef13e98725", "shasum": "" }, "require": { @@ -3535,9 +3535,9 @@ ], "support": { "issues": "https://github.com/mailersend/mailersend-laravel-driver/issues", - "source": "https://github.com/mailersend/mailersend-laravel-driver/tree/v2.9.0" + "source": "https://github.com/mailersend/mailersend-laravel-driver/tree/v2.9.1" }, - "time": "2025-04-04T10:38:10+00:00" + "time": "2025-04-09T09:33:07+00:00" }, { "name": "mailersend/mailersend", @@ -6361,16 +6361,16 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.92.0", + "version": "1.92.4", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "dd46cd0ed74015db28822d88ad2e667f4496a6f6" + "reference": "d20b1969f836d210459b78683d85c9cd5c5f508c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/dd46cd0ed74015db28822d88ad2e667f4496a6f6", - "reference": "dd46cd0ed74015db28822d88ad2e667f4496a6f6", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d20b1969f836d210459b78683d85c9cd5c5f508c", + "reference": "d20b1969f836d210459b78683d85c9cd5c5f508c", "shasum": "" }, "require": { @@ -6381,6 +6381,7 @@ "mockery/mockery": "^1.5", "orchestra/testbench": "^7.7|^8.0|^9.0|^10.0", "pestphp/pest": "^1.23|^2.1|^3.1", + "phpunit/php-code-coverage": "^9.0|^10.0|^11.0", "phpunit/phpunit": "^9.5.24|^10.5|^11.5", "spatie/pest-plugin-test-time": "^1.1|^2.2" }, @@ -6409,7 +6410,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.0" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.4" }, "funding": [ { @@ -6417,7 +6418,7 @@ "type": "github" } ], - "time": "2025-03-27T08:34:10+00:00" + "time": "2025-04-11T15:27:14+00:00" }, { "name": "spatie/period", @@ -10029,16 +10030,16 @@ "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.15.2", + "version": "v3.15.3", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "0bc1e1361e7fffc2be156f46ad1fba6927c01729" + "reference": "4ccab20844d18c5af08b68d310e7151a791c3037" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/0bc1e1361e7fffc2be156f46ad1fba6927c01729", - "reference": "0bc1e1361e7fffc2be156f46ad1fba6927c01729", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/4ccab20844d18c5af08b68d310e7151a791c3037", + "reference": "4ccab20844d18c5af08b68d310e7151a791c3037", "shasum": "" }, "require": { @@ -10049,9 +10050,6 @@ "php-debugbar/php-debugbar": "~2.1.1", "symfony/finder": "^6|^7" }, - "conflict": { - "maximebf/debugbar": "*" - }, "require-dev": { "mockery/mockery": "^1.3.3", "orchestra/testbench-dusk": "^7|^8|^9|^10", @@ -10101,7 +10099,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.15.2" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.15.3" }, "funding": [ { @@ -10113,7 +10111,7 @@ "type": "github" } ], - "time": "2025-02-25T15:25:22+00:00" + "time": "2025-04-08T15:11:06+00:00" }, { "name": "barryvdh/laravel-ide-helper", @@ -10263,16 +10261,16 @@ }, { "name": "cloudcreativity/json-api-testing", - "version": "v6.1.0", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/cloudcreativity/json-api-testing.git", - "reference": "6c7a09b75e4ea250983d5b80f6120f15db9914cb" + "reference": "bb2ff0a87013d40781ca7f959023491d6f1b4ed2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cloudcreativity/json-api-testing/zipball/6c7a09b75e4ea250983d5b80f6120f15db9914cb", - "reference": "6c7a09b75e4ea250983d5b80f6120f15db9914cb", + "url": "https://api.github.com/repos/cloudcreativity/json-api-testing/zipball/bb2ff0a87013d40781ca7f959023491d6f1b4ed2", + "reference": "bb2ff0a87013d40781ca7f959023491d6f1b4ed2", "shasum": "" }, "require": { @@ -10280,7 +10278,7 @@ "illuminate/contracts": "^10.0|^11.0|^12.0", "illuminate/support": "^10.0|^11.0|^12.0", "php": "^8.2", - "phpunit/phpunit": "^10.5|^11.0" + "phpunit/phpunit": "^10.5|^11.0|^12.0" }, "type": "library", "extra": { @@ -10315,9 +10313,9 @@ ], "support": { "issues": "https://github.com/cloudcreativity/json-api/issues", - "source": "https://github.com/cloudcreativity/json-api-testing/tree/v6.1.0" + "source": "https://github.com/cloudcreativity/json-api-testing/tree/v6.2.0" }, - "time": "2025-02-24T20:34:56+00:00" + "time": "2025-04-09T19:15:46+00:00" }, { "name": "composer/class-map-generator", @@ -11703,16 +11701,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.15", + "version": "11.5.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c" + "reference": "fd2e863a2995cdfd864fb514b5e0b28b09895b5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c", - "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fd2e863a2995cdfd864fb514b5e0b28b09895b5c", + "reference": "fd2e863a2995cdfd864fb514b5e0b28b09895b5c", "shasum": "" }, "require": { @@ -11784,7 +11782,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.15" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.17" }, "funding": [ { @@ -11800,7 +11798,7 @@ "type": "tidelift" } ], - "time": "2025-03-23T16:02:11+00:00" + "time": "2025-04-08T07:59:11+00:00" }, { "name": "sebastian/cli-parser", diff --git a/config/firefly.php b/config/firefly.php index 449d75a7ce..1c6ba84049 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -78,7 +78,7 @@ return [ 'running_balance_column' => env('USE_RUNNING_BALANCE', false), // see cer.php for exchange rates feature flag. ], - 'version' => 'develop/2025-04-07', + 'version' => 'develop/2025-04-11', 'api_version' => '2.1.0', // field is no longer used. 'db_version' => 25, diff --git a/config/mail.php b/config/mail.php index fa9db71f50..08356c7a3a 100644 --- a/config/mail.php +++ b/config/mail.php @@ -33,9 +33,9 @@ return [ | and used as needed; however, this mailer will be used by default. | */ - 'default' => envNonEmpty('MAIL_MAILER', 'log'), + 'default' => envNonEmpty('MAIL_MAILER', 'log'), - 'mailers' => [ + 'mailers' => [ 'smtp' => [ 'transport' => 'smtp', 'host' => envNonEmpty('MAIL_HOST', 'smtp.mailtrap.io'), @@ -58,34 +58,34 @@ return [ 'transport' => 'ses', ], - 'mailgun' => [ + 'mailgun' => [ 'transport' => 'mailgun', ], - 'mandrill' => [ + 'mandrill' => [ 'transport' => 'mandrill', ], - 'postmark' => [ + 'postmark' => [ 'transport' => 'postmark', ], - 'sendmail' => [ + 'sendmail' => [ 'transport' => 'sendmail', 'path' => envNonEmpty('MAIL_SENDMAIL_COMMAND', '/usr/sbin/sendmail -bs'), ], - 'log' => [ + 'log' => [ 'transport' => 'log', 'channel' => env('MAIL_LOG_CHANNEL', 'stack'), 'level' => 'info', ], - 'null' => [ + 'null' => [ 'transport' => 'log', 'channel' => env('MAIL_LOG_CHANNEL', 'stack'), 'level' => 'notice', ], - 'array' => [ + 'array' => [ 'transport' => 'array', ], ], diff --git a/package-lock.json b/package-lock.json index 136dd30071..1384502c81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4420,9 +4420,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001712", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", - "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==", + "version": "1.0.30001713", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001713.tgz", + "integrity": "sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==", "dev": true, "funding": [ { @@ -5635,9 +5635,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.132", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.132.tgz", - "integrity": "sha512-QgX9EBvWGmvSRa74zqfnG7+Eno0Ak0vftBll0Pt2/z5b3bEGYL6OUXLgKPtvx73dn3dvwrlyVkjPKRRlhLYTEg==", + "version": "1.5.136", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.136.tgz", + "integrity": "sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==", "dev": true, "license": "ISC" }, @@ -6915,9 +6915,9 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", - "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", "dev": true, "license": "MIT" }, @@ -6937,9 +6937,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11593,9 +11593,9 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "version": "5.99.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.5.tgz", + "integrity": "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==", "dev": true, "license": "MIT", "dependencies": { diff --git a/resources/assets/v1/src/locales/zh-cn.json b/resources/assets/v1/src/locales/zh-cn.json index 0fddaf8573..936cb5cc2b 100644 --- a/resources/assets/v1/src/locales/zh-cn.json +++ b/resources/assets/v1/src/locales/zh-cn.json @@ -3,8 +3,8 @@ "administrations_page_title": "\u8d22\u52a1\u7ba1\u7406", "administrations_index_menu": "\u8d22\u52a1\u7ba1\u7406", "temp_administrations_introduction": "Firefly III \u4e0d\u4e45\u5c06\u80fd\u591f\u7ba1\u7406\u591a\u4e2a\u8d22\u52a1\u7ba1\u7406\u3002 \u73b0\u5728\uff0c\u4f60\u53ea\u80fd\u6709\u4e00\u4e2a\u8d22\u52a1\u7ba1\u7406\u3002\u4f60\u53ef\u4ee5\u8bbe\u7f6e\u8fd9\u4e2a\u8d22\u52a1\u7ba1\u7406\u7684\u6807\u9898\u53ca\u5176\u5f53\u5730\u8d27\u5e01\u3002 \u8fd9\u5c06\u53d6\u4ee3\u60a8\u5148\u524d\u8bbe\u7f6e\u7684\u201c\u9ed8\u8ba4\u8d27\u5e01\u201d\u3002 \u8fd9\u79cd\u8bbe\u7f6e\u73b0\u5728\u4e0e\u8d22\u52a1\u7ba1\u7406\u6302\u94a9\uff0c\u6bcf\u4e2a\u7ba1\u7406\u53ef\u4ee5\u6709\u4e0d\u540c\u7684\u8bbe\u7f6e\u3002", - "administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.", - "administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"", + "administration_currency_form_help": "\u5982\u679c\u60a8\u66f4\u6539\u672c\u5730\u8d27\u5e01\uff0c\u9875\u9762\u52a0\u8f7d\u53ef\u80fd\u9700\u8981\u5f88\u957f\u65f6\u95f4\uff0c\u56e0\u4e3a\u4ea4\u6613\u53ef\u80fd\u9700\u8981\u8f6c\u6362\u4e3a\u60a8\u7684(\u65b0)\u672c\u5730\u8d27\u5e01\u3002", + "administrations_page_edit_sub_title_js": "\u7f16\u8f91\u8d22\u52a1\u7ba1\u7406{title}", "table": "\u8868\u683c", "welcome_back": "\u4eca\u5929\u7406\u8d22\u4e86\u5417\uff1f", "flash_error": "\u9519\u8bef\uff01", @@ -140,12 +140,12 @@ "visit_webhook_url": "\u8bbf\u95ee webhook URL", "reset_webhook_secret": "\u91cd\u7f6e webhook \u5bc6\u94a5", "header_exchange_rates": "\u6c47\u7387", - "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in the documentation<\/a>.", - "exchange_rates_from_to": "Between {from} and {to} (and the other way around)", - "exchange_rates_intro_rates": "Firefly III uses the following exchange rates. The inverse is automatically calculated when it is not provided. If no exchange rate exists for the date of the transaction, Firefly III will go back in time to find one. If none are present, the rate \"1\" will be used.", + "exchange_rates_intro": "Frefly III \u652f\u6301\u4e0b\u8f7d\u548c\u4f7f\u7528\u6c47\u7387\u3002\u8bf7\u5728 \u8fd9\u4efd\u6587\u6863<\/a>\u4e2d\u9605\u8bfb\u66f4\u591a\u3002", + "exchange_rates_from_to": "\u4ece {from} \u5230 {to} \u7684\uff08\u4ee5\u53ca\u53cd\u5411\uff09", + "exchange_rates_intro_rates": "Firefly III \u91c7\u7528\u4ee5\u4e0b\u6c47\u7387\u3002\u5982\u679c\u6ca1\u6709\u63d0\u4f9b\u53cd\u5411\u6c47\u7387\u5219\u81ea\u52a8\u8ba1\u7b97\u3002 \u5982\u679c\u4ea4\u6613\u65e5\u671f\u4e0d\u5b58\u5728\u6c47\u7387\uff0cFifrefly III \u5c06\u5bfb\u627e\u524d\u4e00\u4e2a\u53ef\u7528\u65e5\u671f\u7684\u6c47\u7387\u3002 \u5982\u679c\u6ca1\u6709\uff0c\u5c06\u6309\u6c47\u7387\u4e3a 1 \u8fdb\u884c\u8ba1\u7b97\u3002", "header_exchange_rates_rates": "\u6c47\u7387", - "header_exchange_rates_table": "Table with exchange rates", - "help_rate_form": "On this day, how many {to} will you get for one {from}?", + "header_exchange_rates_table": "\u6c47\u7387\u8868", + "help_rate_form": "\u5728\u8fd9\u4e00\u5929\uff0c\u4f60\u80fd\u4ece\u6bcf 1 \u4e2a\u5355\u4f4d\u7684 {from} \u83b7\u5f97\u591a\u5c11 {to}\uff1f", "add_new_rate": "\u6dfb\u52a0\u65b0\u6c47\u7387", "save_new_rate": "\u4fdd\u5b58\u65b0\u6c47\u7387" },