From 56d36b7f5338ec931f27d060ff1063916b5954fd Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 18 Dec 2015 16:37:02 +0100 Subject: [PATCH 01/64] Remove Google references. --- resources/twig/accounts/index.twig | 11 +--- resources/twig/accounts/show.twig | 18 ++----- resources/twig/bills/show.twig | 19 ++----- resources/twig/budgets/show.twig | 18 ++----- resources/twig/categories/index.twig | 10 +--- resources/twig/categories/show.twig | 25 ++------- resources/twig/categories/show_with_date.twig | 18 ++----- resources/twig/index.twig | 54 +++++-------------- resources/twig/piggy-banks/show.twig | 11 +--- resources/twig/reports/default/month.twig | 13 +---- .../twig/reports/default/multi-year.twig | 13 +---- resources/twig/reports/default/year.twig | 15 ++---- 12 files changed, 41 insertions(+), 184 deletions(-) diff --git a/resources/twig/accounts/index.twig b/resources/twig/accounts/index.twig index 0de927345e..8204b41af7 100644 --- a/resources/twig/accounts/index.twig +++ b/resources/twig/accounts/index.twig @@ -50,15 +50,8 @@ var what = '{{ what }}'; - - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - {% endif %} + + {% endblock %} diff --git a/resources/twig/accounts/show.twig b/resources/twig/accounts/show.twig index 278701207e..efe7d5d5f8 100644 --- a/resources/twig/accounts/show.twig +++ b/resources/twig/accounts/show.twig @@ -24,12 +24,7 @@
- {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -57,15 +52,8 @@ - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - {% endif %} - + + diff --git a/resources/twig/bills/show.twig b/resources/twig/bills/show.twig index 839ff0e556..51bb30f60c 100644 --- a/resources/twig/bills/show.twig +++ b/resources/twig/bills/show.twig @@ -85,13 +85,7 @@

Chart

- - {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -116,14 +110,7 @@ - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - {% endif %} - + + {% endblock %} diff --git a/resources/twig/budgets/show.twig b/resources/twig/budgets/show.twig index 21a9fd9c6e..9ed53830ce 100644 --- a/resources/twig/budgets/show.twig +++ b/resources/twig/budgets/show.twig @@ -27,12 +27,7 @@
- {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -112,15 +107,8 @@ - - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - {% endif %} + + {% endblock %} diff --git a/resources/twig/categories/index.twig b/resources/twig/categories/index.twig index 14208e2bbf..641955c29f 100644 --- a/resources/twig/categories/index.twig +++ b/resources/twig/categories/index.twig @@ -35,14 +35,8 @@ {% endblock %} {% block scripts %} - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - {% endif %} + + {% endblock %} diff --git a/resources/twig/categories/show.twig b/resources/twig/categories/show.twig index 91e8cec723..fb5d6d7348 100644 --- a/resources/twig/categories/show.twig +++ b/resources/twig/categories/show.twig @@ -12,12 +12,7 @@

{{ 'overview'|_ }} (month)

- {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -27,12 +22,7 @@

{{ 'overview'|_ }} (all)

- {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -85,15 +75,8 @@ - - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - {% endif %} + + {% endblock %} diff --git a/resources/twig/categories/show_with_date.twig b/resources/twig/categories/show_with_date.twig index 62b861b8f1..e25dd4d714 100644 --- a/resources/twig/categories/show_with_date.twig +++ b/resources/twig/categories/show_with_date.twig @@ -13,12 +13,7 @@

{{ 'overview'|_ }} (period)

- {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -48,15 +43,8 @@ var categoryID = {{ category.id }}; var categoryDate = "{{ carbon.format('Y-m-d') }}"; - - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - {% endif %} + + {% endblock %} diff --git a/resources/twig/index.twig b/resources/twig/index.twig index c666107430..4808a3a04e 100644 --- a/resources/twig/index.twig +++ b/resources/twig/index.twig @@ -22,12 +22,7 @@
- {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -41,12 +36,7 @@
- {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -59,12 +49,7 @@
- {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -80,12 +65,7 @@
- {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -136,12 +116,7 @@
- {% if Config.get('firefly.chart') == 'google' %} -
- {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
@@ -163,7 +138,8 @@ {% else %} {% for account in savings %}
-
@@ -230,7 +206,8 @@ {% else %} {% for account in piggyBankAccounts %}
-
@@ -275,16 +252,9 @@ - - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - - {% endif %} + + + {% endblock %} {% block styles %} diff --git a/resources/twig/piggy-banks/show.twig b/resources/twig/piggy-banks/show.twig index 5b4a7b652c..a92b21ba4f 100644 --- a/resources/twig/piggy-banks/show.twig +++ b/resources/twig/piggy-banks/show.twig @@ -97,14 +97,7 @@ var piggyBankID = {{ piggyBank.id }}; - - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - {% endif %} + + {% endblock %} diff --git a/resources/twig/reports/default/month.twig b/resources/twig/reports/default/month.twig index c9e3dcccc3..ed7abcc7c7 100644 --- a/resources/twig/reports/default/month.twig +++ b/resources/twig/reports/default/month.twig @@ -71,17 +71,8 @@ {% block scripts %} - - - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - {% endif %} - + + - - - {% if Config.get('firefly.chart') == 'google' %} - - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - {% endif %} - + + - - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - - - - {% endif %} - + + + diff --git a/resources/twig/emails/registered-html.twig b/resources/twig/emails/registered-html.twig index 82d4050d96..48edb4ffc0 100644 --- a/resources/twig/emails/registered-html.twig +++ b/resources/twig/emails/registered-html.twig @@ -59,6 +59,7 @@ } + diff --git a/resources/twig/errors/503.twig b/resources/twig/errors/503.twig index 365a8698e3..a6bea4e28b 100644 --- a/resources/twig/errors/503.twig +++ b/resources/twig/errors/503.twig @@ -51,7 +51,7 @@ m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); - ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', 'auto'); + ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', 'auto'); ga('send', 'pageview'); diff --git a/resources/twig/layout/default.twig b/resources/twig/layout/default.twig index 9542222ad3..30c21850fb 100644 --- a/resources/twig/layout/default.twig +++ b/resources/twig/layout/default.twig @@ -164,11 +164,11 @@ // date range picker configuration: var dateRangeConfig = { - startDate: moment("{{Session.get('start').format('Y-m-d')}}"), - endDate: moment("{{Session.get('end').format('Y-m-d')}}"), - linkTitle: "{{Session.get('start').formatLocalized(monthAndDayFormat)}} - {{Session.get('end').formatLocalized(monthAndDayFormat)}}", - URL: "{{route('daterange')}}", - firstDate: moment("{{Session.get('first').format('Y-m-d')}}"), + startDate: moment("{{ Session.get('start').format('Y-m-d') }}"), + endDate: moment("{{ Session.get('end').format('Y-m-d') }}"), + linkTitle: "{{ Session.get('start').formatLocalized(monthAndDayFormat) }} - {{ Session.get('end').formatLocalized(monthAndDayFormat) }}", + URL: "{{ route('daterange') }}", + firstDate: moment("{{ Session.get('first').format('Y-m-d') }}"), currentMonth: "{{ currentMonthName }}", previousMonth: "{{ previousMonthName }}", nextMonth: "{{ nextMonthName }}", @@ -180,10 +180,10 @@ toLabel: '{{ 'to'|_ }}' }; - var token = "{{csrf_token()}}"; + var token = "{{ csrf_token() }}"; var language = "{{ language }}"; - var currencyCode = '{{getCurrencyCode() }}'; - var currencySymbol = '{{getCurrencySymbol()|raw }}'; + var currencyCode = '{{ getCurrencyCode() }}'; + var currencySymbol = '{{ getCurrencySymbol()|raw }}'; @@ -205,17 +205,17 @@ a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); - ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', {'siteSpeedSampleRate': 100}); + ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', {'siteSpeedSampleRate': 100}); ga('send', 'pageview'); // send an event if relevant: {% if Session.has('gaEventCategory') and Session.has('gaEventAction') and not Session.has('gaEventLabel') %} - ga('send', 'event', '{{Session.get('gaEventCategory')}}', '{{Session.get('gaEventAction')}}'); + ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}'); {% endif %} // send event if relevant: {% if Session.has('gaEventCategory') and Session.has('gaEventAction') and Session.has('gaEventLabel') %} - ga('send', 'event', '{{Session.get('gaEventCategory')}}', '{{Session.get('gaEventAction')}}', '{{ Session.get('gaEventLabel') }}'); + ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}', '{{ Session.get('gaEventLabel') }}'); {% endif %} {% endif %} diff --git a/resources/twig/layout/empty.twig b/resources/twig/layout/empty.twig index 7fd5ef6c46..3c32d46d3b 100644 --- a/resources/twig/layout/empty.twig +++ b/resources/twig/layout/empty.twig @@ -62,17 +62,17 @@ a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); - ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', {'siteSpeedSampleRate': 100}); + ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', {'siteSpeedSampleRate': 100}); ga('send', 'pageview'); // send an event if relevant: {% if Session.has('gaEventCategory') and Session.has('gaEventAction') and not Session.has('gaEventLabel') %} - ga('send', 'event', '{{Session.get('gaEventCategory')}}', '{{Session.get('gaEventAction')}}'); + ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}'); {% endif %} // send event if relevant: {% if Session.has('gaEventCategory') and Session.has('gaEventAction') and Session.has('gaEventLabel') %} - ga('send', 'event', '{{Session.get('gaEventCategory')}}', '{{Session.get('gaEventAction')}}', '{{ Session.get('gaEventLabel') }}'); + ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}', '{{ Session.get('gaEventLabel') }}'); {% endif %} {% endif %} diff --git a/resources/twig/layout/guest.twig b/resources/twig/layout/guest.twig index 43da3fc880..95fdcf293a 100644 --- a/resources/twig/layout/guest.twig +++ b/resources/twig/layout/guest.twig @@ -63,17 +63,17 @@ a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); - ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', {'siteSpeedSampleRate': 100}); + ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', {'siteSpeedSampleRate': 100}); ga('send', 'pageview'); // send an event if relevant: {% if Session.has('gaEventCategory') and Session.has('gaEventAction') and not Session.has('gaEventLabel') %} - ga('send', 'event', '{{Session.get('gaEventCategory')}}', '{{Session.get('gaEventAction')}}'); + ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}'); {% endif %} // send event if relevant: {% if Session.has('gaEventCategory') and Session.has('gaEventAction') and Session.has('gaEventLabel') %} - ga('send', 'event', '{{Session.get('gaEventCategory')}}', '{{Session.get('gaEventAction')}}', '{{ Session.get('gaEventLabel') }}'); + ga('send', 'event', '{{ Session.get('gaEventCategory') }}', '{{ Session.get('gaEventAction') }}', '{{ Session.get('gaEventLabel') }}'); {% endif %} {% endif %} diff --git a/resources/twig/list/journals.twig b/resources/twig/list/journals.twig index ddc9c6e64c..e8014c2f88 100644 --- a/resources/twig/list/journals.twig +++ b/resources/twig/list/journals.twig @@ -115,24 +115,24 @@ {% endfor %} - {% if showPageSum %} - - {{ 'sum'|_ }} - {{ _sum|formatAmount }} - - {% endif %} - {% if showPeriodSum %} - - {{ 'period_sum'|_ }} - {{ periodSum|formatAmount }} - - {% endif %} - {% if showTotalSum %} - - {{ 'total_sum'|_ }} - {{ totalSum|formatAmount }} - - {% endif %} + {% if showPageSum %} + + {{ 'sum'|_ }} + {{ _sum|formatAmount }} + + {% endif %} + {% if showPeriodSum %} + + {{ 'period_sum'|_ }} + {{ periodSum|formatAmount }} + + {% endif %} + {% if showTotalSum %} + + {{ 'total_sum'|_ }} + {{ totalSum|formatAmount }} + + {% endif %} diff --git a/resources/twig/preferences/index.twig b/resources/twig/preferences/index.twig index 366d64be45..da4aaac469 100644 --- a/resources/twig/preferences/index.twig +++ b/resources/twig/preferences/index.twig @@ -104,7 +104,7 @@ {% if language == key %} checked {% endif %} - /> + /> {{ lang }}
diff --git a/resources/twig/reports/default/year.twig b/resources/twig/reports/default/year.twig index 4fa3f92df1..34d7d31efc 100644 --- a/resources/twig/reports/default/year.twig +++ b/resources/twig/reports/default/year.twig @@ -102,7 +102,7 @@ {% endblock %} diff --git a/resources/twig/transactions/edit.twig b/resources/twig/transactions/edit.twig index 524e0df51d..8b53b6f2a2 100644 --- a/resources/twig/transactions/edit.twig +++ b/resources/twig/transactions/edit.twig @@ -103,7 +103,7 @@ {% endblock %} {% block scripts %} From ac61dfae6bb2acb44c4f64d178eb86cc72bd2aa8 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 18 Dec 2015 16:38:50 +0100 Subject: [PATCH 04/64] File reformatting. --- .../Account/ChartJsAccountChartGenerator.php | 8 +- .../Chart/Budget/BudgetChartGenerator.php | 14 +-- .../Chart/Category/CategoryChartGenerator.php | 19 ++-- .../Report/ChartJsReportChartGenerator.php | 8 +- .../Chart/Report/ReportChartGenerator.php | 18 +-- app/Helpers/Report/ReportHelper.php | 2 +- app/Helpers/Report/ReportQuery.php | 2 +- app/Helpers/Report/ReportQueryInterface.php | 4 +- app/Http/Controllers/Auth/AuthController.php | 11 +- .../Controllers/Auth/PasswordController.php | 12 +- app/Http/Controllers/CurrencyController.php | 2 +- app/Http/Controllers/JsonController.php | 2 +- app/Http/Controllers/ReportController.php | 8 +- .../Controllers/TransactionController.php | 2 +- app/Http/Middleware/Authenticate.php | 4 +- app/Http/routes.php | 2 +- app/Models/Bill.php | 4 +- app/Models/Category.php | 2 +- app/Models/TransactionType.php | 42 +++---- app/Repositories/Budget/BudgetRepository.php | 107 +++++++++--------- .../Category/CategoryRepository.php | 2 + app/Repositories/Tag/TagRepository.php | 4 +- app/Support/Amount.php | 8 +- app/Validation/FireflyValidator.php | 2 +- 24 files changed, 149 insertions(+), 140 deletions(-) diff --git a/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php b/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php index c795f89570..ec8460cdfd 100644 --- a/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php +++ b/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php @@ -42,10 +42,10 @@ class ChartJsAccountChartGenerator implements AccountChartGenerator public function expenseAccounts(Collection $accounts, Carbon $start, Carbon $end) { $data = [ - 'count' => 1, - 'labels' => [], 'datasets' => [[ - 'label' => trans('firefly.spent'), - 'data' => []]]]; + 'count' => 1, + 'labels' => [], 'datasets' => [[ + 'label' => trans('firefly.spent'), + 'data' => []]]]; bcscale(2); $start->subDay(); diff --git a/app/Generator/Chart/Budget/BudgetChartGenerator.php b/app/Generator/Chart/Budget/BudgetChartGenerator.php index c7aa64a863..e17f548ed8 100644 --- a/app/Generator/Chart/Budget/BudgetChartGenerator.php +++ b/app/Generator/Chart/Budget/BudgetChartGenerator.php @@ -18,13 +18,6 @@ interface BudgetChartGenerator */ public function budget(Collection $entries); - /** - * @param Collection $entries - * - * @return array - */ - public function multiYear(Collection $entries); - /** * @param Collection $entries * @@ -39,6 +32,13 @@ interface BudgetChartGenerator */ public function frontpage(Collection $entries); + /** + * @param Collection $entries + * + * @return array + */ + public function multiYear(Collection $entries); + /** * @param Collection $budgets * @param Collection $entries diff --git a/app/Generator/Chart/Category/CategoryChartGenerator.php b/app/Generator/Chart/Category/CategoryChartGenerator.php index 6b52518a34..de6891b556 100644 --- a/app/Generator/Chart/Category/CategoryChartGenerator.php +++ b/app/Generator/Chart/Category/CategoryChartGenerator.php @@ -20,11 +20,12 @@ interface CategoryChartGenerator public function all(Collection $entries); /** + * @param Collection $categories * @param Collection $entries * * @return array */ - public function multiYear(Collection $entries); + public function earnedInYear(Collection $categories, Collection $entries); /** * @param Collection $entries @@ -38,8 +39,14 @@ interface CategoryChartGenerator * * @return array */ - public function period(Collection $entries); + public function multiYear(Collection $entries); + /** + * @param Collection $entries + * + * @return array + */ + public function period(Collection $entries); /** * @param Collection $categories @@ -48,12 +55,4 @@ interface CategoryChartGenerator * @return array */ public function spentInYear(Collection $categories, Collection $entries); - - /** - * @param Collection $categories - * @param Collection $entries - * - * @return array - */ - public function earnedInYear(Collection $categories, Collection $entries); } diff --git a/app/Generator/Chart/Report/ChartJsReportChartGenerator.php b/app/Generator/Chart/Report/ChartJsReportChartGenerator.php index 00d4484eb6..0b2250b39a 100644 --- a/app/Generator/Chart/Report/ChartJsReportChartGenerator.php +++ b/app/Generator/Chart/Report/ChartJsReportChartGenerator.php @@ -107,9 +107,9 @@ class ChartJsReportChartGenerator implements ReportChartGenerator ], ]; $data['datasets'][0]['data'][] = round($income, 2); - $data['datasets'][1]['data'][] = round( $expense, 2); + $data['datasets'][1]['data'][] = round($expense, 2); $data['datasets'][0]['data'][] = round(($income / $count), 2); - $data['datasets'][1]['data'][] = round(( $expense / $count), 2); + $data['datasets'][1]['data'][] = round(($expense / $count), 2); return $data; } @@ -138,9 +138,9 @@ class ChartJsReportChartGenerator implements ReportChartGenerator ], ]; $data['datasets'][0]['data'][] = round($income, 2); - $data['datasets'][1]['data'][] = round( $expense, 2); + $data['datasets'][1]['data'][] = round($expense, 2); $data['datasets'][0]['data'][] = round(($income / $count), 2); - $data['datasets'][1]['data'][] = round(( $expense / $count), 2); + $data['datasets'][1]['data'][] = round(($expense / $count), 2); return $data; } diff --git a/app/Generator/Chart/Report/ReportChartGenerator.php b/app/Generator/Chart/Report/ReportChartGenerator.php index f77ef80e03..0447e96581 100644 --- a/app/Generator/Chart/Report/ReportChartGenerator.php +++ b/app/Generator/Chart/Report/ReportChartGenerator.php @@ -12,13 +12,6 @@ use Illuminate\Support\Collection; interface ReportChartGenerator { - /** - * @param Collection $entries - * - * @return array - */ - public function yearInOut(Collection $entries); - /** * @param Collection $entries * @@ -33,7 +26,14 @@ interface ReportChartGenerator * * @return array */ - public function yearInOutSummarized($income, $expense, $count); + public function multiYearInOutSummarized($income, $expense, $count); + + /** + * @param Collection $entries + * + * @return array + */ + public function yearInOut(Collection $entries); /** * @param string $income @@ -42,6 +42,6 @@ interface ReportChartGenerator * * @return array */ - public function multiYearInOutSummarized($income, $expense, $count); + public function yearInOutSummarized($income, $expense, $count); } diff --git a/app/Helpers/Report/ReportHelper.php b/app/Helpers/Report/ReportHelper.php index d26ee7512b..7f028d6a10 100644 --- a/app/Helpers/Report/ReportHelper.php +++ b/app/Helpers/Report/ReportHelper.php @@ -237,7 +237,7 @@ class ReportHelper implements ReportHelperInterface $budgetLine = new BudgetLine; $budgetLine->setBudget($budget); $budgetLine->setRepetition($repetition); - $expenses = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); + $expenses = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); // 200 en -100 is 100, vergeleken met 0 === 1 // 200 en -200 is 0, vergeleken met 0 === 0 diff --git a/app/Helpers/Report/ReportQuery.php b/app/Helpers/Report/ReportQuery.php index 878da06a26..545ebaa145 100644 --- a/app/Helpers/Report/ReportQuery.php +++ b/app/Helpers/Report/ReportQuery.php @@ -134,7 +134,7 @@ class ReportQuery implements ReportQueryInterface $query->orWhere( function (Builder $q) use ($ids) { $q->where('transaction_types.type', TransactionType::TRANSFER); - $q->whereNotIn('ac_from.id',$ids); + $q->whereNotIn('ac_from.id', $ids); $q->whereIn('ac_to.id', $ids); } ); diff --git a/app/Helpers/Report/ReportQueryInterface.php b/app/Helpers/Report/ReportQueryInterface.php index 8579c52926..d7fa9cf085 100644 --- a/app/Helpers/Report/ReportQueryInterface.php +++ b/app/Helpers/Report/ReportQueryInterface.php @@ -22,8 +22,8 @@ interface ReportQueryInterface * and "ordinary" withdrawals. The query used is almost equal to ReportQueryInterface::journalsByRevenueAccount but it does * not group and returns different fields. * - * @param Carbon $start - * @param Carbon $end + * @param Carbon $start + * @param Carbon $end * @param Collection $accounts * * @return Collection diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php index d7620f07b0..1ea0a985df 100644 --- a/app/Http/Controllers/Auth/AuthController.php +++ b/app/Http/Controllers/Auth/AuthController.php @@ -214,15 +214,17 @@ class AuthController extends Controller /** * @return array */ - protected function getBlockedDomains() { - $set = Config::get('mail.blocked_domains'); + protected function getBlockedDomains() + { + $set = Config::get('mail.blocked_domains'); $domains = []; - foreach($set as $entry) { + foreach ($set as $entry) { $domain = trim($entry); - if(strlen($domain) > 0) { + if (strlen($domain) > 0) { $domains[] = $domain; } } + return $domains; } @@ -234,6 +236,7 @@ class AuthController extends Controller if (isset($parts[1]) && in_array($parts[1], $blocked)) { return true; } + return false; } diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php index 7cb3706ecb..a366bd395a 100644 --- a/app/Http/Controllers/Auth/PasswordController.php +++ b/app/Http/Controllers/Auth/PasswordController.php @@ -1,13 +1,12 @@ blocked) === 1) { $response = 'passwords.blocked'; } else { - $response = Password::sendResetLink($request->only('email'), function (Message $message) { + $response = Password::sendResetLink( + $request->only('email'), function (Message $message) { $message->subject($this->getEmailSubject()); - }); + } + ); } switch ($response) { diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php index 6c066e5e16..d2bdbf7e06 100644 --- a/app/Http/Controllers/CurrencyController.php +++ b/app/Http/Controllers/CurrencyController.php @@ -147,7 +147,7 @@ class CurrencyController extends Controller public function index(CurrencyRepositoryInterface $repository) { $currencies = $repository->get(); - $defaultCurrency = $repository->getCurrencyByPreference(Preferences::get('currencyPreference', env('DEFAULT_CURRENCY','EUR'))); + $defaultCurrency = $repository->getCurrencyByPreference(Preferences::get('currencyPreference', env('DEFAULT_CURRENCY', 'EUR'))); if (!Auth::user()->hasRole('owner')) { diff --git a/app/Http/Controllers/JsonController.php b/app/Http/Controllers/JsonController.php index 28b331a165..85fc33ee1d 100644 --- a/app/Http/Controllers/JsonController.php +++ b/app/Http/Controllers/JsonController.php @@ -192,7 +192,7 @@ class JsonController extends Controller return Response::json($cache->get()); // @codeCoverageIgnore } $accounts = $accountRepository->getAccounts(['Default account', 'Asset account', 'Cash account']); - $amount = $reportQuery->incomeInPeriod($start, $end, $accounts)->sum('amount'); + $amount = $reportQuery->incomeInPeriod($start, $end, $accounts)->sum('amount'); $data = ['box' => 'in', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount]; $cache->store($data); diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index 9387b159be..e9cee699e6 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -46,17 +46,17 @@ class ReportController extends Controller $months = $this->helper->listOfMonths($start); // does the user have shared accounts? - $accounts = $repository->getAccounts(['Default account', 'Asset account']); + $accounts = $repository->getAccounts(['Default account', 'Asset account']); // get id's for quick links: $accountIds = []; /** @var Account $account */ - foreach($accounts as $account) { + foreach ($accounts as $account) { $accountIds [] = $account->id; } - $accountList = join(',',$accountIds); + $accountList = join(',', $accountIds); - return view('reports.index', compact('months', 'accounts', 'start','accountList')); + return view('reports.index', compact('months', 'accounts', 'start', 'accountList')); } /** diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index 8b9e7d92bd..732c6d8047 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -48,7 +48,7 @@ class TransactionController extends Controller */ public function create(AccountRepositoryInterface $repository, $what = TransactionType::DEPOSIT) { - $what = strtolower($what); + $what = strtolower($what); $maxFileSize = Steam::phpBytes(ini_get('upload_max_filesize')); $maxPostSize = Steam::phpBytes(ini_get('post_max_size')); $uploadSize = min($maxFileSize, $maxPostSize); diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index a785f908c9..458e19f62d 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -1,13 +1,14 @@ auth->user()->blocked) == 1) { Auth::logout(); + return redirect()->route('index'); } diff --git a/app/Http/routes.php b/app/Http/routes.php index c5b96ed926..d2bea217e5 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -268,7 +268,7 @@ Route::get('/cron/sendgrid', ['uses' => 'CronController@sendgrid']); Route::controllers( [ - 'auth' => 'Auth\AuthController', + 'auth' => 'Auth\AuthController', 'password' => 'Auth\PasswordController', ] ); diff --git a/app/Models/Bill.php b/app/Models/Bill.php index c976459a11..db88700e82 100644 --- a/app/Models/Bill.php +++ b/app/Models/Bill.php @@ -39,8 +39,8 @@ use Illuminate\Database\Eloquent\Model; * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereSkip($value) * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereNameEncrypted($value) * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereMatchEncrypted($value) - * @property \Carbon\Carbon $nextExpectedMatch - * @property \Carbon\Carbon $lastFoundMatch + * @property \Carbon\Carbon $nextExpectedMatch + * @property \Carbon\Carbon $lastFoundMatch */ class Bill extends Model { diff --git a/app/Models/Category.php b/app/Models/Category.php index a1c65c4667..af8593d06b 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -25,7 +25,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Category whereUserId($value) * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Category whereEncrypted($value) * @property-read float $spent - * @property \Carbon\Carbon $lastActivity + * @property \Carbon\Carbon $lastActivity */ class Category extends Model { diff --git a/app/Models/TransactionType.php b/app/Models/TransactionType.php index 1a07dd91d8..0d7323835d 100644 --- a/app/Models/TransactionType.php +++ b/app/Models/TransactionType.php @@ -23,9 +23,9 @@ class TransactionType extends Model { use SoftDeletes; - const WITHDRAWAL = 'Withdrawal'; - const DEPOSIT = 'Deposit'; - const TRANSFER = 'Transfer'; + const WITHDRAWAL = 'Withdrawal'; + const DEPOSIT = 'Deposit'; + const TRANSFER = 'Transfer'; const OPENING_BALANCE = 'Opening balance'; /** @@ -36,22 +36,6 @@ class TransactionType extends Model return ['created_at', 'updated_at', 'deleted_at']; } - /** - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function transactionJournals() - { - return $this->hasMany('FireflyIII\Models\TransactionJournal'); - } - - /** - * @return bool - */ - public function isWithdrawal() - { - return $this->type === TransactionType::WITHDRAWAL; - } - /** * @return bool */ @@ -60,6 +44,14 @@ class TransactionType extends Model return $this->type === TransactionType::DEPOSIT; } + /** + * @return bool + */ + public function isOpeningBalance() + { + return $this->type === TransactionType::OPENING_BALANCE; + } + /** * @return bool */ @@ -71,8 +63,16 @@ class TransactionType extends Model /** * @return bool */ - public function isOpeningBalance() + public function isWithdrawal() { - return $this->type === TransactionType::OPENING_BALANCE; + return $this->type === TransactionType::WITHDRAWAL; + } + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function transactionJournals() + { + return $this->hasMany('FireflyIII\Models\TransactionJournal'); } } diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index c9c24eef89..49280c742f 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -14,7 +14,6 @@ use Illuminate\Database\Query\Builder as QueryBuilder; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Input; -use Log; /** * Class BudgetRepository @@ -89,10 +88,10 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn /** @var Collection $repetitions */ return LimitRepetition:: leftJoin('budget_limits', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id') - ->where('limit_repetitions.startdate', '<=', $end->format('Y-m-d 00:00:00')) - ->where('limit_repetitions.startdate', '>=', $start->format('Y-m-d 00:00:00')) - ->where('budget_limits.budget_id', $budget->id) - ->get(['limit_repetitions.*']); + ->where('limit_repetitions.startdate', '<=', $end->format('Y-m-d 00:00:00')) + ->where('limit_repetitions.startdate', '>=', $start->format('Y-m-d 00:00:00')) + ->where('budget_limits.budget_id', $budget->id) + ->get(['limit_repetitions.*']); } /** @@ -141,9 +140,9 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn return $cache->get(); // @codeCoverageIgnore } $data = $budget->limitrepetitions() - ->where('limit_repetitions.startdate', $start->format('Y-m-d 00:00:00')) - ->where('limit_repetitions.enddate', $end->format('Y-m-d 00:00:00')) - ->first(['limit_repetitions.*']); + ->where('limit_repetitions.startdate', $start->format('Y-m-d 00:00:00')) + ->where('limit_repetitions.enddate', $end->format('Y-m-d 00:00:00')) + ->first(['limit_repetitions.*']); //Log::debug('Looking for limit reps for budget #' . $budget->id . ' start [' . $start . '] and end [' . $end . '].'); //Log::debug(DB::getQueryLog()) $cache->store($data); @@ -186,9 +185,9 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn /** * Returns all the transaction journals for a limit, possibly limited by a limit repetition. * - * @param Budget $budget + * @param Budget $budget * @param LimitRepetition $repetition - * @param int $take + * @param int $take * * @return LengthAwarePaginator */ @@ -205,11 +204,11 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn return $cache->get(); // @codeCoverageIgnore } - $offset = intval(Input::get('page')) > 0 ? intval(Input::get('page')) * $take : 0; - $setQuery = $budget->transactionJournals()->withRelevantData()->take($take)->offset($offset) - ->orderBy('transaction_journals.date', 'DESC') - ->orderBy('transaction_journals.order', 'ASC') - ->orderBy('transaction_journals.id', 'DESC'); + $offset = intval(Input::get('page')) > 0 ? intval(Input::get('page')) * $take : 0; + $setQuery = $budget->transactionJournals()->withRelevantData()->take($take)->offset($offset) + ->orderBy('transaction_journals.date', 'DESC') + ->orderBy('transaction_journals.order', 'ASC') + ->orderBy('transaction_journals.id', 'DESC'); $countQuery = $budget->transactionJournals(); @@ -219,7 +218,7 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn } - $set = $setQuery->get(['transaction_journals.*']); + $set = $setQuery->get(['transaction_journals.*']); $count = $countQuery->count(); @@ -253,9 +252,9 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn public function getLimitAmountOnDate(Budget $budget, Carbon $date) { $repetition = LimitRepetition::leftJoin('budget_limits', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id') - ->where('limit_repetitions.startdate', $date->format('Y-m-d 00:00:00')) - ->where('budget_limits.budget_id', $budget->id) - ->first(['limit_repetitions.*']); + ->where('limit_repetitions.startdate', $date->format('Y-m-d 00:00:00')) + ->where('budget_limits.budget_id', $budget->id) + ->first(['limit_repetitions.*']); if ($repetition) { return $repetition->amount; @@ -273,15 +272,15 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn public function getWithoutBudget(Carbon $start, Carbon $end) { return Auth::user() - ->transactionjournals() - ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') - ->whereNull('budget_transaction_journal.id') - ->before($end) - ->after($start) - ->orderBy('transaction_journals.date', 'DESC') - ->orderBy('transaction_journals.order', 'ASC') - ->orderBy('transaction_journals.id', 'DESC') - ->get(['transaction_journals.*']); + ->transactionjournals() + ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') + ->whereNull('budget_transaction_journal.id') + ->before($end) + ->after($start) + ->orderBy('transaction_journals.date', 'DESC') + ->orderBy('transaction_journals.order', 'ASC') + ->orderBy('transaction_journals.id', 'DESC') + ->get(['transaction_journals.*']); } /** @@ -293,30 +292,30 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn public function getWithoutBudgetSum(Carbon $start, Carbon $end) { $noBudgetSet = Auth::user() - ->transactionjournals() - ->whereNotIn( - 'transaction_journals.id', function (QueryBuilder $query) use ($start, $end) { - $query - ->select('transaction_journals.id') - ->from('transaction_journals') - ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.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 00:00:00')) - ->whereNotNull('budget_transaction_journal.budget_id'); - } - ) - ->after($start) - ->before($end) - ->transactionTypes([TransactionType::WITHDRAWAL]) - ->get(['transaction_journals.*'])->sum('amount'); + ->transactionjournals() + ->whereNotIn( + 'transaction_journals.id', function (QueryBuilder $query) use ($start, $end) { + $query + ->select('transaction_journals.id') + ->from('transaction_journals') + ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.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 00:00:00')) + ->whereNotNull('budget_transaction_journal.budget_id'); + } + ) + ->after($start) + ->before($end) + ->transactionTypes([TransactionType::WITHDRAWAL]) + ->get(['transaction_journals.*'])->sum('amount'); return $noBudgetSet; } /** - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end + * @param Budget $budget + * @param Carbon $start + * @param Carbon $end * @param Collection $accounts * * @return string @@ -330,7 +329,7 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn * @param Budget $budget * @param Carbon $start * @param Carbon $end - * @param bool $shared + * @param bool $shared * * @return string */ @@ -349,7 +348,7 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn $newBudget = new Budget( [ 'user_id' => $data['user'], - 'name' => $data['name'], + 'name' => $data['name'], ] ); $newBudget->save(); @@ -360,14 +359,14 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn /** * @param Budget $budget - * @param array $data + * @param array $data * * @return Budget */ public function update(Budget $budget, array $data) { // update the account: - $budget->name = $data['name']; + $budget->name = $data['name']; $budget->active = $data['active']; $budget->save(); @@ -391,10 +390,10 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn // if not, create one! $limit = new BudgetLimit; $limit->budget()->associate($budget); - $limit->startdate = $date; - $limit->amount = $amount; + $limit->startdate = $date; + $limit->amount = $amount; $limit->repeat_freq = 'monthly'; - $limit->repeats = 0; + $limit->repeats = 0; $limit->save(); // likewise, there should be a limit repetition to match the end date diff --git a/app/Repositories/Category/CategoryRepository.php b/app/Repositories/Category/CategoryRepository.php index 859ac36106..aae38137fe 100644 --- a/app/Repositories/Category/CategoryRepository.php +++ b/app/Repositories/Category/CategoryRepository.php @@ -478,6 +478,7 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito ->transactionTypes([TransactionType::WITHDRAWAL]) ->get(['transaction_journals.*']) ->sum('amount'); + return $sum; } @@ -508,6 +509,7 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito ->after($start) ->get(['transaction_journals.*']) ->sum('amount'); + return $sum; } diff --git a/app/Repositories/Tag/TagRepository.php b/app/Repositories/Tag/TagRepository.php index 8f395b4218..77d4ca4f41 100644 --- a/app/Repositories/Tag/TagRepository.php +++ b/app/Repositories/Tag/TagRepository.php @@ -77,7 +77,9 @@ class TagRepository implements TagRepositoryInterface /** @var Tag $tag */ foreach ($tags as $tag) { - $journals = $tag->transactionjournals()->after($start)->before($end)->transactionTypes([TransactionType::TRANSFER])->get(['transaction_journals.*']); + $journals = $tag->transactionjournals()->after($start)->before($end)->transactionTypes([TransactionType::TRANSFER])->get( + ['transaction_journals.*'] + ); /** @var TransactionJournal $journal */ foreach ($journals as $journal) { diff --git a/app/Support/Amount.php b/app/Support/Amount.php index 86cac1185b..bd0624f002 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -40,7 +40,7 @@ class Amount if ($cache->has()) { return $cache->get(); } else { - $currencyPreference = Prefs::get('currencyPreference', env('DEFAULT_CURRENCY','EUR')); + $currencyPreference = Prefs::get('currencyPreference', env('DEFAULT_CURRENCY', 'EUR')); $currency = TransactionCurrency::whereCode($currencyPreference->data)->first(); $cache->store($currency->symbol); @@ -152,7 +152,7 @@ class Amount if ($cache->has()) { return $cache->get(); } else { - $currencyPreference = Prefs::get('currencyPreference', env('DEFAULT_CURRENCY','EUR')); + $currencyPreference = Prefs::get('currencyPreference', env('DEFAULT_CURRENCY', 'EUR')); $currency = TransactionCurrency::whereCode($currencyPreference->data)->first(); if ($currency) { @@ -161,9 +161,9 @@ class Amount return $currency->code; } - $cache->store(env('DEFAULT_CURRENCY','EUR')); + $cache->store(env('DEFAULT_CURRENCY', 'EUR')); - return env('DEFAULT_CURRENCY','EUR'); // @codeCoverageIgnore + return env('DEFAULT_CURRENCY', 'EUR'); // @codeCoverageIgnore } } diff --git a/app/Validation/FireflyValidator.php b/app/Validation/FireflyValidator.php index 43a3d44ab0..1cd7aa0cf6 100644 --- a/app/Validation/FireflyValidator.php +++ b/app/Validation/FireflyValidator.php @@ -273,7 +273,7 @@ class FireflyValidator extends Validator // get entries from table $set = DB::table($table)->where('user_id', Auth::user()->id) - ->where('id', '!=', $exclude)->get([$field]); + ->where('id', '!=', $exclude)->get([$field]); foreach ($set as $entry) { $fieldValue = $this->tryDecrypt($entry->$field); From 719af38a61b5237957fe69810195ee7ff426112e Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 18 Dec 2015 18:42:56 +0100 Subject: [PATCH 05/64] Cleanup. --- app/Http/routes.php | 5 ----- resources/twig/emails/password.twig | 2 +- resources/twig/emails/registered.twig | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/app/Http/routes.php b/app/Http/routes.php index d2bea217e5..09c9f9423d 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -500,12 +500,7 @@ Route::group( * Report Controller */ Route::get('/reports', ['uses' => 'ReportController@index', 'as' => 'reports.index']); - // Route::post('/reports/select', ['uses' => 'ReportController@select', 'as' => 'reports.select']); Route::get('/reports/report/{report_type}/{start_date}/{end_date}/{accountList}', ['uses' => 'ReportController@report', 'as' => 'reports.report']); - // Route::get('/reports/{year}/{shared?}', ['uses' => 'ReportController@year', 'as' => 'reports.year'])->where(['year' => '[0-9]{4}', 'shared' => 'shared']); - // Route::get('/reports/{year}/{month}/{shared?}', ['uses' => 'ReportController@month', 'as' => 'reports.month'])->where(['year' => '[0-9]{4}', 'month' => '[0-9]{1,2}', 'shared' => 'shared']); - - // pop ups for budget report: /** * Search Controller diff --git a/resources/twig/emails/password.twig b/resources/twig/emails/password.twig index 5424f36fa8..d2be49d030 100644 --- a/resources/twig/emails/password.twig +++ b/resources/twig/emails/password.twig @@ -1 +1 @@ -Click here to reset your password: {{ url('password/reset/' ~ token) }} \ No newline at end of file +Click here to reset your password: {{ url('password/reset/' ~ token) }} diff --git a/resources/twig/emails/registered.twig b/resources/twig/emails/registered.twig index 3509f8a077..400ea17887 100644 --- a/resources/twig/emails/registered.twig +++ b/resources/twig/emails/registered.twig @@ -18,4 +18,4 @@ Documentation: https://github.com/JC5/firefly-iii/wiki/First-use https://github.com/JC5/firefly-iii/wiki/full-description -The registration has been created from IP {{ ip }} \ No newline at end of file +The registration has been created from IP {{ ip }} From c1ba591b2699a280e8031dfe59fc7132fc8babca Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 19 Dec 2015 20:54:27 +0100 Subject: [PATCH 06/64] Rename languages. --- .env.example | 1 + .../Account/ChartJsAccountChartGenerator.php | 4 ++-- .../Chart/Bill/ChartJsBillChartGenerator.php | 2 +- .../Chart/Budget/ChartJsBudgetChartGenerator.php | 4 ++-- .../Category/ChartJsCategoryChartGenerator.php | 4 ++-- .../PiggyBank/ChartJsPiggyBankChartGenerator.php | 2 +- .../Chart/Report/ChartJsReportChartGenerator.php | 2 +- app/Http/Controllers/Controller.php | 2 +- app/Http/Controllers/PreferencesController.php | 2 +- app/Http/Middleware/Authenticate.php | 2 +- app/Http/breadcrumbs.php | 2 +- config/app.php | 4 ++-- config/firefly.php | 16 ++++++++-------- 13 files changed, 24 insertions(+), 23 deletions(-) diff --git a/.env.example b/.env.example index 25a959d3bb..9a4ad1ba45 100644 --- a/.env.example +++ b/.env.example @@ -12,6 +12,7 @@ CACHE_DRIVER=file SESSION_DRIVER=file DEFAULT_CURRENCY=EUR +DEFAULT_LANGUAGE=en_US EMAIL_SMTP= EMAIL_DRIVER=smtp diff --git a/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php b/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php index ec8460cdfd..280c0a2bdc 100644 --- a/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php +++ b/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php @@ -105,7 +105,7 @@ class ChartJsAccountChartGenerator implements AccountChartGenerator public function frontpage(Collection $accounts, Carbon $start, Carbon $end) { // language: - $language = Preferences::get('language', 'en')->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $format = Config::get('firefly.monthAndDay.' . $language); $data = [ 'count' => 0, @@ -151,7 +151,7 @@ class ChartJsAccountChartGenerator implements AccountChartGenerator public function single(Account $account, Carbon $start, Carbon $end) { // language: - $language = Preferences::get('language', 'en')->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $format = Config::get('firefly.monthAndDay.' . $language); $data = [ diff --git a/app/Generator/Chart/Bill/ChartJsBillChartGenerator.php b/app/Generator/Chart/Bill/ChartJsBillChartGenerator.php index 8a63f803aa..972944763f 100644 --- a/app/Generator/Chart/Bill/ChartJsBillChartGenerator.php +++ b/app/Generator/Chart/Bill/ChartJsBillChartGenerator.php @@ -71,7 +71,7 @@ class ChartJsBillChartGenerator implements BillChartGenerator public function single(Bill $bill, Collection $entries) { // language: - $language = Preferences::get('language', 'en')->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $format = Config::get('firefly.month.' . $language); $data = [ diff --git a/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php b/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php index 9bc1d28877..d0952216c9 100644 --- a/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php +++ b/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php @@ -24,7 +24,7 @@ class ChartJsBudgetChartGenerator implements BudgetChartGenerator public function budget(Collection $entries, $dateFormat = 'month') { // language: - $language = Preferences::get('language', 'en')->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $format = Config::get('firefly.' . $dateFormat . '.' . $language); $data = [ @@ -115,7 +115,7 @@ class ChartJsBudgetChartGenerator implements BudgetChartGenerator public function year(Collection $budgets, Collection $entries) { // language: - $language = Preferences::get('language', 'en')->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $format = Config::get('firefly.month.' . $language); $data = [ diff --git a/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php b/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php index 07eb4e0f31..cac74e488e 100644 --- a/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php +++ b/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php @@ -101,7 +101,7 @@ class ChartJsCategoryChartGenerator implements CategoryChartGenerator { // language: - $language = Preferences::get('language', 'en')->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $format = Config::get('firefly.month.' . $language); $data = [ @@ -135,7 +135,7 @@ class ChartJsCategoryChartGenerator implements CategoryChartGenerator { // language: - $language = Preferences::get('language', 'en')->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $format = Config::get('firefly.month.' . $language); $data = [ diff --git a/app/Generator/Chart/PiggyBank/ChartJsPiggyBankChartGenerator.php b/app/Generator/Chart/PiggyBank/ChartJsPiggyBankChartGenerator.php index 8927d1bb91..e1aa9fb352 100644 --- a/app/Generator/Chart/PiggyBank/ChartJsPiggyBankChartGenerator.php +++ b/app/Generator/Chart/PiggyBank/ChartJsPiggyBankChartGenerator.php @@ -25,7 +25,7 @@ class ChartJsPiggyBankChartGenerator implements PiggyBankChartGenerator { // language: - $language = Preferences::get('language', 'en')->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $format = Config::get('firefly.monthAndDay.' . $language); $data = [ diff --git a/app/Generator/Chart/Report/ChartJsReportChartGenerator.php b/app/Generator/Chart/Report/ChartJsReportChartGenerator.php index 0b2250b39a..8cd93f3ccf 100644 --- a/app/Generator/Chart/Report/ChartJsReportChartGenerator.php +++ b/app/Generator/Chart/Report/ChartJsReportChartGenerator.php @@ -22,7 +22,7 @@ class ChartJsReportChartGenerator implements ReportChartGenerator public function yearInOut(Collection $entries) { // language: - $language = Preferences::get('language', 'en')->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $format = Config::get('firefly.month.' . $language); $data = [ diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 03a9a8d31c..d733973e30 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -34,7 +34,7 @@ abstract class Controller extends BaseController View::share('hideTags', false); if (Auth::check()) { - $pref = Preferences::get('language', 'en'); + $pref = Preferences::get('language',env('DEFAULT_LANGUAGE','en_US')); $lang = $pref->data; $this->monthFormat = Config::get('firefly.month.' . $lang); $this->monthAndDayFormat = Config::get('firefly.monthAndDay.' . $lang); diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index 8bfd176f53..9fd0cb95b9 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -37,7 +37,7 @@ class PreferencesController extends Controller $viewRange = $viewRangePref->data; $frontPageAccounts = Preferences::get('frontPageAccounts', []); $budgetMax = Preferences::get('budgetMaximum', 1000); - $language = Preferences::get('language', 'en')->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $budgetMaximum = $budgetMax->data; return view('preferences.index', compact('budgetMaximum', 'language', 'accounts', 'frontPageAccounts', 'viewRange')); diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 458e19f62d..0205f06ba6 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -61,7 +61,7 @@ class Authenticate } // if logged in, set user language: - $pref = Preferences::get('language', 'en'); + $pref = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US')); App::setLocale($pref->data); Carbon::setLocale($pref->data); diff --git a/app/Http/breadcrumbs.php b/app/Http/breadcrumbs.php index 3494c7a1f7..6030da8875 100644 --- a/app/Http/breadcrumbs.php +++ b/app/Http/breadcrumbs.php @@ -354,7 +354,7 @@ Breadcrumbs::register( 'reports.report', function (Generator $breadcrumbs, Carbon $start, Carbon $end, $reportType, $accountIds) { $breadcrumbs->parent('reports.index'); - $pref = Preferences::get('language', 'en')->data; + $pref = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; $monthFormat = Config::get('firefly.monthAndDay.' . $pref); $title = trans('firefly.report_default', ['start' => $start->formatLocalized($monthFormat), 'end' => $end->formatLocalized($monthFormat)]); diff --git a/config/app.php b/config/app.php index 93cef6cb6f..ced4a3e0b6 100644 --- a/config/app.php +++ b/config/app.php @@ -52,7 +52,7 @@ return [ | */ - 'locale' => 'en', + 'locale' => 'en_US', /* |-------------------------------------------------------------------------- @@ -65,7 +65,7 @@ return [ | */ - 'fallback_locale' => 'en', + 'fallback_locale' => 'en_US', /* |-------------------------------------------------------------------------- diff --git a/config/firefly.php b/config/firefly.php index 0bab3ab71a..ced04e09a9 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -99,12 +99,12 @@ return [ 'Cash account' => 'cash', ], 'lang' => [ - 'en' => 'English', - 'nl' => 'Nederlands' + 'en_US' => 'English', + 'nl_NL' => 'Nederlands' ], 'locales' => [ - 'en' => ['en', 'English', 'en_US', 'en_US.utf8'], - 'nl' => ['nl', 'Dutch', 'nl_NL', 'nl_NL.utf8'], + 'en_US' => ['en', 'English', 'en_US', 'en_US.utf8'], + 'nl_NL' => ['nl', 'Dutch', 'nl_NL', 'nl_NL.utf8'], ], 'transactionTypesByWhat' => [ 'expenses' => ['Withdrawal'], @@ -125,12 +125,12 @@ return [ ], 'month' => [ - 'en' => '%B %Y', - 'nl' => '%B %Y', + 'en_US' => '%B %Y', + 'nl_NL' => '%B %Y', ], 'monthAndDay' => [ - 'en' => '%B %e, %Y', - 'nl' => '%e %B %Y', + 'en_US' => '%B %e, %Y', + 'nl_NL' => '%e %B %Y', ], ]; From c49bfad38d8cb6d5d516744b6e2783a738ea7448 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 19 Dec 2015 20:54:59 +0100 Subject: [PATCH 07/64] Move languages. --- resources/lang/{en => en_US}/breadcrumbs.php | 0 resources/lang/{en => en_US}/firefly.php | 0 resources/lang/{en => en_US}/form.php | 0 resources/lang/{en => en_US}/help.php | 0 resources/lang/{en => en_US}/list.php | 0 resources/lang/{en => en_US}/pagination.php | 0 resources/lang/{en => en_US}/passwords.php | 0 resources/lang/{en => en_US}/validation.php | 0 resources/lang/{nl => nl_NL}/breadcrumbs.php | 0 resources/lang/{nl => nl_NL}/firefly.php | 0 resources/lang/{nl => nl_NL}/form.php | 0 resources/lang/{nl => nl_NL}/help.php | 0 resources/lang/{nl => nl_NL}/list.php | 0 resources/lang/{nl => nl_NL}/pagination.php | 0 resources/lang/{nl => nl_NL}/passwords.php | 0 resources/lang/{nl => nl_NL}/validation.php | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename resources/lang/{en => en_US}/breadcrumbs.php (100%) rename resources/lang/{en => en_US}/firefly.php (100%) rename resources/lang/{en => en_US}/form.php (100%) rename resources/lang/{en => en_US}/help.php (100%) rename resources/lang/{en => en_US}/list.php (100%) rename resources/lang/{en => en_US}/pagination.php (100%) rename resources/lang/{en => en_US}/passwords.php (100%) rename resources/lang/{en => en_US}/validation.php (100%) rename resources/lang/{nl => nl_NL}/breadcrumbs.php (100%) rename resources/lang/{nl => nl_NL}/firefly.php (100%) rename resources/lang/{nl => nl_NL}/form.php (100%) rename resources/lang/{nl => nl_NL}/help.php (100%) rename resources/lang/{nl => nl_NL}/list.php (100%) rename resources/lang/{nl => nl_NL}/pagination.php (100%) rename resources/lang/{nl => nl_NL}/passwords.php (100%) rename resources/lang/{nl => nl_NL}/validation.php (100%) diff --git a/resources/lang/en/breadcrumbs.php b/resources/lang/en_US/breadcrumbs.php similarity index 100% rename from resources/lang/en/breadcrumbs.php rename to resources/lang/en_US/breadcrumbs.php diff --git a/resources/lang/en/firefly.php b/resources/lang/en_US/firefly.php similarity index 100% rename from resources/lang/en/firefly.php rename to resources/lang/en_US/firefly.php diff --git a/resources/lang/en/form.php b/resources/lang/en_US/form.php similarity index 100% rename from resources/lang/en/form.php rename to resources/lang/en_US/form.php diff --git a/resources/lang/en/help.php b/resources/lang/en_US/help.php similarity index 100% rename from resources/lang/en/help.php rename to resources/lang/en_US/help.php diff --git a/resources/lang/en/list.php b/resources/lang/en_US/list.php similarity index 100% rename from resources/lang/en/list.php rename to resources/lang/en_US/list.php diff --git a/resources/lang/en/pagination.php b/resources/lang/en_US/pagination.php similarity index 100% rename from resources/lang/en/pagination.php rename to resources/lang/en_US/pagination.php diff --git a/resources/lang/en/passwords.php b/resources/lang/en_US/passwords.php similarity index 100% rename from resources/lang/en/passwords.php rename to resources/lang/en_US/passwords.php diff --git a/resources/lang/en/validation.php b/resources/lang/en_US/validation.php similarity index 100% rename from resources/lang/en/validation.php rename to resources/lang/en_US/validation.php diff --git a/resources/lang/nl/breadcrumbs.php b/resources/lang/nl_NL/breadcrumbs.php similarity index 100% rename from resources/lang/nl/breadcrumbs.php rename to resources/lang/nl_NL/breadcrumbs.php diff --git a/resources/lang/nl/firefly.php b/resources/lang/nl_NL/firefly.php similarity index 100% rename from resources/lang/nl/firefly.php rename to resources/lang/nl_NL/firefly.php diff --git a/resources/lang/nl/form.php b/resources/lang/nl_NL/form.php similarity index 100% rename from resources/lang/nl/form.php rename to resources/lang/nl_NL/form.php diff --git a/resources/lang/nl/help.php b/resources/lang/nl_NL/help.php similarity index 100% rename from resources/lang/nl/help.php rename to resources/lang/nl_NL/help.php diff --git a/resources/lang/nl/list.php b/resources/lang/nl_NL/list.php similarity index 100% rename from resources/lang/nl/list.php rename to resources/lang/nl_NL/list.php diff --git a/resources/lang/nl/pagination.php b/resources/lang/nl_NL/pagination.php similarity index 100% rename from resources/lang/nl/pagination.php rename to resources/lang/nl_NL/pagination.php diff --git a/resources/lang/nl/passwords.php b/resources/lang/nl_NL/passwords.php similarity index 100% rename from resources/lang/nl/passwords.php rename to resources/lang/nl_NL/passwords.php diff --git a/resources/lang/nl/validation.php b/resources/lang/nl_NL/validation.php similarity index 100% rename from resources/lang/nl/validation.php rename to resources/lang/nl_NL/validation.php From de281818ac9a5facac4323d7c14bfe51d00d52ea Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 19 Dec 2015 21:16:09 +0100 Subject: [PATCH 08/64] Add language --- resources/lang/en_US/validation.php | 14 - resources/lang/pt_BR/breadcrumbs.php | 60 ++++ resources/lang/pt_BR/firefly.php | 487 +++++++++++++++++++++++++++ resources/lang/pt_BR/form.php | 96 ++++++ resources/lang/pt_BR/help.php | 93 +++++ resources/lang/pt_BR/list.php | 33 ++ resources/lang/pt_BR/pagination.php | 19 ++ resources/lang/pt_BR/passwords.php | 22 ++ 8 files changed, 810 insertions(+), 14 deletions(-) create mode 100644 resources/lang/pt_BR/breadcrumbs.php create mode 100644 resources/lang/pt_BR/firefly.php create mode 100644 resources/lang/pt_BR/form.php create mode 100644 resources/lang/pt_BR/help.php create mode 100644 resources/lang/pt_BR/list.php create mode 100644 resources/lang/pt_BR/pagination.php create mode 100644 resources/lang/pt_BR/passwords.php diff --git a/resources/lang/en_US/validation.php b/resources/lang/en_US/validation.php index 9ce01aad3f..765085a50b 100644 --- a/resources/lang/en_US/validation.php +++ b/resources/lang/en_US/validation.php @@ -1,18 +1,6 @@ 'Due to security constraints, you cannot register from this domain.', 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', 'file_attached' => 'Succesfully uploaded file ":name".', @@ -73,6 +61,4 @@ return [ "unique" => "The :attribute has already been taken.", "url" => "The :attribute format is invalid.", "timezone" => "The :attribute must be a valid zone.", - 'attributes' => [], - ]; diff --git a/resources/lang/pt_BR/breadcrumbs.php b/resources/lang/pt_BR/breadcrumbs.php new file mode 100644 index 0000000000..3693e4935d --- /dev/null +++ b/resources/lang/pt_BR/breadcrumbs.php @@ -0,0 +1,60 @@ + 'Início', + + // accounts + 'cash_accounts' => 'Contas Correntes', + 'edit_account' => 'Editar conta ":name"', + + // currencies + 'edit_currency' => 'Editar moedas ":name"', + 'delete_currency' => 'Apagar moedas ":name"', + + // piggy banks + 'newPiggyBank' => 'Criar um novo cofrinho', + 'edit_piggyBank' => 'Editar cofrinho ":name"', + + // top menu + 'preferences' => 'Preferências', + 'profile' => 'Perfil', + 'changePassword' => 'Alterar sua senha', + + // bills + 'bills' => 'Faturas', + 'newBill' => 'Nova fatura', + 'edit_bill' => 'Editar fatura ":name"', + 'delete_bill' => 'Apagar fatura ":name"', + + // reports + 'reports' => 'Relatórios', + 'monthly_report' => 'Relatório Mensal para :date', + 'monthly_report_shared' => 'Relatório mensal para :date (incluindo contas compartilhadas)', + 'yearly_report' => 'Relatório Anual para :date', + 'yearly_report_shared' => 'Relatório anual para :date (incluindo contas compartilhadas)', + 'budget_report' => 'Relatório Orçamentário para :date', + + // search + 'searchResult' => 'Pesquisa por ":query"', + + // transaction lists. + 'withdrawal_list' => 'Despesas', + 'deposit_list' => 'Receitas, renda e depósitos', + 'transfer_list' => 'Transferências', + 'transfers_list' => 'Transferências', + + // create transactions + 'create_withdrawal' => 'Criar uma nova retirada', + 'create_deposit' => 'Criar um novo depósito', + 'create_transfer' => 'Criar nova transferência', + + // edit transactions + 'edit_journal' => 'Editar transação ":description"', + 'delete_journal' => 'Apagar transação ":description"', + + // tags + 'tags' => 'Etiquetas', + 'createTag' => 'Criar nova etiqueta', + 'edit_tag' => 'Editar etiqueta ":tag"', + 'delete_tag' => 'Apagar etiqueta ":tag"', + +]; diff --git a/resources/lang/pt_BR/firefly.php b/resources/lang/pt_BR/firefly.php new file mode 100644 index 0000000000..1e39161b3c --- /dev/null +++ b/resources/lang/pt_BR/firefly.php @@ -0,0 +1,487 @@ + 'Você selecionou Inglês', + 'close' => 'Fechar', + 'pleaseHold' => 'Por favor espere...', + 'actions' => 'Ações', + 'edit' => 'Editar', + 'delete' => 'Apagar', + 'welcomeBack' => 'What\'s playing?', + 'everything' => 'Tudo', + 'customRange' => 'Intervalo Personalizado', + 'apply' => 'Aplicar', + 'cancel' => 'Cancelar', + 'from' => 'De', + 'to' => 'Até', + 'total_sum' => 'Soma Total', + 'period_sum' => 'Soma por período', + 'showEverything' => 'Mostrar tudo', + 'never' => 'Never', + 'search_results_for' => 'Pesquisar resultados por ":query"', + 'bounced_error' => 'A mensagem enviado para :email ressaltado, não tem acesso para você.', + 'deleted_error' => 'Estas credenciais não correspondem aos nossos registros.', + 'general_blocked_error' => 'Sua conta foi desativada, você não pode entrar.', + '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', + 'new_deposit' => 'Novo depósito', + 'new_transfer' => '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_budget' => 'Novo orçamento', + 'new_bill' => 'Nova fatura', + + // tags + 'store_new_tag' => 'Armazenar nova tag', + 'update_tag' => 'Atualizar tag', + 'no_location_set' => 'Nenhuma localização.', + 'meta_data' => 'Meta dados', + 'location' => 'Localização', + + // preferences + 'pref_home_screen_accounts' => 'Conta da tela inicial', + 'pref_home_screen_accounts_help' => 'Que conta deve ser exibida na tela inicial?', + 'pref_budget_settings' => 'Definições de Orçamento', + 'pref_budget_settings_help' => 'Qual a quantidade máxima de dinheiro um envelope orçamental pode conter?', + 'pref_view_range' => 'Ver intervalo', + 'pref_view_range_help' => 'Alguns gráficos são agrupados automaticamente 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_languages' => 'Idiomas', + 'pref_languages_help' => 'Firefly III suporta muitos idiomas. Qual você prefere?', + 'pref_save_settings' => 'Salvar definições', + + // profile + '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' => 'Exclusão da conta também excluirá todas as contas, transações, qualquer coisa que você poderia ter salvo em 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!', + + + // 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"', + 'upload_max_file_size' => 'Tamanho máximo do arquivo: :size', + + // tour + 'prev' => 'Anterior', + 'next' => 'Próximo', + 'end-tour' => 'Fim do Tour', + 'pause' => 'Parar', + + // transaction index + 'title_expenses' => 'Despesas', + 'title_withdrawal' => 'Despesas', + 'title_revenue' => 'Receitas / Renda', + 'title_deposit' => 'Receita / Renda', + 'title_transfer' => 'Transferências', + 'title_transfers' => 'Transferências', + + // csv import + 'csv_import' => 'Importar arquivo CSV', + 'csv' => 'CSV', + 'csv_index_title' => 'Carregar e importar um arquivo CSV', + 'csv_define_column_roles' => 'Definir papeis da coluna', + 'csv_map_values' => 'Valores mapeados encontrados para valores existentes', + 'csv_download_config' => 'Download do arquivo CSV de configuração.', + 'csv_index_text' => 'This form allows you to import a CSV file with transactions into Firefly. It is based on the excellent CSV importer made by the folks at Atlassian. Simply upload your CSV file and follow the instructions. If you would like to learn more, please click on the button at the top of this page.', + 'csv_index_beta_warning' => 'Esta ferramenta está em beta. Por favor proceder com cautela', + 'csv_header_help' => 'Check this box when your CSV file\'s first row consists of column names, not actual data', + 'csv_date_help' => 'Date time format in your CSV. Follow the format like this page indicates. The default value will parse dates that look like this: 20151201', + 'csv_csv_file_help' => 'Select the CSV file here. You can only upload one file at a time', + 'csv_csv_config_file_help' => 'Select your CSV import configuration here. If you do not know what this is, ignore it. It will be explained later.', + 'csv_upload_button' => 'Iniciando importação do CSV', + 'csv_column_roles_title' => 'Definir papeis da coluna', + 'csv_column_roles_text' => 'Firefly does not know what each column means. You need to indicate what every column is. Please check out the example data if you\'re not sure yourself. Click on the question mark (top right of the page) to learn what each column means. If you want to map imported data onto existing data in Firefly, use the checkbox. The next step will show you what this button does.', + 'csv_column_roles_table' => 'Papéis da Coluna', + 'csv_column' => 'Coluna CSV', + 'csv_column_name' => 'Nome da coluna do CSV', + 'csv_column_example' => 'Exemplo de dados da coluna', + 'csv_column_role' => 'Coluna contém?', + 'csv_do_map_value' => 'Valor mapeado?', + 'csv_continue' => 'Continuar para o próximo passo', + 'csv_go_back' => 'Voltar para o passo anterior', + 'csv_map_title' => 'Valores mapeados encontrados para valores existentes', + 'csv_map_text' => 'This page allows you to map the values from the CSV file to existing entries in your database. This ensures that accounts and other things won\'t be created twice.', + 'csv_field_value' => 'Valor do campo do CSV', + 'csv_field_mapped_to' => 'Deve ser mapeado para...', + 'csv_do_not_map' => 'Não mapear este valor', + 'csv_download_config_title' => 'Download do CSV de configuração ', + 'csv_download_config_text' => 'Everything you\'ve just set up can be downloaded as a configuration file. Click the button to do so.', + 'csv_more_information_text' => 'If the import fails, you can use this configuration file so you don\'t have to start all over again. But, if the import succeeds, it will be easier to upload similar CSV files.', + 'csv_do_download_config' => 'Download do arquivo de configuração.', + 'csv_empty_description' => '(descrição vazia)', + 'csv_upload_form' => 'Formulário de Upload do CSV', + 'csv_index_unsupported_warning' => 'O importador de CSV está incapaz de fazer o seguinte:', + 'csv_unsupported_map' => 'The importer cannot map the column ":columnRole" to existing values in the database.', + 'csv_unsupported_value' => 'The importer does not know how to handle values in columns marked as ":columnRole".', + 'csv_cannot_store_value' => 'The importer has not reserved space for columns marked ":columnRole" and will be incapable of processing them.', + 'csv_process_title' => 'Importação do CSV terminou!', + 'csv_process_text' => 'O importador do CSV terminou e processou :rows linhas', + 'csv_row' => 'Linha', + 'csv_import_with_errors' => 'Houve um erro.|Houve :errors erros.', + 'csv_error_see_logs' => 'Verifique o arquivo de log para ver detalhes.', + 'csv_process_new_entries' => 'Firefly criou :imported nova(s) transação(ões)', + 'csv_start_over' => 'Importar novamente', + 'csv_to_index' => 'Voltar para tela inicial', + 'csv_upload_not_writeable' => 'Cannot write to the path mentioned here. Cannot upload', + 'csv_column__ignore' => '(ignorar esta coluna)', + 'csv_column_account-iban' => 'Conta de Ativo (IBAN)', + 'csv_column_account-id' => 'ID da Conta de Ativo (correspondente Firefly)', + 'csv_column_account-name' => 'Conta de Ativo (nome)', + 'csv_column_amount' => 'Valor', + 'csv_column_bill-id' => 'ID Fatura (correspondente Firefly)', + 'csv_column_bill-name' => 'Nom da Fatura', + 'csv_column_budget-id' => 'ID do Orçamento (correspondente Firefly)', + 'csv_column_budget-name' => 'Nome do Orçamento', + 'csv_column_category-id' => 'ID da Categoria (correspondente Firefly)', + 'csv_column_category-name' => 'Nome da Categoria', + 'csv_column_currency-code' => 'Código da Moeda (ISO 4217)', + 'csv_column_currency-id' => 'ID da Moeda (correspondente Firefly)', + 'csv_column_currency-name' => 'Nome da Moeda (correspondente Firefly)', + 'csv_column_currency-symbol' => 'Símbolo da Moeda (correspondente Firefly)', + 'csv_column_date-rent' => 'Rent calculation date', + 'csv_column_date-transaction' => 'Data', + 'csv_column_description' => 'Descrição', + 'csv_column_opposing-iban' => 'Opposing account (IBAN)', + 'csv_column_opposing-id' => 'Opposing account ID (matching Firefly)', + 'csv_column_opposing-name' => 'Opposing account (name)', + 'csv_column_rabo-debet-credit' => 'Rabobank specific debet/credit indicator', + 'csv_column_sepa-ct-id' => 'SEPA Credit Transfer end-to-end ID', + 'csv_column_sepa-ct-op' => 'SEPA Credit Transfer opposing account', + 'csv_column_sepa-db' => 'SEPA Direct Debet', + 'csv_column_tags-comma' => 'Tags (separadas por vírgula)', + 'csv_column_tags-space' => 'Tags (separadas por espaço)', + 'csv_specifix_RabobankDescription' => 'Select this when you\'re importing Rabobank CSV export files.', + 'csv_specifix_Dummy' => 'Checking this has no effect whatsoever.', + 'csv_import_account_help' => 'If your CSV file does NOT contain information about your asset account(s), use this dropdown to select to which account the transactions in the CSV belong to.', + 'csv_date_parse_error' => 'Could not parse a valid date from ":value", using the format ":format". Are you sure your CSV is correct?', + + + // 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_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', + + + // currencies + 'create_currency' => 'Criar uma nova moeda', + 'edit_currency' => 'Editar moeda ":name"', + 'store_currency' => 'Armazenar nova moeda', + 'update_currency' => 'Atualizar moeda', + + // new user + 'submit' => 'Enviar', + 'getting_started' => 'Iniciar', + 'to_get_started' => 'To get started with Firefly, please enter your current bank\'s name, and the balance of your checking account:', + 'savings_balance_text' => 'If you have a savings account, please enter the current balance of your savings account:', + 'cc_balance_text' => 'If you have a credit card, please enter your credit card\'s limit.', + + // forms + 'mandatoryFields' => 'Campos obrigatórios', + 'optionalFields' => 'Campos opcionais', + 'options' => 'Opções', + 'something' => 'Qualquer coisa!', + + // budgets + 'create_new_budget' => 'Criar um novo orçamento', + 'store_new_budget' => 'Armazenar novo orçamento', + 'availableIn' => 'Disponível em :date', + 'transactionsWithoutBudget' => 'Despesas sem orçamentos', + 'transactionsWithoutBudgetDate' => 'Despesas sem orçamentos em :date', + 'createBudget' => 'Novo orçamento', + 'inactiveBudgets' => 'Orçamentos inativos', + 'without_budget_between' => 'Transactions without a budget between :start and :end', + 'budget_in_month' => ':name no :month', + 'delete_budget' => 'Delete budget ":name"', + 'edit_budget' => 'Edit budget ":name"', + 'update_amount' => 'Update amount', + 'update_budget' => 'Update budget', + + // bills + 'delete_bill' => 'Delete bill ":name"', + 'edit_bill' => 'Edit bill ":name"', + 'update_bill' => 'Update bill', + 'store_new_bill' => 'Store new bill', + + // accounts + '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"', + + 'asset_deleted' => 'Successfully deleted asset account ":name"', + 'expense_deleted' => 'Successfully deleted expense account ":name"', + 'revenue_deleted' => 'Successfully deleted revenue account ":name"', + + 'update_asset_account' => 'Update asset account', + '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', + + 'asset_accounts' => 'Asset accounts', + 'expense_accounts' => 'Expense accounts', + 'revenue_accounts' => 'Revenue accounts', + + 'accountExtraHelp_asset' => '', + 'accountExtraHelp_expense' => '', + 'accountExtraHelp_revenue' => '', + 'account_type' => 'Account type', + 'save_transactions_by_moving' => 'Save these transaction(s) by moving them to another account:', + + // categories + 'new_category' => 'New category', + 'create_new_category' => 'Create a new category', + 'without_category' => 'Without a category', + 'update_category' => 'Wijzig categorie', + 'categories' => 'Categories', + 'edit_category' => 'Edit category ":name"', + 'no_category' => '(no category)', + 'category' => 'Category', + 'delete_category' => 'Delete category ":name"', + 'store_category' => 'Store new category', + + // transactions + 'update_withdrawal' => 'Update withdrawal', + 'update_deposit' => 'Update deposit', + 'update_transfer' => 'Update transfer', + 'delete_withdrawal' => 'Delete withdrawal ":description"', + 'delete_deposit' => 'Delete deposit ":description"', + 'delete_transfer' => 'Delete transfer ":description"', + + // new user + 'welcome' => 'Welcome to Firefly!', + 'createNewAsset' => 'Create a new asset account to get started. This will allow you to create transactions and start your financial management', + 'createNewAssetButton' => 'Criar nova conta de ativo', + + // home page + 'yourAccounts' => 'Your accounts', + 'budgetsAndSpending' => 'Budgets and spending', + 'savings' => 'Savings', + 'markAsSavingsToContinue' => 'Mark your asset accounts as "Savings account" to fill this panel', + 'createPiggyToContinue' => 'Create piggy banks to fill this panel.', + 'newWithdrawal' => 'New expense', + 'newDeposit' => 'Novo depósito', + 'newTransfer' => 'Nova transferência', + 'moneyIn' => 'Money in', + 'moneyOut' => 'Money out', + 'billsToPay' => 'Bills to pay', + 'billsPaid' => 'Bills paid', + 'viewDetails' => 'View details', + 'divided' => 'divided', + 'toDivide' => 'left to divide', + + // menu and titles, should be recycled as often as possible + 'toggleNavigation' => 'Toggle navigation', + 'currency' => 'Currency', + 'preferences' => 'Preferences', + 'logout' => 'Logout', + 'searchPlaceholder' => 'Search...', + 'dashboard' => 'Dashboard', + 'currencies' => 'Currencies', + 'accounts' => 'Accounts', + 'Asset account' => 'Asset account', + 'Default account' => 'Asset account', + 'Expense account' => 'Conta de Despesa', + 'Revenue account' => 'Conta de Receita', + 'Initial balance account' => 'Initial balance account', + 'budgets' => 'Budgets', + 'tags' => 'Tags', + 'reports' => 'Relatórios', + 'transactions' => 'Transações', + 'expenses' => 'Despesas', + 'income' => 'Receita / Renda', + 'transfers' => 'Transferências', + 'moneyManagement' => 'Gerenciamento de Dinheiro', + 'piggyBanks' => 'Cofrinhos', + 'bills' => 'Faturas', + 'createNew' => 'Criar nova(o)', + 'withdrawal' => 'Retirada', + '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', + 'newBalance' => 'Novo saldo', + 'overview' => 'Visão Geral', + 'saveOnAccount' => 'Salvar na conta', + 'unknown' => 'Desconhecido', + 'daily' => 'Diário', + 'weekly' => 'Semanal', + 'monthly' => 'Mensal', + 'quarterly' => 'Trimestral', + 'half-year' => 'Semestral', + 'yearly' => 'Anual', + 'profile' => 'Perfil', + + // reports + 'report_default' => 'Default financial report for :start until :end', + 'quick_link_reports' => 'Quick links', + 'quick_link_default_report' => 'Default financial report', + 'report_this_month_quick' => 'Current month, all accounts', + 'report_this_year_quick' => 'Current year, all accounts', + 'report_all_time_quick' => 'All-time, all accounts', + 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', + 'incomeVsExpenses' => 'Renda vs. Despesas', + 'accountBalances' => 'Saldos de Contas', + 'balanceStartOfYear' => 'Balance at start of year', + 'balanceEndOfYear' => 'Balance at end of year', + 'balanceStartOfMonth' => 'Balance at start of month', + 'balanceEndOfMonth' => 'Balance at end of month', + 'balanceStart' => 'Balance at start of period', + 'balanceEnd' => 'Balance at end of period', + 'reportsOwnAccounts' => 'Reports for your own accounts', + 'reportsOwnAccountsAndShared' => 'Reports for your own accounts and shared accounts', + 'splitByAccount' => 'Split by account', + 'balancedByTransfersAndTags' => 'Balanced by transfers and tags', + 'coveredWithTags' => 'Covered with tags', + 'leftUnbalanced' => 'Left unbalanced', + 'expectedBalance' => 'Saldo Experado', + 'outsideOfBudgets' => 'Fora do orçamento', + 'leftInBudget' => 'Deixou no orçamento', + 'sumOfSums' => 'Soma dos montantes', + 'noCategory' => '(no category)', + 'notCharged' => 'Não cobrado (ainda)', + 'inactive' => 'Inativo', + 'difference' => 'Diferente', + 'in' => 'Entrada', + 'out' => 'Saída', + 'topX' => 'top :number', + 'showTheRest' => 'Mostrar tudo', + 'hideTheRest' => 'Mostrar apenas os top :number', + 'sum_of_year' => 'Soma do ano', + 'sum_of_years' => 'Sum of years', + 'average_of_year' => 'Média do ano', + 'average_of_years' => 'Average of years', + 'categories_earned_in_year' => 'Categories (by earnings)', + 'categories_spent_in_year' => 'Categories (by spendings)', + 'report_type' => 'Report type', + 'report_type_default' => 'Default financial report', + 'report_included_accounts' => 'Included accounts', + 'report_date_range' => 'Date range', + 'report_include_help' => 'In all cases, transfers to shared accounts count as expenses, and transfers from shared accounts count as income.', + 'report_preset_ranges' => 'Pre-set ranges', + 'shared' => 'Shared', + + // charts + 'dayOfMonth' => 'Dia do mês', + 'month' => 'Mês', + 'budget' => 'Orçamento', + 'spent' => 'Gasto', + 'earned' => 'Ganho', + 'overspent' => 'Gasto excedido', + 'left' => 'Left', + 'noBudget' => '(sem orçamento)', + 'maxAmount' => 'Valor Máximo', + 'minAmount' => 'Valor Mínimo', + 'billEntry' => 'Current bill entry', + 'name' => 'Nome', + 'date' => 'Data', + 'paid' => 'Pago', + 'unpaid' => 'Não pago', + 'day' => 'Dia', + 'budgeted' => 'Orçado', + 'period' => 'Período', + 'balance' => 'Saldo', + 'summary' => 'Sumário', + 'sum' => 'Soma', + 'average' => 'Média', + 'balanceFor' => 'Saldo para ":name"', + + // piggy banks + 'piggy_bank' => 'Cofrinho', + 'new_piggy_bank' => 'Criar novo cofrinho', + 'store_piggy_bank' => 'Store new piggy bank', + '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', + 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', + 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', + 'add' => 'Adicionar', + 'remove' => 'Remover', + '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"', + 'details' => 'Detalhes', + 'events' => 'Eventos', + 'target_amount' => 'Valor alvo', + 'start_date' => 'Data de Início', + 'target_date' => 'Data Alvo', + 'no_target_date' => 'Nenhum data', + 'todo' => 'A fazer', + 'table' => 'Tabela', + 'piggy_bank_not_exists' => 'Piggy bank no longer exists.', + 'add_any_amount_to_piggy' => 'Add money to this piggy bank to reach your target of :amount.', + 'add_set_amount_to_piggy' => 'Add :amount to fill this piggy bank on :date', + 'delete_piggy_bank' => 'Apagar cofrinho ":name"', + + // tags + 'regular_tag' => 'Just a regular tag.', + 'balancing_act' => 'The tag takes at most two transactions; an expense and a transfer. They\'ll balance each other out.', + 'advance_payment' => 'The tag accepts one expense and any number of deposits aimed to repay the original expense.', + + 'delete_tag' => 'Apagar tag ":tag"', + 'new_tag' => 'Fazer nova tag', + 'edit_tag' => 'Editar tag ":tag"', + 'no_year' => 'Nenhum ano definido', + 'no_month' => 'Nenhum mês definido', + 'tag_title_nothing' => 'Tags padrões', + 'tag_title_balancingAct' => 'Balancing act tags', + 'tag_title_advancePayment' => 'Advance payment tags', + 'tags_introduction' => 'Usually tags are singular words, designed to quickly band items together using things like expensive, bill or for-party. In Firefly III, tags can have more properties such as a date, description and location. This allows you to join transactions together in a more meaningful way. For example, you could make a tag called Christmas dinner with friends and add information about the restaurant. Such tags are "singular", you would only use them for a single occasion, perhaps with multiple transactions.', + 'tags_group' => 'Tags group transactions together, which makes it possible to store reimbursements (in case you front money for others) and other "balancing acts" where expenses are summed up (the payments on your new TV) or where expenses and deposits are cancelling each other out (buying something with saved money). It\'s all up to you. Using tags the old-fashioned way is of course always possible. ', + 'tags_start' => 'Create a tag to get started or enter tags when creating new transactions.', + +]; diff --git a/resources/lang/pt_BR/form.php b/resources/lang/pt_BR/form.php new file mode 100644 index 0000000000..f773a9b9f8 --- /dev/null +++ b/resources/lang/pt_BR/form.php @@ -0,0 +1,96 @@ + 'Nome do banco', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Salda da Poupança', + 'credit_card_limit' => 'Limite do Cartão de Crédito', + 'automatch' => 'Match automatically', + 'skip' => 'Pular', + 'name' => 'Nome', + 'active' => 'Ativar', + 'amount_min' => 'Valor Mínimo', + 'amount_max' => 'Valor Máximo', + 'match' => 'Corresponde em', + 'repeat_freq' => 'Repetições', + 'account_from_id' => 'da conta', + 'account_to_id' => 'para conta', + 'account_id' => 'Asset account', + 'budget_id' => 'Orçamento', + 'openingBalance' => 'Saldo inicial', + 'tagMode' => 'Tag mode', + 'tagPosition' => 'Tag location', + 'virtualBalance' => 'Saldo virtual', + 'longitude_latitude' => 'Localização', + 'targetamount' => 'Valor alvo', + 'accountRole' => 'Account role', + 'openingBalanceDate' => 'Data do Saldo inicial', + 'ccType' => 'Plano de pagamento do Cartão de Crédito', + 'ccMonthlyPaymentDate' => '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', + 'description' => 'Descrição', + 'expense_account' => 'Conta de Despesa', + 'revenue_account' => 'Conta de Receita', + 'amount' => 'Valor', + 'date' => 'Data', + 'category' => 'Categoria', + 'tags' => 'Tags', + 'deletePermanently' => 'Apagar permanentemente', + 'cancel' => 'Cancelar', + 'targetdate' => 'Data Alvo', + 'tag' => 'Tag', + 'under' => 'Debaixo', + 'symbol' => 'Símbolo', + 'code' => 'Código', + 'iban' => 'IBAN', + 'csv' => 'Arquivo CSV', + 'has_headers' => 'Cabeçalhos', + 'date_format' => 'Formato da Data', + 'csv_config' => 'Importar CSV de configuração', + 'specifix' => 'Bank- or file specific fixes', + 'csv_import_account' => 'Default import account', + 'attachments[]' => 'Anexos', + 'store_new_withdrawal' => 'Store new withdrawal', + 'store_new_deposit' => 'Store new deposit', + 'store_new_transfer' => 'Store new transfer', + 'add_new_withdrawal' => 'Add a new withdrawal', + 'add_new_deposit' => 'Add a new deposit', + 'add_new_transfer' => 'Add a new transfer', + 'noPiggybank' => '(no piggy bank)', + 'noBudget' => '(sem orçamento)', + 'title' => 'Título', + 'notes' => 'Notas', + 'filename' => 'Nome do arquivo', + 'mime' => 'Mime type', + 'size' => 'Tamanho', + + 'delete_account' => 'Apagar conta ":name"', + 'delete_bill' => 'Apagar fatura ":name"', + 'delete_budget' => 'Delete budget ":name"', + 'delete_category' => 'Delete category ":name"', + 'delete_currency' => 'Delete currency ":name"', + 'delete_journal' => 'Delete transaction with description ":description"', + 'delete_attachment' => 'Apagar anexo ":name"', + + 'attachment_areYouSure' => 'Are you sure you want to delete the attachment named ":name"?', + 'account_areYouSure' => 'Are you sure you want to delete the account named ":name"?', + 'bill_areYouSure' => 'Você tem certeza que quer apagar a fatura ":name"?', + 'budget_areYouSure' => 'Are you sure you want to delete the budget named ":name"?', + 'category_areYouSure' => 'Are you sure you want to delete the category named ":name"?', + 'currency_areYouSure' => 'Are you sure you want to delete the currency named ":name"?', + 'piggyBank_areYouSure' => 'Are you sure you want to delete the piggy bank named ":name"?', + 'journal_areYouSure' => 'Are you sure you want to delete the transaction described ":description"?', + 'tag_areYouSure' => 'Você tem certeza que quer apagar a tag ":tag"?', + + 'permDeleteWarning' => 'Deleting stuff from Firely is permanent and cannot be undone.', + 'also_delete_transactions' => 'The only transaction connected to this account will be deleted as well.|All :count transactions connected to this account will be deleted as well.', + 'also_delete_piggyBanks' => 'The only piggy bank connected to this account will be deleted as well.|All :count piggy bank connected to this account will be deleted as well.', + 'bill_keep_transactions' => 'A única transação vinculada para esta fatura não será apagada.|Todas :count transações vinculadas a esta fatura não serão apagadas.', + 'budget_keep_transactions' => 'The only transaction connected to this budget will not be deleted.|All :count transactions connected to this budget will spared deletion.', + 'category_keep_transactions' => 'The only transaction connected to this category will not be deleted.|All :count transactions connected to this category will spared deletion.', + 'tag_keep_transactions' => 'The only transaction connected to this tag will not be deleted.|All :count transactions connected to this tag will spared deletion.', +]; diff --git a/resources/lang/pt_BR/help.php b/resources/lang/pt_BR/help.php new file mode 100644 index 0000000000..ca6f66c753 --- /dev/null +++ b/resources/lang/pt_BR/help.php @@ -0,0 +1,93 @@ + 'Bem Vindo ao Firefly III', + 'main-content-text' => 'Do yourself a favor and follow this short guide to make sure you know your way around.', + 'sidebar-toggle-title' => 'Sidebar to create stuff', + 'sidebar-toggle-text' => 'Hidden under the plus icon are all the buttons to create new stuff. Accounts, transactions, everything!', + 'account-menu-title' => 'All your accounts', + 'account-menu-text' => 'Here you can find all the accounts you\'ve made.', + 'budget-menu-title' => 'Budgets', + 'budget-menu-text' => 'Use this page to organise your finances and limit spending.', + 'report-menu-title' => 'Relatórios', + 'report-menu-text' => 'Check this out when you want a solid overview of your fiances.', + 'transaction-menu-title' => 'Transações', + 'transaction-menu-text' => 'All transactions you\'ve created can be found here.', + 'option-menu-title' => 'Opções', + 'option-menu-text' => 'This is pretty self-explanatory.', + 'main-content-end-title' => 'Fim!', + 'main-content-end-text' => 'Remember that every page has a small question mark at the right top. Click it to get help about the page you\'re on.', + + + 'register' => 'register', + 'index' => 'The main index', + 'home' => 'home', + 'flush' => 'flush', + 'accounts-index' => 'accounts.index', + 'accounts-create' => 'accounts.create', + 'accounts-edit' => 'accounts.edit', + 'accounts-delete' => 'accounts.delete', + 'accounts-show' => 'accounts.show', + 'bills-index' => 'bills.index', + 'bills-rescan' => 'bills.rescan', + 'bills-create' => 'bills.create', + 'bills-edit' => 'bills.edit', + 'bills-delete' => 'bills.delete', + 'bills-show' => 'bills.show', + 'budgets-index' => 'budgets.index', + 'budgets-income' => 'budgets.income', + 'budgets-create' => 'budgets.create', + 'budgets-edit' => 'budgets.edit', + 'budgets-delete' => 'budgets.delete', + 'budgets-show' => 'budgets.show', + 'budgets-noBudget' => 'budgets.noBudget', + 'categories-index' => 'categories.index', + 'categories-create' => 'categories.create', + 'categories-edit' => 'categories.edit', + 'categories-delete' => 'categories.delete', + 'categories-show' => 'categories.show', + 'categories-noCategory' => 'categories.noCategory', + 'csv-index' => 'Carregar e importar um arquivo CSV', + 'currency-index' => 'currency.index', + 'currency-create' => 'currency.create', + 'currency-edit' => 'currency.edit', + 'currency-delete' => 'currency.delete', + 'currency-default' => 'currency.default', + 'help-show' => 'help.show', + 'json-expense-accounts' => 'json.expense-accounts', + 'json-revenue-accounts' => 'json.revenue-accounts', + 'json-categories' => 'json.categories', + 'json-tags' => 'json.tags', + 'json-box-in' => 'json.box.in', + 'json-box-out' => 'json.box.out', + 'json-box-paid' => 'json.box.paid', + 'json-box-unpaid' => 'json.box.unpaid', + 'new-user-index' => 'new-user.index', + 'piggy-banks-index' => 'piggy-banks.index', + 'piggy-banks-addMoney' => 'piggy-banks.addMoney', + 'piggy-banks-removeMoney' => 'piggy-banks.removeMoney', + 'piggy-banks-create' => 'piggy-banks.create', + 'piggy-banks-edit' => 'piggy-banks.edit', + 'piggy-banks-delete' => 'piggy-banks.delete', + 'piggy-banks-show' => 'piggy-banks.show', + 'preferences' => 'preferences', + 'profile' => 'profile', + 'profile-change-password' => 'profile.change-password', + 'profile-delete-account' => 'profile.delete-account', + 'reports-index' => 'reports.index', + 'reports-year' => 'reports.year', + 'reports-month' => 'reports.month', + 'search' => 'search', + 'tags-index' => 'tags.index', + 'tags-create' => 'tags.create', + 'tags-show' => 'tags.show', + 'tags-edit' => 'tags.edit', + 'tags-delete' => 'tags.delete', + 'transactions-index' => 'transactions.index', + 'transactions-create' => 'transactions.create', + 'transactions-edit' => 'transactions.edit', + 'transactions-delete' => 'transactions.delete', + 'transactions-show' => 'transactions.show', + 'logout' => 'logout', +]; diff --git a/resources/lang/pt_BR/list.php b/resources/lang/pt_BR/list.php new file mode 100644 index 0000000000..779d2c44ea --- /dev/null +++ b/resources/lang/pt_BR/list.php @@ -0,0 +1,33 @@ + 'Nome', + 'role' => 'Papel', + 'currentBalance' => 'Saldo atual', + 'active' => 'Está ativo?', + 'lastActivity' => 'Última atividade', + 'balanceDiff' => 'Saldo diferente entre :start e :end', + 'matchedOn' => 'Coincide', + 'matchesOn' => 'Correspondido em', + 'matchingAmount' => 'Total', + 'lastMatch' => 'Último equivalente', + 'expectedMatch' => 'Equivalente esperado', + 'automatch' => 'Auto equivale?', + 'repeat_freq' => 'Repetições', + 'description' => 'Descrição', + 'amount' => 'Total', + 'date' => 'Data', + 'from' => 'De', + 'to' => 'Até', + 'budget' => 'Orçamento', + 'category' => 'Categoria', + 'bill' => 'Fatura', + 'withdrawal' => 'Retirada', + 'deposit' => 'Depósito', + 'transfer' => 'Transferência', + 'type' => 'Tipo', + 'completed' => 'Completo', + 'iban' => 'IBAN', +]; diff --git a/resources/lang/pt_BR/pagination.php b/resources/lang/pt_BR/pagination.php new file mode 100644 index 0000000000..6a32f34ac0 --- /dev/null +++ b/resources/lang/pt_BR/pagination.php @@ -0,0 +1,19 @@ + '« Anterior', + 'next' => 'Próximo »', + +]; diff --git a/resources/lang/pt_BR/passwords.php b/resources/lang/pt_BR/passwords.php new file mode 100644 index 0000000000..7e45ef4749 --- /dev/null +++ b/resources/lang/pt_BR/passwords.php @@ -0,0 +1,22 @@ + "As senhas devem ter pelo menos seis caracteres e devem ser iguais.", + "user" => "Não podemos encontrar um usuário com esse endereço de 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!", + 'blocked' => 'Nice try though.' + +]; From a0677042775b2b5700280c2b3217432b914e80be Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 20 Dec 2015 07:34:01 +0100 Subject: [PATCH 09/64] Move stuff around. --- .env.example | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 9a4ad1ba45..0633f79412 100644 --- a/.env.example +++ b/.env.example @@ -18,8 +18,9 @@ EMAIL_SMTP= EMAIL_DRIVER=smtp EMAIL_USERNAME= EMAIL_PASSWORD= -ANALYTICS_ID= EMAIL_PRETEND=false + +ANALYTICS_ID= RUNCLEANUP=true SITE_OWNER=mail@example.com From 2e35260bbb613bdd6374623fd9b93bec6ca3b95d Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 20 Dec 2015 07:34:10 +0100 Subject: [PATCH 10/64] Add some translations. --- resources/lang/en_US/validation.php | 3 ++ resources/lang/nl_NL/validation.php | 4 +- resources/lang/pt_BR/validation.php | 68 +++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100755 resources/lang/pt_BR/validation.php diff --git a/resources/lang/en_US/validation.php b/resources/lang/en_US/validation.php index 765085a50b..a1195f6ef5 100644 --- a/resources/lang/en_US/validation.php +++ b/resources/lang/en_US/validation.php @@ -35,6 +35,7 @@ return [ "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.", @@ -49,6 +50,7 @@ return [ "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.", @@ -59,6 +61,7 @@ return [ "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.", ]; diff --git a/resources/lang/nl_NL/validation.php b/resources/lang/nl_NL/validation.php index 1539bca460..b30ad61e17 100644 --- a/resources/lang/nl_NL/validation.php +++ b/resources/lang/nl_NL/validation.php @@ -47,6 +47,7 @@ return [ "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.", @@ -61,6 +62,7 @@ return [ "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.", @@ -72,7 +74,7 @@ return [ "size.array" => "The :attribute must contain :size items.", "unique" => "The :attribute has already been taken.", "url" => "The :attribute format is invalid.", + 'string' => 'The :attribute must be a string.', "timezone" => "The :attribute must be a valid zone.", - 'attributes' => [], ]; diff --git a/resources/lang/pt_BR/validation.php b/resources/lang/pt_BR/validation.php new file mode 100755 index 0000000000..fa3ebc59bc --- /dev/null +++ b/resources/lang/pt_BR/validation.php @@ -0,0 +1,68 @@ + 'Due to security constraints, you cannot register from this domain.', + 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', + 'file_attached' => 'Succesfully uploaded file ":name".', + '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.', + 'accepted' => 'O campo :attribute deve ser aceito.', + 'active_url' => 'O campo :attribute não contém um URL válido.', + 'after' => 'O campo :attribute deverá conter uma data posterior a :date.', + '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" => "There already is an entry with this :attribute.", + 'before' => 'O campo :attribute deverá conter uma data anterior a :date.', + 'unique_object_for_user' => 'This name is already in use', + 'unique_account_for_user' => 'This account name is already in use', + '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.', + 'exists' => 'O valor selecionado para o campo :attribute é inválido.', + 'filled' => 'O campo :attribute é obrigatório.', + '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.', + '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.', + '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.', + '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.', + 'string' => 'O campo :attribute deve ser uma string.', + 'timezone' => 'O campo :attribute deverá ter um fuso horário válido.', + 'unique' => 'O valor indicado para o campo :attribute já se encontra utilizado.', + 'url' => 'O formato do URL indicado para o campo :attribute é inválido.', + +]; From 9b40cc6881b533c28537b9659bcc827315ee1ac2 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 20 Dec 2015 08:19:26 +0100 Subject: [PATCH 11/64] Fix locale setting for Carbon. --- app/Http/Middleware/Authenticate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 0205f06ba6..b0caed5ef4 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -63,7 +63,7 @@ class Authenticate // if logged in, set user language: $pref = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US')); App::setLocale($pref->data); - Carbon::setLocale($pref->data); + Carbon::setLocale(substr($pref->data,0,2)); setlocale(LC_TIME, Config::get('firefly.locales.' . $pref->data)); setlocale(LC_MONETARY, Config::get('firefly.locales.' . $pref->data)); From 32771fe7e101b20d4793f8e2e40941ba26f65faf Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 20 Dec 2015 08:20:50 +0100 Subject: [PATCH 12/64] =?UTF-8?q?Add=20Portugu=C3=AAs=20do=20Brasil?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/firefly.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/firefly.php b/config/firefly.php index ced04e09a9..ebfb2e0f76 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -100,7 +100,8 @@ return [ ], 'lang' => [ 'en_US' => 'English', - 'nl_NL' => 'Nederlands' + 'nl_NL' => 'Nederlands', + 'pt_BR' => 'Português do Brasil', ], 'locales' => [ 'en_US' => ['en', 'English', 'en_US', 'en_US.utf8'], From 5e76488ae71521b3cf4345a04c6643db971994f2 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 20 Dec 2015 08:40:58 +0100 Subject: [PATCH 13/64] Better localisation in charts. --- app/Http/Controllers/Controller.php | 3 ++- public/js/charts.js | 10 +++++----- resources/twig/layout/default.twig | 4 ++++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index d733973e30..dcbb6cf7be 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -34,7 +34,7 @@ abstract class Controller extends BaseController View::share('hideTags', false); if (Auth::check()) { - $pref = Preferences::get('language',env('DEFAULT_LANGUAGE','en_US')); + $pref = Preferences::get('language', env('DEFAULT_LANGUAGE', 'en_US')); $lang = $pref->data; $this->monthFormat = Config::get('firefly.month.' . $lang); $this->monthAndDayFormat = Config::get('firefly.monthAndDay.' . $lang); @@ -42,6 +42,7 @@ abstract class Controller extends BaseController View::share('monthFormat', $this->monthFormat); View::share('monthAndDayFormat', $this->monthAndDayFormat); View::share('language', $lang); + View::share('localeconv', localeconv()); } } } diff --git a/public/js/charts.js b/public/js/charts.js index 17d70962c0..dc6227c8f4 100644 --- a/public/js/charts.js +++ b/public/js/charts.js @@ -1,4 +1,4 @@ -/* globals $, Chart, currencySymbol */ +/* globals $, Chart, currencySymbol,mon_decimal_point ,accounting, mon_thousands_sep, frac_digits */ /* Make some colours: @@ -29,16 +29,16 @@ accounting.settings = { currency: { symbol : currencySymbol, // default currency symbol is '$' format: "%s %v", // controls output: %s = symbol, %v = value/number (can be object: see below) - decimal : ",", // decimal point separator - thousand: ".", // thousands separator - precision : 2 // decimal places + decimal : mon_decimal_point, // decimal point separator + thousand: mon_thousands_sep, // thousands separator + precision : frac_digits // decimal places }, number: { precision : 0, // default precision on numbers is 0 thousand: ",", decimal : "." } -} +}; var fillColors = []; diff --git a/resources/twig/layout/default.twig b/resources/twig/layout/default.twig index 30c21850fb..6599dde596 100644 --- a/resources/twig/layout/default.twig +++ b/resources/twig/layout/default.twig @@ -184,6 +184,10 @@ var language = "{{ language }}"; var currencyCode = '{{ getCurrencyCode() }}'; var currencySymbol = '{{ getCurrencySymbol()|raw }}'; + var mon_decimal_point = "{{ localeconv.mon_decimal_point }}"; + var mon_thousands_sep = "{{ localeconv.mon_thousands_sep }}"; + var frac_digits = {{ localeconv.frac_digits }}; + From 1ab3f05b3ae0c9638ac9bb1f33508abc4726d903 Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 21 Dec 2015 10:25:57 +0100 Subject: [PATCH 14/64] Fix a bug where the report page would mess up the session dates. --- app/Http/Controllers/ReportController.php | 18 ++++++++++++++---- resources/twig/reports/index.twig | 10 +++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index e9cee699e6..59bf1f01ac 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -42,8 +42,16 @@ class ReportController extends Controller */ public function index(AccountRepositoryInterface $repository) { - $start = Session::get('first'); - $months = $this->helper->listOfMonths($start); + $start = Session::get('first'); + $months = $this->helper->listOfMonths($start); + $startOfMonth = clone Session::get('start'); + $endOfMonth = clone Session::get('start'); + $startOfYear = clone Session::get('start'); + $endOfYear = clone Session::get('start'); + $startOfMonth->startOfMonth(); + $endOfMonth->endOfMonth(); + $startOfYear->startOfYear(); + $endOfYear->endOfYear(); // does the user have shared accounts? $accounts = $repository->getAccounts(['Default account', 'Asset account']); @@ -56,7 +64,9 @@ class ReportController extends Controller $accountList = join(',', $accountIds); - return view('reports.index', compact('months', 'accounts', 'start', 'accountList')); + return view('reports.index', compact('months', 'accounts', 'start', 'accountList', + 'startOfMonth', 'endOfMonth', 'startOfYear', 'endOfYear' + )); } /** @@ -194,7 +204,7 @@ class ReportController extends Controller 'firefly.report_default', [ 'start' => $start->formatLocalized($this->monthFormat), - 'end' => $end->formatLocalized($this->monthFormat) + 'end' => $end->formatLocalized($this->monthFormat), ] ) ); diff --git a/resources/twig/reports/index.twig b/resources/twig/reports/index.twig index 773de4e3d8..93ca24c200 100644 --- a/resources/twig/reports/index.twig +++ b/resources/twig/reports/index.twig @@ -95,16 +95,16 @@
  • {{ 'report_this_month_quick'|_ }}
  • {{ 'report_this_year_quick'|_ }}
  • @@ -112,7 +112,7 @@ {{ 'report_all_time_quick'|_ }} From 44811a3e7cbf9955e47a8b531590fb781230c157 Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 21 Dec 2015 11:30:58 +0100 Subject: [PATCH 15/64] Fix a bug where the frontpage would not honor transaction order. --- app/Repositories/Account/AccountRepository.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index 516be1fa6e..4376e02ff9 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -172,6 +172,7 @@ class AccountRepository implements AccountRepositoryInterface ->before($end) ->after($start) ->orderBy('transaction_journals.date', 'DESC') + ->orderBy('transaction_journals.order', 'ASC') ->orderBy('transaction_journals.id', 'DESC') ->take(10) ->get(['transaction_journals.*', 'transaction_currencies.symbol', 'transaction_types.type']); From ad577e4e8196dc2441a9b40d12724f2bcae3d868 Mon Sep 17 00:00:00 2001 From: James Cole Date: Tue, 22 Dec 2015 20:46:16 +0100 Subject: [PATCH 16/64] Expand language files. --- config/firefly.php | 31 +- resources/lang/en_US/validation.php | 4 +- resources/lang/fr_FR/breadcrumbs.php | 60 ++++ resources/lang/fr_FR/firefly.php | 487 +++++++++++++++++++++++++++ resources/lang/fr_FR/form.php | 96 ++++++ resources/lang/fr_FR/help.php | 93 +++++ resources/lang/fr_FR/list.php | 33 ++ resources/lang/fr_FR/pagination.php | 19 ++ resources/lang/fr_FR/passwords.php | 21 ++ resources/lang/fr_FR/validation.php | 78 +++++ 10 files changed, 908 insertions(+), 14 deletions(-) create mode 100644 resources/lang/fr_FR/breadcrumbs.php create mode 100644 resources/lang/fr_FR/firefly.php create mode 100644 resources/lang/fr_FR/form.php create mode 100644 resources/lang/fr_FR/help.php create mode 100644 resources/lang/fr_FR/list.php create mode 100644 resources/lang/fr_FR/pagination.php create mode 100644 resources/lang/fr_FR/passwords.php create mode 100644 resources/lang/fr_FR/validation.php diff --git a/config/firefly.php b/config/firefly.php index ebfb2e0f76..d5fe717dc4 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -1,20 +1,20 @@ 'chartjs', - 'version' => '3.5.4', - 'index_periods' => ['1D', '1W', '1M', '3M', '6M', '1Y', 'custom'], - 'budget_periods' => ['daily', 'weekly', 'monthly', 'quarterly', 'half-year', 'yearly'], - 'csv_import_enabled' => true, - 'maxUploadSize' => 5242880, - 'allowedMimes' => ['image/png', 'image/jpeg', 'application/pdf'], - 'piggy_bank_periods' => [ + 'chart' => 'chartjs', + 'version' => '3.5.4', + 'index_periods' => ['1D', '1W', '1M', '3M', '6M', '1Y', 'custom'], + 'budget_periods' => ['daily', 'weekly', 'monthly', 'quarterly', 'half-year', 'yearly'], + 'csv_import_enabled' => true, + 'maxUploadSize' => 5242880, + 'allowedMimes' => ['image/png', 'image/jpeg', 'application/pdf'], + 'piggy_bank_periods' => [ 'week' => 'Week', 'month' => 'Month', 'quarter' => 'Quarter', 'year' => 'Year' ], - 'periods_to_text' => [ + 'periods_to_text' => [ 'weekly' => 'A week', 'monthly' => 'A month', 'quarterly' => 'A quarter', @@ -22,7 +22,7 @@ return [ 'yearly' => 'A year', ], - 'accountRoles' => [ + 'accountRoles' => [ 'defaultAsset' => 'Default asset account', 'sharedAsset' => 'Shared asset account', 'savingAsset' => 'Savings account', @@ -101,11 +101,14 @@ return [ 'lang' => [ 'en_US' => 'English', 'nl_NL' => 'Nederlands', + 'fr_FR' => 'Français', 'pt_BR' => 'Português do Brasil', ], 'locales' => [ 'en_US' => ['en', 'English', 'en_US', 'en_US.utf8'], 'nl_NL' => ['nl', 'Dutch', 'nl_NL', 'nl_NL.utf8'], + 'pt_BR' => ['pt_BR', 'pt_BR.utf8'], + 'fr_FR' => ['fr_FR', 'fr_FR.utf8'], ], 'transactionTypesByWhat' => [ 'expenses' => ['Withdrawal'], @@ -125,13 +128,17 @@ return [ ], - 'month' => [ + 'month' => [ 'en_US' => '%B %Y', 'nl_NL' => '%B %Y', + 'fr_FR' => '%B %Y', + 'pt_BR' => '%B %Y', ], - 'monthAndDay' => [ + 'monthAndDay' => [ 'en_US' => '%B %e, %Y', 'nl_NL' => '%e %B %Y', + 'fr_FR' => '%B %e, %Y', + 'pt_BR' => '%B %e, %Y', ], ]; diff --git a/resources/lang/en_US/validation.php b/resources/lang/en_US/validation.php index a1195f6ef5..21dbc4ed0e 100644 --- a/resources/lang/en_US/validation.php +++ b/resources/lang/en_US/validation.php @@ -35,7 +35,7 @@ return [ "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.', + '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.", @@ -50,7 +50,7 @@ return [ "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_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.", diff --git a/resources/lang/fr_FR/breadcrumbs.php b/resources/lang/fr_FR/breadcrumbs.php new file mode 100644 index 0000000000..9de636cc33 --- /dev/null +++ b/resources/lang/fr_FR/breadcrumbs.php @@ -0,0 +1,60 @@ + 'Accueil', + + // accounts + 'cash_accounts' => 'Cash accounts', + 'edit_account' => 'Editer le compte : ":name"', + + // currencies + 'edit_currency' => 'Editer la devise : ";name"', + 'delete_currency' => 'Supprimer la devise ":name"', + + // piggy banks + 'newPiggyBank' => 'Create a new piggy bank', + 'edit_piggyBank' => 'Edit piggy bank ":name"', + + // top menu + 'preferences' => 'Preferences', + 'profile' => 'Profil', + 'changePassword' => 'Modifier le mot de passe', + + // bills + 'bills' => 'Factures', + 'newBill' => 'Nouvelle facture', + 'edit_bill' => 'Editer la facture : ":name"', + 'delete_bill' => 'Supprimer la facture ":name"', + + // reports + 'reports' => 'Rapport', + 'monthly_report' => 'Rapport mensuel pour :date', + 'monthly_report_shared' => 'Rapport mensuel pour :date (avec les comptes joints)', + 'yearly_report' => 'Rapport annuel pour :date', + 'yearly_report_shared' => 'Rapport annuel pour :date (avec les comptes joints)', + 'budget_report' => 'Rapport budgetaire pour :date', + + // search + 'searchResult' => 'Resultat de recherche pour ":query"', + + // transaction lists. + 'withdrawal_list' => 'Dépenses', + 'deposit_list' => 'Revenue, Salaire et depots ', + 'transfer_list' => 'Transferts', + 'transfers_list' => 'Transferts', + + // create transactions + 'create_withdrawal' => 'Creer un nouveau retrait', + 'create_deposit' => 'Create new deposit', + 'create_transfer' => 'Creer un nouveau transfert', + + // edit transactions + 'edit_journal' => 'Editer la transaction ":description"', + 'delete_journal' => 'Supprimer la transaction ":description"', + + // tags + 'tags' => 'Tags', + 'createTag' => 'Créer un nouveau tag', + 'edit_tag' => 'Editer le tag ":tag"', + 'delete_tag' => 'Supprimer le tag ":tag"', + +]; diff --git a/resources/lang/fr_FR/firefly.php b/resources/lang/fr_FR/firefly.php new file mode 100644 index 0000000000..53eedbd87e --- /dev/null +++ b/resources/lang/fr_FR/firefly.php @@ -0,0 +1,487 @@ + 'Vous avez choisi Anglais', + 'close' => 'Fermer', + 'pleaseHold' => 'Veuillew patienter...', + 'actions' => 'Actions', + 'edit' => 'Editer', + 'delete' => 'Supprimer', + 'welcomeBack' => 'What\'s playing?', + 'everything' => 'Everything', + 'customRange' => 'Custom range', + 'apply' => 'Apply', + 'cancel' => 'Cancel', + 'from' => 'From', + 'to' => 'To', + 'total_sum' => 'Total sum', + 'period_sum' => 'Sum for period', + 'showEverything' => 'Show everything', + 'never' => 'Never', + 'search_results_for' => 'Search results for ":query"', + 'bounced_error' => 'The message sent to :email bounced, so no access for you.', + 'deleted_error' => 'These credentials do not match our records.', + 'general_blocked_error' => 'Your account has been disabled, so you cannot login.', + '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', + 'new_deposit' => 'New deposit', + 'new_transfer' => 'New transfer', + 'new_asset_account' => 'New asset account', + 'new_expense_account' => 'New expense account', + 'new_revenue_account' => 'New revenue account', + 'new_budget' => 'New budget', + 'new_bill' => 'New bill', + + // tags + 'store_new_tag' => 'Store new tag', + 'update_tag' => 'Update tag', + 'no_location_set' => 'No location set.', + 'meta_data' => 'Meta data', + 'location' => 'Location', + + // preferences + 'pref_home_screen_accounts' => 'Home screen accounts', + 'pref_home_screen_accounts_help' => 'Which accounts should be displayed on the home page?', + 'pref_budget_settings' => 'Budget settings', + 'pref_budget_settings_help' => 'What\'s the maximum amount of money a budget envelope may contain?', + 'pref_view_range' => 'View range', + 'pref_view_range_help' => 'Some charts are automatically 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_languages' => 'Languages', + 'pref_languages_help' => 'Firefly III supports several languages. Which one do you prefer?', + 'pref_save_settings' => 'Save settings', + + // profile + '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!', + + + // 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"', + 'upload_max_file_size' => 'Maximum file size: :size', + + // tour + 'prev' => 'Prev', + 'next' => 'Next', + 'end-tour' => 'End tour', + 'pause' => 'Pause', + + // transaction index + 'title_expenses' => 'Expenses', + 'title_withdrawal' => 'Expenses', + 'title_revenue' => 'Revenue / income', + 'title_deposit' => 'Revenue / income', + 'title_transfer' => 'Transferts', + 'title_transfers' => 'Transferts', + + // csv import + 'csv_import' => 'Import CSV file', + 'csv' => 'CSV', + 'csv_index_title' => 'Upload and import a CSV file', + 'csv_define_column_roles' => 'Define column roles', + 'csv_map_values' => 'Map found values to existing values', + 'csv_download_config' => 'Download CSV configuration file.', + 'csv_index_text' => 'This form allows you to import a CSV file with transactions into Firefly. It is based on the excellent CSV importer made by the folks at Atlassian. Simply upload your CSV file and follow the instructions. If you would like to learn more, please click on the button at the top of this page.', + 'csv_index_beta_warning' => 'This tool is very much in beta. Please proceed with caution', + 'csv_header_help' => 'Check this box when your CSV file\'s first row consists of column names, not actual data', + 'csv_date_help' => 'Date time format in your CSV. Follow the format like this page indicates. The default value will parse dates that look like this: 20151201', + 'csv_csv_file_help' => 'Select the CSV file here. You can only upload one file at a time', + 'csv_csv_config_file_help' => 'Select your CSV import configuration here. If you do not know what this is, ignore it. It will be explained later.', + 'csv_upload_button' => 'Start importing CSV', + 'csv_column_roles_title' => 'Define column roles', + 'csv_column_roles_text' => 'Firefly does not know what each column means. You need to indicate what every column is. Please check out the example data if you\'re not sure yourself. Click on the question mark (top right of the page) to learn what each column means. If you want to map imported data onto existing data in Firefly, use the checkbox. The next step will show you what this button does.', + 'csv_column_roles_table' => 'Column roles', + 'csv_column' => 'CSV column', + 'csv_column_name' => 'CSV column name', + 'csv_column_example' => 'Column example data', + 'csv_column_role' => 'Column contains?', + 'csv_do_map_value' => 'Map value?', + 'csv_continue' => 'Continue to the next step', + 'csv_go_back' => 'Go back to the previous step', + 'csv_map_title' => 'Map found values to existing values', + 'csv_map_text' => 'This page allows you to map the values from the CSV file to existing entries in your database. This ensures that accounts and other things won\'t be created twice.', + 'csv_field_value' => 'Field value from CSV', + 'csv_field_mapped_to' => 'Must be mapped to...', + 'csv_do_not_map' => 'Do not map this value', + 'csv_download_config_title' => 'Download CSV configuration', + 'csv_download_config_text' => 'Everything you\'ve just set up can be downloaded as a configuration file. Click the button to do so.', + 'csv_more_information_text' => 'If the import fails, you can use this configuration file so you don\'t have to start all over again. But, if the import succeeds, it will be easier to upload similar CSV files.', + 'csv_do_download_config' => 'Download configuration file.', + 'csv_empty_description' => '(empty description)', + 'csv_upload_form' => 'CSV upload form', + 'csv_index_unsupported_warning' => 'The CSV importer is yet incapable of doing the following:', + 'csv_unsupported_map' => 'The importer cannot map the column ":columnRole" to existing values in the database.', + 'csv_unsupported_value' => 'The importer does not know how to handle values in columns marked as ":columnRole".', + 'csv_cannot_store_value' => 'The importer has not reserved space for columns marked ":columnRole" and will be incapable of processing them.', + 'csv_process_title' => 'CSV import finished!', + 'csv_process_text' => 'The CSV importer has finished and has processed :rows rows', + 'csv_row' => 'Row', + 'csv_import_with_errors' => 'There was one error.|There were :errors errors.', + 'csv_error_see_logs' => 'Check the log files to see details.', + 'csv_process_new_entries' => 'Firefly has created :imported new transaction(s).', + 'csv_start_over' => 'Import again', + 'csv_to_index' => 'Back home', + 'csv_upload_not_writeable' => 'Cannot write to the path mentioned here. Cannot upload', + 'csv_column__ignore' => '(ignore this column)', + 'csv_column_account-iban' => 'Asset account (IBAN)', + 'csv_column_account-id' => 'Asset account ID (matching Firefly)', + 'csv_column_account-name' => 'Asset account (name)', + 'csv_column_amount' => 'Amount', + 'csv_column_bill-id' => 'Bill ID (matching Firefly)', + 'csv_column_bill-name' => 'Bill name', + 'csv_column_budget-id' => 'Budget ID (matching Firefly)', + 'csv_column_budget-name' => 'Budget name', + 'csv_column_category-id' => 'Category ID (matching Firefly)', + 'csv_column_category-name' => 'Category name', + 'csv_column_currency-code' => 'Currency code (ISO 4217)', + 'csv_column_currency-id' => 'Currency ID (matching Firefly)', + 'csv_column_currency-name' => 'Currency name (matching Firefly)', + 'csv_column_currency-symbol' => 'Currency symbol (matching Firefly)', + 'csv_column_date-rent' => 'Rent calculation date', + 'csv_column_date-transaction' => 'Date', + 'csv_column_description' => 'Description', + 'csv_column_opposing-iban' => 'Opposing account (IBAN)', + 'csv_column_opposing-id' => 'Opposing account ID (matching Firefly)', + 'csv_column_opposing-name' => 'Opposing account (name)', + 'csv_column_rabo-debet-credit' => 'Rabobank specific debet/credit indicator', + 'csv_column_sepa-ct-id' => 'SEPA Credit Transfer end-to-end ID', + 'csv_column_sepa-ct-op' => 'SEPA Credit Transfer opposing account', + 'csv_column_sepa-db' => 'SEPA Direct Debet', + 'csv_column_tags-comma' => 'Tags (comma separated)', + 'csv_column_tags-space' => 'Tags (space separated)', + 'csv_specifix_RabobankDescription' => 'Select this when you\'re importing Rabobank CSV export files.', + 'csv_specifix_Dummy' => 'Checking this has no effect whatsoever.', + 'csv_import_account_help' => 'If your CSV file does NOT contain information about your asset account(s), use this dropdown to select to which account the transactions in the CSV belong to.', + 'csv_date_parse_error' => 'Could not parse a valid date from ":value", using the format ":format". Are you sure your CSV is correct?', + + + // create new stuff + 'create_new_withdrawal' => 'Creer un nouveau retrait', + 'create_new_deposit' => 'Create new deposit', + 'create_new_transfer' => 'Creer un nouveau transfert', + 'create_new_asset' => 'Create new asset account', + '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', + + + // currencies + 'create_currency' => 'Create a new currency', + 'edit_currency' => 'Edit currency ":name"', + 'store_currency' => 'Store new currency', + 'update_currency' => 'Update currency', + + // new user + 'submit' => 'Submit', + 'getting_started' => 'Getting started', + 'to_get_started' => 'To get started with Firefly, please enter your current bank\'s name, and the balance of your checking account:', + 'savings_balance_text' => 'If you have a savings account, please enter the current balance of your savings account:', + 'cc_balance_text' => 'If you have a credit card, please enter your credit card\'s limit.', + + // forms + 'mandatoryFields' => 'Mandatory fields', + 'optionalFields' => 'Optional fields', + 'options' => 'Options', + 'something' => 'Something!', + + // budgets + 'create_new_budget' => 'Create a new budget', + 'store_new_budget' => ' Store new budget', + 'availableIn' => 'Available in :date', + 'transactionsWithoutBudget' => 'Expenses without budget', + 'transactionsWithoutBudgetDate' => 'Expenses without budget in :date', + 'createBudget' => 'New budget', + 'inactiveBudgets' => 'Inactive budgets', + 'without_budget_between' => 'Transactions without a budget between :start and :end', + 'budget_in_month' => ':name in :month', + 'delete_budget' => 'Delete budget ":name"', + 'edit_budget' => 'Edit budget ":name"', + 'update_amount' => 'Update amount', + 'update_budget' => 'Update budget', + + // bills + 'delete_bill' => 'Delete bill ":name"', + 'edit_bill' => 'Edit bill ":name"', + 'update_bill' => 'Update bill', + 'store_new_bill' => 'Store new bill', + + // accounts + '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"', + + 'asset_deleted' => 'Successfully deleted asset account ":name"', + 'expense_deleted' => 'Successfully deleted expense account ":name"', + 'revenue_deleted' => 'Successfully deleted revenue account ":name"', + + 'update_asset_account' => 'Update asset account', + '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', + + 'asset_accounts' => 'Asset accounts', + 'expense_accounts' => 'Expense accounts', + 'revenue_accounts' => 'Revenue accounts', + + 'accountExtraHelp_asset' => '', + 'accountExtraHelp_expense' => '', + 'accountExtraHelp_revenue' => '', + 'account_type' => 'Account type', + 'save_transactions_by_moving' => 'Save these transaction(s) by moving them to another account:', + + // categories + 'new_category' => 'New category', + 'create_new_category' => 'Create a new category', + 'without_category' => 'Without a category', + 'update_category' => 'Wijzig categorie', + 'categories' => 'Categories', + 'edit_category' => 'Edit category ":name"', + 'no_category' => '(no category)', + 'category' => 'Category', + 'delete_category' => 'Delete category ":name"', + 'store_category' => 'Store new category', + + // transactions + 'update_withdrawal' => 'Update withdrawal', + 'update_deposit' => 'Update deposit', + 'update_transfer' => 'Update transfer', + 'delete_withdrawal' => 'Delete withdrawal ":description"', + 'delete_deposit' => 'Delete deposit ":description"', + 'delete_transfer' => 'Delete transfer ":description"', + + // new user + 'welcome' => 'Welcome to Firefly!', + 'createNewAsset' => 'Create a new asset account to get started. This will allow you to create transactions and start your financial management', + 'createNewAssetButton' => 'Create new asset account', + + // home page + 'yourAccounts' => 'Your accounts', + 'budgetsAndSpending' => 'Budgets and spending', + 'savings' => 'Savings', + 'markAsSavingsToContinue' => 'Mark your asset accounts as "Savings account" to fill this panel', + 'createPiggyToContinue' => 'Create piggy banks to fill this panel.', + 'newWithdrawal' => 'New expense', + 'newDeposit' => 'New deposit', + 'newTransfer' => 'New transfer', + 'moneyIn' => 'Money in', + 'moneyOut' => 'Money out', + 'billsToPay' => 'Bills to pay', + 'billsPaid' => 'Bills paid', + 'viewDetails' => 'View details', + 'divided' => 'divided', + 'toDivide' => 'left to divide', + + // menu and titles, should be recycled as often as possible + 'toggleNavigation' => 'Toggle navigation', + 'currency' => 'Currency', + 'preferences' => 'Preferences', + 'logout' => 'Logout', + 'searchPlaceholder' => 'Search...', + 'dashboard' => 'Dashboard', + 'currencies' => 'Currencies', + 'accounts' => 'Accounts', + 'Asset account' => 'Asset account', + 'Default account' => 'Asset account', + 'Expense account' => 'Expense account', + 'Revenue account' => 'Revenue account', + 'Initial balance account' => 'Initial balance account', + 'budgets' => 'Budgets', + 'tags' => 'Tags', + 'reports' => 'Reports', + 'transactions' => 'Transactions', + 'expenses' => 'Expenses', + 'income' => 'Revenue / income', + 'transfers' => 'Transferts', + 'moneyManagement' => 'Money management', + 'piggyBanks' => 'Piggy banks', + 'bills' => 'Bills', + 'createNew' => 'Create new', + 'withdrawal' => 'Withdrawal', + 'deposit' => 'Deposit', + 'account' => 'Account', + 'transfer' => 'Transfer', + 'Withdrawal' => 'Withdrawal', + 'Deposit' => 'Deposit', + 'Transfer' => 'Transfer', + 'bill' => 'Bill', + 'yes' => 'Yes', + 'no' => 'No', + 'amount' => 'Amount', + 'newBalance' => 'New balance', + 'overview' => 'Overview', + 'saveOnAccount' => 'Save on account', + 'unknown' => 'Unknown', + 'daily' => 'Daily', + 'weekly' => 'Weekly', + 'monthly' => 'Monthly', + 'quarterly' => 'Quarterly', + 'half-year' => 'Every six months', + 'yearly' => 'Yearly', + 'profile' => 'Profile', + + // reports + 'report_default' => 'Default financial report for :start until :end', + 'quick_link_reports' => 'Quick links', + 'quick_link_default_report' => 'Default financial report', + 'report_this_month_quick' => 'Current month, all accounts', + 'report_this_year_quick' => 'Current 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', + 'balanceStartOfYear' => 'Balance at start of year', + 'balanceEndOfYear' => 'Balance at end of year', + 'balanceStartOfMonth' => 'Balance at start of month', + 'balanceEndOfMonth' => 'Balance at end of month', + 'balanceStart' => 'Balance at start of period', + 'balanceEnd' => 'Balance at end of period', + 'reportsOwnAccounts' => 'Reports for your own accounts', + 'reportsOwnAccountsAndShared' => 'Reports for your own accounts and shared accounts', + 'splitByAccount' => 'Split by account', + 'balancedByTransfersAndTags' => 'Balanced by transfers and tags', + 'coveredWithTags' => 'Covered with tags', + 'leftUnbalanced' => 'Left unbalanced', + 'expectedBalance' => 'Expected balance', + 'outsideOfBudgets' => 'Outside of budgets', + 'leftInBudget' => 'Left in budget', + 'sumOfSums' => 'Sum of sums', + 'noCategory' => '(no category)', + 'notCharged' => 'Not charged (yet)', + 'inactive' => 'Inactive', + 'difference' => 'Difference', + 'in' => 'In', + 'out' => 'Out', + 'topX' => 'top :number', + 'showTheRest' => 'Show everything', + 'hideTheRest' => 'Show only the top :number', + 'sum_of_year' => 'Sum of year', + 'sum_of_years' => 'Sum of years', + 'average_of_year' => 'Average of year', + 'average_of_years' => 'Average of years', + 'categories_earned_in_year' => 'Categories (by earnings)', + 'categories_spent_in_year' => 'Categories (by spendings)', + 'report_type' => 'Report type', + 'report_type_default' => 'Default financial report', + 'report_included_accounts' => 'Included accounts', + 'report_date_range' => 'Date range', + 'report_include_help' => 'In all cases, transfers to shared accounts count as expenses, and transfers from shared accounts count as income.', + 'report_preset_ranges' => 'Pre-set ranges', + 'shared' => 'Shared', + + // charts + 'dayOfMonth' => 'Day of the month', + 'month' => 'Month', + 'budget' => 'Budget', + 'spent' => 'Spent', + 'earned' => 'Earned', + 'overspent' => 'Overspent', + 'left' => 'Left', + 'noBudget' => '(no budget)', + 'maxAmount' => 'Maximum amount', + 'minAmount' => 'Minumum amount', + 'billEntry' => 'Current bill entry', + 'name' => 'Name', + 'date' => 'Date', + 'paid' => 'Paid', + 'unpaid' => 'Unpaid', + 'day' => 'Day', + 'budgeted' => 'Budgeted', + 'period' => 'Period', + 'balance' => 'Balance', + 'summary' => 'Summary', + 'sum' => 'Sum', + 'average' => 'Average', + 'balanceFor' => 'Balance for :name', + + // piggy banks + 'piggy_bank' => 'Piggy bank', + 'new_piggy_bank' => 'Create new piggy bank', + 'store_piggy_bank' => 'Store new piggy bank', + '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', + 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', + 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', + 'add' => 'Add', + '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"', + 'details' => 'Details', + 'events' => 'Events', + 'target_amount' => 'Target amount', + 'start_date' => 'Start date', + 'target_date' => 'Target date', + 'no_target_date' => 'No target date', + 'todo' => 'to do', + 'table' => 'Table', + 'piggy_bank_not_exists' => 'Piggy bank no longer exists.', + 'add_any_amount_to_piggy' => 'Add money to this piggy bank to reach your target of :amount.', + 'add_set_amount_to_piggy' => 'Add :amount to fill this piggy bank on :date', + 'delete_piggy_bank' => 'Delete piggy bank ":name"', + + // tags + 'regular_tag' => 'Just a regular tag.', + 'balancing_act' => 'The tag takes at most two transactions; an expense and a transfer. They\'ll balance each other out.', + 'advance_payment' => 'The tag accepts one expense and any number of deposits aimed to repay the original expense.', + + 'delete_tag' => 'Supprimer le tag ":tag"', + 'new_tag' => 'Make new tag', + 'edit_tag' => 'Editer le tag ":tag"', + 'no_year' => 'No year set', + 'no_month' => 'No month set', + 'tag_title_nothing' => 'Default tags', + 'tag_title_balancingAct' => 'Balancing act tags', + 'tag_title_advancePayment' => 'Advance payment tags', + 'tags_introduction' => 'Usually tags are singular words, designed to quickly band items together using things like expensive, bill or for-party. In Firefly III, tags can have more properties such as a date, description and location. This allows you to join transactions together in a more meaningful way. For example, you could make a tag called Christmas dinner with friends and add information about the restaurant. Such tags are "singular", you would only use them for a single occasion, perhaps with multiple transactions.', + 'tags_group' => 'Tags group transactions together, which makes it possible to store reimbursements (in case you front money for others) and other "balancing acts" where expenses are summed up (the payments on your new TV) or where expenses and deposits are cancelling each other out (buying something with saved money). It\'s all up to you. Using tags the old-fashioned way is of course always possible. ', + 'tags_start' => 'Create a tag to get started or enter tags when creating new transactions.', + +]; diff --git a/resources/lang/fr_FR/form.php b/resources/lang/fr_FR/form.php new file mode 100644 index 0000000000..19b1512659 --- /dev/null +++ b/resources/lang/fr_FR/form.php @@ -0,0 +1,96 @@ + 'Bank name', + 'bank_balance' => 'Balance', + 'savings_balance' => 'Savings balance', + 'credit_card_limit' => 'Credit card limit', + 'automatch' => 'Match automatically', + 'skip' => 'Skip', + 'name' => 'Name', + 'active' => 'Active', + 'amount_min' => 'Minimum amount', + 'amount_max' => 'Maximum amount', + 'match' => 'Matches on', + 'repeat_freq' => 'Repeats', + 'account_from_id' => 'From account', + 'account_to_id' => 'To account', + 'account_id' => 'Asset account', + 'budget_id' => 'Budget', + 'openingBalance' => 'Opening balance', + 'tagMode' => 'Tag mode', + 'tagPosition' => 'Tag location', + 'virtualBalance' => 'Virtual balance', + 'longitude_latitude' => 'Location', + 'targetamount' => 'Target amount', + 'accountRole' => 'Account role', + 'openingBalanceDate' => 'Opening balance date', + 'ccType' => 'Credit card payment plan', + 'ccMonthlyPaymentDate' => 'Credit card monthly payment date', + 'piggy_bank_id' => 'Piggy bank', + 'returnHere' => 'Return here', + 'returnHereExplanation' => 'After storing, return here to create another one.', + 'returnHereUpdateExplanation' => 'After updating, return here.', + 'description' => 'Description', + 'expense_account' => 'Expense account', + 'revenue_account' => 'Revenue account', + 'amount' => 'Amount', + 'date' => 'Date', + 'category' => 'Category', + 'tags' => 'Tags', + 'deletePermanently' => 'Delete permanently', + 'cancel' => 'Cancel', + 'targetdate' => 'Target date', + 'tag' => 'Tag', + 'under' => 'Under', + 'symbol' => 'Symbol', + 'code' => 'Code', + 'iban' => 'IBAN', + 'csv' => 'CSV file', + 'has_headers' => 'Headers', + 'date_format' => 'Date format', + 'csv_config' => 'CSV import configuration', + 'specifix' => 'Bank- or file specific fixes', + 'csv_import_account' => 'Default import account', + 'attachments[]' => 'Attachments', + 'store_new_withdrawal' => 'Store new withdrawal', + 'store_new_deposit' => 'Store new deposit', + 'store_new_transfer' => 'Store new transfer', + 'add_new_withdrawal' => 'Add a new withdrawal', + 'add_new_deposit' => 'Add a new deposit', + 'add_new_transfer' => 'Add a new transfer', + 'noPiggybank' => '(no piggy bank)', + 'noBudget' => '(no budget)', + 'title' => 'Title', + 'notes' => 'Notes', + 'filename' => 'File name', + 'mime' => 'Mime type', + 'size' => 'Size', + + 'delete_account' => 'Delete account ":name"', + 'delete_bill' => 'Supprimer la facture ":name"', + 'delete_budget' => 'Delete budget ":name"', + 'delete_category' => 'Delete category ":name"', + 'delete_currency' => 'Delete currency ":name"', + 'delete_journal' => 'Delete transaction with description ":description"', + 'delete_attachment' => 'Delete attachment ":name"', + + 'attachment_areYouSure' => 'Are you sure you want to delete the attachment named ":name"?', + 'account_areYouSure' => 'Are you sure you want to delete the account named ":name"?', + 'bill_areYouSure' => 'Are you sure you want to delete the bill named ":name"?', + 'budget_areYouSure' => 'Are you sure you want to delete the budget named ":name"?', + 'category_areYouSure' => 'Are you sure you want to delete the category named ":name"?', + 'currency_areYouSure' => 'Are you sure you want to delete the currency named ":name"?', + 'piggyBank_areYouSure' => 'Are you sure you want to delete the piggy bank named ":name"?', + 'journal_areYouSure' => 'Are you sure you want to delete the transaction described ":description"?', + 'tag_areYouSure' => 'Are you sure you want to delete the tag ":tag"?', + + 'permDeleteWarning' => 'Deleting stuff from Firely is permanent and cannot be undone.', + 'also_delete_transactions' => 'The only transaction connected to this account will be deleted as well.|All :count transactions connected to this account will be deleted as well.', + 'also_delete_piggyBanks' => 'The only piggy bank connected to this account will be deleted as well.|All :count piggy bank connected to this account will be deleted as well.', + 'bill_keep_transactions' => 'The only transaction connected to this bill will not be deleted.|All :count transactions connected to this bill will spared deletion.', + 'budget_keep_transactions' => 'The only transaction connected to this budget will not be deleted.|All :count transactions connected to this budget will spared deletion.', + 'category_keep_transactions' => 'The only transaction connected to this category will not be deleted.|All :count transactions connected to this category will spared deletion.', + 'tag_keep_transactions' => 'The only transaction connected to this tag will not be deleted.|All :count transactions connected to this tag will spared deletion.', +]; diff --git a/resources/lang/fr_FR/help.php b/resources/lang/fr_FR/help.php new file mode 100644 index 0000000000..75acf0fbdd --- /dev/null +++ b/resources/lang/fr_FR/help.php @@ -0,0 +1,93 @@ + 'Welcome to Firefly III', + 'main-content-text' => 'Do yourself a favor and follow this short guide to make sure you know your way around.', + 'sidebar-toggle-title' => 'Sidebar to create stuff', + 'sidebar-toggle-text' => 'Hidden under the plus icon are all the buttons to create new stuff. Accounts, transactions, everything!', + 'account-menu-title' => 'All your accounts', + 'account-menu-text' => 'Here you can find all the accounts you\'ve made.', + 'budget-menu-title' => 'Budgets', + 'budget-menu-text' => 'Use this page to organise your finances and limit spending.', + 'report-menu-title' => 'Rapport', + 'report-menu-text' => 'Check this out when you want a solid overview of your fiances.', + 'transaction-menu-title' => 'Transactions', + 'transaction-menu-text' => 'All transactions you\'ve created can be found here.', + 'option-menu-title' => 'Options', + 'option-menu-text' => 'This is pretty self-explanatory.', + 'main-content-end-title' => 'The end!', + 'main-content-end-text' => 'Remember that every page has a small question mark at the right top. Click it to get help about the page you\'re on.', + + + 'register' => 'register', + 'index' => 'The main index', + 'home' => 'home', + 'flush' => 'flush', + 'accounts-index' => 'accounts.index', + 'accounts-create' => 'accounts.create', + 'accounts-edit' => 'accounts.edit', + 'accounts-delete' => 'accounts.delete', + 'accounts-show' => 'accounts.show', + 'bills-index' => 'bills.index', + 'bills-rescan' => 'bills.rescan', + 'bills-create' => 'bills.create', + 'bills-edit' => 'bills.edit', + 'bills-delete' => 'bills.delete', + 'bills-show' => 'bills.show', + 'budgets-index' => 'budgets.index', + 'budgets-income' => 'budgets.income', + 'budgets-create' => 'budgets.create', + 'budgets-edit' => 'budgets.edit', + 'budgets-delete' => 'budgets.delete', + 'budgets-show' => 'budgets.show', + 'budgets-noBudget' => 'budgets.noBudget', + 'categories-index' => 'categories.index', + 'categories-create' => 'categories.create', + 'categories-edit' => 'categories.edit', + 'categories-delete' => 'categories.delete', + 'categories-show' => 'categories.show', + 'categories-noCategory' => 'categories.noCategory', + 'csv-index' => 'Upload and import a CSV file', + 'currency-index' => 'currency.index', + 'currency-create' => 'currency.create', + 'currency-edit' => 'currency.edit', + 'currency-delete' => 'currency.delete', + 'currency-default' => 'currency.default', + 'help-show' => 'help.show', + 'json-expense-accounts' => 'json.expense-accounts', + 'json-revenue-accounts' => 'json.revenue-accounts', + 'json-categories' => 'json.categories', + 'json-tags' => 'json.tags', + 'json-box-in' => 'json.box.in', + 'json-box-out' => 'json.box.out', + 'json-box-paid' => 'json.box.paid', + 'json-box-unpaid' => 'json.box.unpaid', + 'new-user-index' => 'new-user.index', + 'piggy-banks-index' => 'piggy-banks.index', + 'piggy-banks-addMoney' => 'piggy-banks.addMoney', + 'piggy-banks-removeMoney' => 'piggy-banks.removeMoney', + 'piggy-banks-create' => 'piggy-banks.create', + 'piggy-banks-edit' => 'piggy-banks.edit', + 'piggy-banks-delete' => 'piggy-banks.delete', + 'piggy-banks-show' => 'piggy-banks.show', + 'preferences' => 'preferences', + 'profile' => 'profile', + 'profile-change-password' => 'profile.change-password', + 'profile-delete-account' => 'profile.delete-account', + 'reports-index' => 'reports.index', + 'reports-year' => 'reports.year', + 'reports-month' => 'reports.month', + 'search' => 'search', + 'tags-index' => 'tags.index', + 'tags-create' => 'tags.create', + 'tags-show' => 'tags.show', + 'tags-edit' => 'tags.edit', + 'tags-delete' => 'tags.delete', + 'transactions-index' => 'transactions.index', + 'transactions-create' => 'transactions.create', + 'transactions-edit' => 'transactions.edit', + 'transactions-delete' => 'transactions.delete', + 'transactions-show' => 'transactions.show', + 'logout' => 'logout', +]; diff --git a/resources/lang/fr_FR/list.php b/resources/lang/fr_FR/list.php new file mode 100644 index 0000000000..d2c541c490 --- /dev/null +++ b/resources/lang/fr_FR/list.php @@ -0,0 +1,33 @@ + 'Name', + 'role' => 'Role', + 'currentBalance' => 'Current balance', + 'active' => 'Is active?', + 'lastActivity' => 'Last activity', + 'balanceDiff' => 'Balance difference between :start and :end', + 'matchedOn' => 'Matched on', + 'matchesOn' => 'Matched on', + 'matchingAmount' => 'Amount', + 'lastMatch' => 'Last match', + 'expectedMatch' => 'Expected match', + 'automatch' => 'Automatch?', + 'repeat_freq' => 'Repeats', + 'description' => 'Description', + 'amount' => 'Amount', + 'date' => 'Date', + 'from' => 'From', + 'to' => 'To', + 'budget' => 'Budget', + 'category' => 'Category', + 'bill' => 'Bill', + 'withdrawal' => 'Withdrawal', + 'deposit' => 'Deposit', + 'transfer' => 'Transfer', + 'type' => 'Type', + 'completed' => 'Completed', + 'iban' => 'IBAN', +]; diff --git a/resources/lang/fr_FR/pagination.php b/resources/lang/fr_FR/pagination.php new file mode 100644 index 0000000000..fcab34b253 --- /dev/null +++ b/resources/lang/fr_FR/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/resources/lang/fr_FR/passwords.php b/resources/lang/fr_FR/passwords.php new file mode 100644 index 0000000000..926c2b197d --- /dev/null +++ b/resources/lang/fr_FR/passwords.php @@ -0,0 +1,21 @@ + "Passwords must be at least six characters and match the confirmation.", + "user" => "We can't find a user with that e-mail address.", + "token" => "This password reset token is invalid.", + "sent" => "We have e-mailed your password reset link!", + "reset" => "Your password has been reset!", + 'blocked' => 'Nice try though.' +]; diff --git a/resources/lang/fr_FR/validation.php b/resources/lang/fr_FR/validation.php new file mode 100644 index 0000000000..fb45bf34d8 --- /dev/null +++ b/resources/lang/fr_FR/validation.php @@ -0,0 +1,78 @@ + 'Due to security constraints, you cannot register from this domain.', + 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', + 'file_attached' => 'Succesfully uploaded file ":name".', + '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.', + 'accepted' => 'Le champ :attribute doit être accepté.', + "unique_for_user" => "There already is an entry with this :attribute.", + 'unique_object_for_user' => 'This name is already in use', + 'unique_account_for_user' => 'This account name is already in use', + 'active_url' => "Le champ :attribute n'est pas une URL valide.", + 'after' => 'Le champ :attribute doit être une date postérieure au :date.', + 'alpha' => 'Le champ :attribute doit seulement contenir des lettres.', + 'alpha_dash' => 'Le champ :attribute doit seulement contenir des lettres, des chiffres et des tirets.', + 'alpha_num' => 'Le champ :attribute doit seulement contenir des chiffres et des lettres.', + 'array' => 'Le champ :attribute doit être un tableau.', + 'before' => 'Le champ :attribute doit être une date antérieure au :date.', + '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.', + 'exists' => 'Le champ :attribute sélectionné est invalide.', + 'filled' => 'Le champ :attribute est obligatoire.', + '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.', + '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.', + '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.', + '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.', + 'string' => 'Le champ :attribute doit être une chaîne de caractères.', + 'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.', + 'unique' => 'La valeur du champ :attribute est déjà utilisée.', + 'url' => "Le format de l'URL de :attribute n'est pas valide.", +]; From 18c6edbb5dc3c0fef2fcc46a2a26a09ba35f16a6 Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 23 Dec 2015 09:09:51 +0100 Subject: [PATCH 17/64] Update language files. --- resources/lang/en_US/breadcrumbs.php | 4 +- resources/lang/en_US/firefly.php | 60 ++++---------- resources/lang/en_US/form.php | 18 ++-- resources/lang/en_US/list.php | 2 +- resources/lang/nl_NL/validation.php | 120 +++++++++++++-------------- 5 files changed, 87 insertions(+), 117 deletions(-) diff --git a/resources/lang/en_US/breadcrumbs.php b/resources/lang/en_US/breadcrumbs.php index 95f8e0ddce..3ba7372b38 100644 --- a/resources/lang/en_US/breadcrumbs.php +++ b/resources/lang/en_US/breadcrumbs.php @@ -27,8 +27,8 @@ return [ // reports 'reports' => 'Reports', - 'monthly_report' => 'Montly report for :date', - 'monthly_report_shared' => 'Montly report for :date (including shared accounts)', + 'monthly_report' => 'Monthly report for :date', + 'monthly_report_shared' => 'Monthly report for :date (including shared accounts)', 'yearly_report' => 'Yearly report for :date', 'yearly_report_shared' => 'Yearly report for :date (including shared accounts)', 'budget_report' => 'Budget report for :date', diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index b1bfbacd49..d30ca83aa6 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -67,8 +67,7 @@ return [ '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_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.', @@ -109,23 +108,15 @@ return [ 'csv_define_column_roles' => 'Define column roles', 'csv_map_values' => 'Map found values to existing values', 'csv_download_config' => 'Download CSV configuration file.', - 'csv_index_text' => 'This form allows you to import a CSV file with transactions into Firefly. It is based on the excellent CSV' . - ' importer made by the folks at Atlassian. Simply upload your CSV' . - ' file and follow the instructions. If you would like to learn more, please click on the button at the top of this page.', + 'csv_index_text' => 'This form allows you to import a CSV file with transactions into Firefly. It is based on the excellent CSV importer made by the folks at Atlassian. Simply upload your CSV file and follow the instructions. If you would like to learn more, please click on the button at the top of this page.', 'csv_index_beta_warning' => 'This tool is very much in beta. Please proceed with caution', 'csv_header_help' => 'Check this box when your CSV file\'s first row consists of column names, not actual data', - 'csv_date_help' => 'Date time format in your CSV. Follow the format like this page ' . - 'indicates. The default value will parse dates that look like this: ' . date('Ymd'), + 'csv_date_help' => 'Date time format in your CSV. Follow the format like this page indicates. The default value will parse dates that look like this: ' . date('Ymd'), 'csv_csv_file_help' => 'Select the CSV file here. You can only upload one file at a time', 'csv_csv_config_file_help' => 'Select your CSV import configuration here. If you do not know what this is, ignore it. It will be explained later.', 'csv_upload_button' => 'Start importing CSV', 'csv_column_roles_title' => 'Define column roles', - 'csv_column_roles_text' => 'Firefly does not know what each column means. You need to indicate what every column is. ' . - 'Please check out the example data if you\'re not sure yourself. Click on the question mark ' . - '(top right of the page) to learn what each column means. If you want to map imported data ' . - 'onto existing data in Firefly, use the checkbox. The next step will show you what this button does.', + 'csv_column_roles_text' => 'Firefly does not know what each column means. You need to indicate what every column is. Please check out the example data if you\'re not sure yourself. Click on the question mark (top right of the page) to learn what each column means. If you want to map imported data onto existing data in Firefly, use the checkbox. The next step will show you what this button does.', 'csv_column_roles_table' => 'Column roles', 'csv_column' => 'CSV column', 'csv_column_name' => 'CSV column name', @@ -135,15 +126,13 @@ return [ 'csv_continue' => 'Continue to the next step', 'csv_go_back' => 'Go back to the previous step', 'csv_map_title' => 'Map found values to existing values', - 'csv_map_text' => 'This page allows you to map the values from the CSV file to existing entries in your ' . - 'database. This ensures that accounts and other things won\'t be created twice.', + 'csv_map_text' => 'This page allows you to map the values from the CSV file to existing entries in your database. This ensures that accounts and other things won\'t be created twice.', 'csv_field_value' => 'Field value from CSV', 'csv_field_mapped_to' => 'Must be mapped to...', 'csv_do_not_map' => 'Do not map this value', 'csv_download_config_title' => 'Download CSV configuration', 'csv_download_config_text' => 'Everything you\'ve just set up can be downloaded as a configuration file. Click the button to do so.', - 'csv_more_information_text' => 'If the import fails, you can use this configuration file so you don\'t have to start all ' . - 'over again. But, if the import succeeds, it will be easier to upload similar CSV files.', + 'csv_more_information_text' => 'If the import fails, you can use this configuration file so you don\'t have to start all over again. But, if the import succeeds, it will be easier to upload similar CSV files.', 'csv_do_download_config' => 'Download configuration file.', 'csv_empty_description' => '(empty description)', 'csv_upload_form' => 'CSV upload form', @@ -189,11 +178,9 @@ return [ 'csv_column_tags-space' => 'Tags (space separated)', 'csv_specifix_RabobankDescription' => 'Select this when you\'re importing Rabobank CSV export files.', 'csv_specifix_Dummy' => 'Checking this has no effect whatsoever.', - 'csv_import_account_help' => 'If your CSV file does NOT contain information about your asset account(s), use this dropdown to select to which' - . ' account the transactions in the CSV belong to.', + 'csv_import_account_help' => 'If your CSV file does NOT contain information about your asset account(s), use this dropdown to select to which account the transactions in the CSV belong to.', 'csv_date_parse_error' => 'Could not parse a valid date from ":value", using the format ":format". Are you sure your CSV is correct?', - // create new stuff: 'create_new_withdrawal' => 'Create new withdrawal', 'create_new_deposit' => 'Create new deposit', @@ -204,7 +191,6 @@ return [ 'create_new_piggy_bank' => 'Create new piggy bank', 'create_new_bill' => 'Create new bill', - // currencies: 'create_currency' => 'Create a new currency', 'edit_currency' => 'Edit currency ":name"', @@ -476,26 +462,16 @@ return [ 'regular_tag' => 'Just a regular tag.', 'balancing_act' => 'The tag takes at most two transactions; an expense and a transfer. They\'ll balance each other out.', 'advance_payment' => 'The tag accepts one expense and any number of deposits aimed to repay the original expense.', - - 'delete_tag' => 'Delete tag ":tag"', - 'new_tag' => 'Make new tag', - 'edit_tag' => 'Edit tag ":tag"', - 'no_year' => 'No year set', - 'no_month' => 'No month set', - 'tag_title_nothing' => 'Default tags', - 'tag_title_balancingAct' => 'Balancing act tags', - 'tag_title_advancePayment' => 'Advance payment tags', - 'tags_introduction' => 'Usually tags are singular words, designed to quickly band items together using things like' . - ' expensive, bill' . - ' or for-party. In Firefly III, tags can have more properties' . - ' such as a date, description and location. This allows you to join transactions together in a more' . - ' meaningful way. For example, you could make a tag called ' . - 'Christmas dinner with friends and add information about the restaurant. Such tags are "singular",' . - ' you would only use them for a single occasion, perhaps with multiple transactions.', - 'tags_group' => 'Tags group transactions together, which makes it possible to store reimbursements (in case you front money' . - ' for others) and other "balancing acts" where expenses are summed up (the payments on your new TV) or where ' . - 'expenses and deposits are cancelling each other out (buying something with saved money). It\'s all up to you.' . - ' Using tags the old-fashioned way is of course always possible. ', - 'tags_start' => 'Create a tag to get started or enter tags when creating new transactions.', + 'delete_tag' => 'Delete tag ":tag"', + 'new_tag' => 'Make new tag', + 'edit_tag' => 'Edit tag ":tag"', + 'no_year' => 'No year set', + 'no_month' => 'No month set', + 'tag_title_nothing' => 'Default tags', + 'tag_title_balancingAct' => 'Balancing act tags', + 'tag_title_advancePayment' => 'Advance payment tags', + 'tags_introduction' => 'Usually tags are singular words, designed to quickly band items together using things like expensive, bill or for-party. In Firefly III, tags can have more properties such as a date, description and location. This allows you to join transactions together in a more meaningful way. For example, you could make a tag called Christmas dinner with friends and add information about the restaurant. Such tags are "singular", you would only use them for a single occasion, perhaps with multiple transactions.', + 'tags_group' => 'Tags group transactions together, which makes it possible to store reimbursements (in case you front money for others) and other "balancing acts" where expenses are summed up (the payments on your new TV) or where expenses and deposits are cancelling each other out (buying something with saved money). It\'s all up to you. Using tags the old-fashioned way is of course always possible. ', + 'tags_start' => 'Create a tag to get started or enter tags when creating new transactions.', ]; diff --git a/resources/lang/en_US/form.php b/resources/lang/en_US/form.php index 2df3667c3c..b76eac684f 100644 --- a/resources/lang/en_US/form.php +++ b/resources/lang/en_US/form.php @@ -88,16 +88,10 @@ return [ 'tag_areYouSure' => 'Are you sure you want to delete the tag ":tag"?', 'permDeleteWarning' => 'Deleting stuff from Firely is permanent and cannot be undone.', - 'also_delete_transactions' => 'The only transaction connected to this account will be deleted as well.' . - '|All :count transactions connected to this account will be deleted as well.', - 'also_delete_piggyBanks' => 'The only piggy bank connected to this account will be deleted as well.' . - '|All :count piggy bank connected to this account will be deleted as well.', - 'bill_keep_transactions' => 'The only transaction connected to this bill will not be deleted.' . - '|All :count transactions connected to this bill will spared deletion.', - 'budget_keep_transactions' => 'The only transaction connected to this budget will not be deleted.' . - '|All :count transactions connected to this budget will spared deletion.', - 'category_keep_transactions' => 'The only transaction connected to this category will not be deleted.' . - '|All :count transactions connected to this category will spared deletion.', - 'tag_keep_transactions' => 'The only transaction connected to this tag will not be deleted.' . - '|All :count transactions connected to this tag will spared deletion.', + 'also_delete_transactions' => 'The only transaction connected to this account will be deleted as well.|All :count transactions connected to this account will be deleted as well.', + 'also_delete_piggyBanks' => 'The only piggy bank connected to this account will be deleted as well.|All :count piggy bank connected to this account will be deleted as well.', + 'bill_keep_transactions' => 'The only transaction connected to this bill will not be deleted.|All :count transactions connected to this bill will spared deletion.', + 'budget_keep_transactions' => 'The only transaction connected to this budget will not be deleted.|All :count transactions connected to this budget will spared deletion.', + 'category_keep_transactions' => 'The only transaction connected to this category will not be deleted.|All :count transactions connected to this category will spared deletion.', + 'tag_keep_transactions' => 'The only transaction connected to this tag will not be deleted.|All :count transactions connected to this tag will spared deletion.', ]; diff --git a/resources/lang/en_US/list.php b/resources/lang/en_US/list.php index d2c541c490..4bc0b61bc9 100644 --- a/resources/lang/en_US/list.php +++ b/resources/lang/en_US/list.php @@ -14,7 +14,7 @@ return [ 'matchingAmount' => 'Amount', 'lastMatch' => 'Last match', 'expectedMatch' => 'Expected match', - 'automatch' => 'Automatch?', + 'automatch' => 'Auto match?', 'repeat_freq' => 'Repeats', 'description' => 'Description', 'amount' => 'Amount', diff --git a/resources/lang/nl_NL/validation.php b/resources/lang/nl_NL/validation.php index b30ad61e17..c80a9a8d1e 100644 --- a/resources/lang/nl_NL/validation.php +++ b/resources/lang/nl_NL/validation.php @@ -13,68 +13,68 @@ return [ | */ - 'invalid_domain' => 'Kan niet registereren vanaf dit domein.', - 'file_already_attached' => 'Het geuploade bestand ":name" is al gelinkt aan deze transactie.', - 'file_attached' => 'Bestand met naam ":name" is met succes geuploaded.', - 'file_invalid_mime' => 'Bestand ":name" is van het type ":mime", en die kan je niet uploaden.', - 'file_too_large' => 'Bestand ":name" is te groot.', - "accepted" => "The :attribute must be accepted.", - "active_url" => "The :attribute is not a valid URL.", - "after" => "The :attribute must be a date after :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.", + 'invalid_domain' => 'Kan niet registereren vanaf dit domein.', + 'file_already_attached' => 'Het geuploade bestand ":name" is al gelinkt aan deze transactie.', + 'file_attached' => 'Bestand met naam ":name" is met succes geuploaded.', + 'file_invalid_mime' => 'Bestand ":name" is van het type ":mime", en die kan je niet uploaden.', + 'file_too_large' => 'Bestand ":name" is te groot.', + + 'accepted' => ':attribute moet geaccepteerd zijn.', + 'active_url' => ':attribute is geen geldige URL.', + 'after' => ':attribute moet een datum na :date 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.', + 'before' => ':attribute moet een datum voor :date zijn.', 'unique_object_for_user' => 'Deze naam is al in gebruik', 'unique_account_for_user' => 'This rekeningnaam is already in use', - "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.", + '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.', + 'exists' => ':attribute bestaat niet.', + 'filled' => ':attribute is verplicht.', + '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' => '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.", - "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.", - "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.", - "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.", - "url" => "The :attribute format is invalid.", - 'string' => 'The :attribute must be a string.', - "timezone" => "The :attribute must be a valid zone.", + '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.', + '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.', + '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.', + 'size.file' => ':attribute moet :size kilobyte zijn.', + 'size.string' => ':attribute moet :size karakters zijn.', + 'size.array' => ':attribute moet :size items bevatten.', + 'string' => 'Het :attribute moet een tekenreeks zijn.', + 'timezone' => 'Het :attribute moet een geldige zone zijn.', + 'unique' => ':attribute is al in gebruik.', + 'url' => ':attribute is geen geldige URL.', ]; From 8967d86da654bdb8d11ce63225ec19b936231ebb Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 23 Dec 2015 09:34:23 +0100 Subject: [PATCH 18/64] Updated language files. --- resources/lang/en_US/firefly.php | 4 +- resources/lang/fr_FR/breadcrumbs.php | 60 ++++ resources/lang/fr_FR/firefly.php | 477 +++++++++++++++++++++++++ resources/lang/fr_FR/form.php | 97 +++++ resources/lang/fr_FR/help.php | 93 +++++ resources/lang/fr_FR/list.php | 33 ++ resources/lang/fr_FR/pagination.php | 19 + resources/lang/fr_FR/passwords.php | 22 ++ resources/lang/fr_FR/validation.php | 67 ++++ resources/lang/nl_NL/firefly.php | 515 +++++++++++++-------------- resources/lang/nl_NL/form.php | 47 ++- resources/lang/nl_NL/help.php | 3 +- resources/lang/nl_NL/validation.php | 133 ++++--- resources/lang/pt_BR/firefly.php | 490 +++++++++++++------------ resources/lang/pt_BR/form.php | 3 +- resources/lang/pt_BR/list.php | 2 +- resources/lang/pt_BR/validation.php | 109 +++--- 17 files changed, 1487 insertions(+), 687 deletions(-) create mode 100644 resources/lang/fr_FR/breadcrumbs.php create mode 100644 resources/lang/fr_FR/firefly.php create mode 100644 resources/lang/fr_FR/form.php create mode 100644 resources/lang/fr_FR/help.php create mode 100644 resources/lang/fr_FR/list.php create mode 100644 resources/lang/fr_FR/pagination.php create mode 100644 resources/lang/fr_FR/passwords.php create mode 100644 resources/lang/fr_FR/validation.php diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index d30ca83aa6..493522627f 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -111,7 +111,7 @@ return [ 'csv_index_text' => 'This form allows you to import a CSV file with transactions into Firefly. It is based on the excellent CSV importer made by the folks at Atlassian. Simply upload your CSV file and follow the instructions. If you would like to learn more, please click on the button at the top of this page.', 'csv_index_beta_warning' => 'This tool is very much in beta. Please proceed with caution', 'csv_header_help' => 'Check this box when your CSV file\'s first row consists of column names, not actual data', - 'csv_date_help' => 'Date time format in your CSV. Follow the format like this page indicates. The default value will parse dates that look like this: ' . date('Ymd'), + 'csv_date_help' => 'Date time format in your CSV. Follow the format like this page indicates. The default value will parse dates that look like this: :dateExample.', 'csv_csv_file_help' => 'Select the CSV file here. You can only upload one file at a time', 'csv_csv_config_file_help' => 'Select your CSV import configuration here. If you do not know what this is, ignore it. It will be explained later.', 'csv_upload_button' => 'Start importing CSV', @@ -471,7 +471,7 @@ return [ 'tag_title_balancingAct' => 'Balancing act tags', 'tag_title_advancePayment' => 'Advance payment tags', 'tags_introduction' => 'Usually tags are singular words, designed to quickly band items together using things like expensive, bill or for-party. In Firefly III, tags can have more properties such as a date, description and location. This allows you to join transactions together in a more meaningful way. For example, you could make a tag called Christmas dinner with friends and add information about the restaurant. Such tags are "singular", you would only use them for a single occasion, perhaps with multiple transactions.', - 'tags_group' => 'Tags group transactions together, which makes it possible to store reimbursements (in case you front money for others) and other "balancing acts" where expenses are summed up (the payments on your new TV) or where expenses and deposits are cancelling each other out (buying something with saved money). It\'s all up to you. Using tags the old-fashioned way is of course always possible. ', + 'tags_group' => 'Tags group transactions together, which makes it possible to store reimbursements (in case you front money for others) and other "balancing acts" where expenses are summed up (the payments on your new TV) or where expenses and deposits are cancelling each other out (buying something with saved money). It\'s all up to you. Using tags the old-fashioned way is of course always possible.', 'tags_start' => 'Create a tag to get started or enter tags when creating new transactions.', ]; diff --git a/resources/lang/fr_FR/breadcrumbs.php b/resources/lang/fr_FR/breadcrumbs.php new file mode 100644 index 0000000000..9de636cc33 --- /dev/null +++ b/resources/lang/fr_FR/breadcrumbs.php @@ -0,0 +1,60 @@ + 'Accueil', + + // accounts + 'cash_accounts' => 'Cash accounts', + 'edit_account' => 'Editer le compte : ":name"', + + // currencies + 'edit_currency' => 'Editer la devise : ";name"', + 'delete_currency' => 'Supprimer la devise ":name"', + + // piggy banks + 'newPiggyBank' => 'Create a new piggy bank', + 'edit_piggyBank' => 'Edit piggy bank ":name"', + + // top menu + 'preferences' => 'Preferences', + 'profile' => 'Profil', + 'changePassword' => 'Modifier le mot de passe', + + // bills + 'bills' => 'Factures', + 'newBill' => 'Nouvelle facture', + 'edit_bill' => 'Editer la facture : ":name"', + 'delete_bill' => 'Supprimer la facture ":name"', + + // reports + 'reports' => 'Rapport', + 'monthly_report' => 'Rapport mensuel pour :date', + 'monthly_report_shared' => 'Rapport mensuel pour :date (avec les comptes joints)', + 'yearly_report' => 'Rapport annuel pour :date', + 'yearly_report_shared' => 'Rapport annuel pour :date (avec les comptes joints)', + 'budget_report' => 'Rapport budgetaire pour :date', + + // search + 'searchResult' => 'Resultat de recherche pour ":query"', + + // transaction lists. + 'withdrawal_list' => 'Dépenses', + 'deposit_list' => 'Revenue, Salaire et depots ', + 'transfer_list' => 'Transferts', + 'transfers_list' => 'Transferts', + + // create transactions + 'create_withdrawal' => 'Creer un nouveau retrait', + 'create_deposit' => 'Create new deposit', + 'create_transfer' => 'Creer un nouveau transfert', + + // edit transactions + 'edit_journal' => 'Editer la transaction ":description"', + 'delete_journal' => 'Supprimer la transaction ":description"', + + // tags + 'tags' => 'Tags', + 'createTag' => 'Créer un nouveau tag', + 'edit_tag' => 'Editer le tag ":tag"', + 'delete_tag' => 'Supprimer le tag ":tag"', + +]; diff --git a/resources/lang/fr_FR/firefly.php b/resources/lang/fr_FR/firefly.php new file mode 100644 index 0000000000..7acf06fbd8 --- /dev/null +++ b/resources/lang/fr_FR/firefly.php @@ -0,0 +1,477 @@ + 'Vous avez choisi Anglais', + 'close' => 'Fermer', + 'pleaseHold' => 'Veuillew patienter...', + 'actions' => 'Actions', + 'edit' => 'Editer', + 'delete' => 'Supprimer', + 'welcomeBack' => 'What\'s playing?', + 'everything' => 'Everything', + 'customRange' => 'Custom range', + 'apply' => 'Apply', + 'cancel' => 'Cancel', + 'from' => 'From', + 'to' => 'To', + 'total_sum' => 'Total sum', + 'period_sum' => 'Sum for period', + 'showEverything' => 'Show everything', + 'never' => 'Never', + 'search_results_for' => 'Search results for ":query"', + 'bounced_error' => 'The message sent to :email bounced, so no access for you.', + 'deleted_error' => 'These credentials do not match our records.', + 'general_blocked_error' => 'Your account has been disabled, so you cannot login.', + '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', + 'new_deposit' => 'New deposit', + 'new_transfer' => 'New transfer', + 'new_asset_account' => 'New asset account', + 'new_expense_account' => 'New expense account', + 'new_revenue_account' => 'New revenue account', + 'new_budget' => 'New budget', + 'new_bill' => 'New bill', + + // tags + 'store_new_tag' => 'Store new tag', + 'update_tag' => 'Update tag', + 'no_location_set' => 'No location set.', + 'meta_data' => 'Meta data', + 'location' => 'Location', + + // preferences + 'pref_home_screen_accounts' => 'Home screen accounts', + 'pref_home_screen_accounts_help' => 'Which accounts should be displayed on the home page?', + 'pref_budget_settings' => 'Budget settings', + 'pref_budget_settings_help' => 'What\'s the maximum amount of money a budget envelope may contain?', + 'pref_view_range' => 'View range', + 'pref_view_range_help' => 'Some charts are automatically 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_languages' => 'Languages', + 'pref_languages_help' => 'Firefly III supports several languages. Which one do you prefer?', + 'pref_save_settings' => 'Save settings', + + // profile: + '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!', + + + // 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"', + 'upload_max_file_size' => 'Maximum file size: :size', + + // tour: + 'prev' => 'Prev', + 'next' => 'Next', + 'end-tour' => 'End tour', + 'pause' => 'Pause', + + // transaction index + 'title_expenses' => 'Expenses', + 'title_withdrawal' => 'Expenses', + 'title_revenue' => 'Revenue / income', + 'title_deposit' => 'Revenue / income', + 'title_transfer' => 'Transferts', + 'title_transfers' => 'Transferts', + + // csv import: + 'csv_import' => 'Import CSV file', + 'csv' => 'CSV', + 'csv_index_title' => 'Upload and import a CSV file', + 'csv_define_column_roles' => 'Define column roles', + 'csv_map_values' => 'Map found values to existing values', + 'csv_download_config' => 'Download CSV configuration file.', + 'csv_index_text' => 'This form allows you to import a CSV file with transactions into Firefly. It is based on the excellent CSV importer made by the folks at Atlassian. Simply upload your CSV file and follow the instructions. If you would like to learn more, please click on the button at the top of this page.', + 'csv_index_beta_warning' => 'This tool is very much in beta. Please proceed with caution', + 'csv_header_help' => 'Check this box when your CSV file\'s first row consists of column names, not actual data', + 'csv_date_help' => 'Date time format in your CSV. Follow the format like this page indicates. The default value will parse dates that look like this: :dateExample.', + 'csv_csv_file_help' => 'Select the CSV file here. You can only upload one file at a time', + 'csv_csv_config_file_help' => 'Select your CSV import configuration here. If you do not know what this is, ignore it. It will be explained later.', + 'csv_upload_button' => 'Start importing CSV', + 'csv_column_roles_title' => 'Define column roles', + 'csv_column_roles_text' => 'Firefly does not know what each column means. You need to indicate what every column is. Please check out the example data if you\'re not sure yourself. Click on the question mark (top right of the page) to learn what each column means. If you want to map imported data onto existing data in Firefly, use the checkbox. The next step will show you what this button does.', + 'csv_column_roles_table' => 'Column roles', + 'csv_column' => 'CSV column', + 'csv_column_name' => 'CSV column name', + 'csv_column_example' => 'Column example data', + 'csv_column_role' => 'Column contains?', + 'csv_do_map_value' => 'Map value?', + 'csv_continue' => 'Continue to the next step', + 'csv_go_back' => 'Go back to the previous step', + 'csv_map_title' => 'Map found values to existing values', + 'csv_map_text' => 'This page allows you to map the values from the CSV file to existing entries in your database. This ensures that accounts and other things won\'t be created twice.', + 'csv_field_value' => 'Field value from CSV', + 'csv_field_mapped_to' => 'Must be mapped to...', + 'csv_do_not_map' => 'Do not map this value', + 'csv_download_config_title' => 'Download CSV configuration', + 'csv_download_config_text' => 'Everything you\'ve just set up can be downloaded as a configuration file. Click the button to do so.', + 'csv_more_information_text' => 'If the import fails, you can use this configuration file so you don\'t have to start all over again. But, if the import succeeds, it will be easier to upload similar CSV files.', + 'csv_do_download_config' => 'Download configuration file.', + 'csv_empty_description' => '(empty description)', + 'csv_upload_form' => 'CSV upload form', + 'csv_index_unsupported_warning' => 'The CSV importer is yet incapable of doing the following:', + 'csv_unsupported_map' => 'The importer cannot map the column ":columnRole" to existing values in the database.', + 'csv_unsupported_value' => 'The importer does not know how to handle values in columns marked as ":columnRole".', + 'csv_cannot_store_value' => 'The importer has not reserved space for columns marked ":columnRole" and will be incapable of processing them.', + 'csv_process_title' => 'CSV import finished!', + 'csv_process_text' => 'The CSV importer has finished and has processed :rows rows', + 'csv_row' => 'Row', + 'csv_import_with_errors' => 'There was one error.|There were :errors errors.', + 'csv_error_see_logs' => 'Check the log files to see details.', + 'csv_process_new_entries' => 'Firefly has created :imported new transaction(s).', + 'csv_start_over' => 'Import again', + 'csv_to_index' => 'Back home', + 'csv_upload_not_writeable' => 'Cannot write to the path mentioned here. Cannot upload', + 'csv_column__ignore' => '(ignore this column)', + 'csv_column_account-iban' => 'Asset account (IBAN)', + 'csv_column_account-id' => 'Asset account ID (matching Firefly)', + 'csv_column_account-name' => 'Asset account (name)', + 'csv_column_amount' => 'Amount', + 'csv_column_bill-id' => 'Bill ID (matching Firefly)', + 'csv_column_bill-name' => 'Bill name', + 'csv_column_budget-id' => 'Budget ID (matching Firefly)', + 'csv_column_budget-name' => 'Budget name', + 'csv_column_category-id' => 'Category ID (matching Firefly)', + 'csv_column_category-name' => 'Category name', + 'csv_column_currency-code' => 'Currency code (ISO 4217)', + 'csv_column_currency-id' => 'Currency ID (matching Firefly)', + 'csv_column_currency-name' => 'Currency name (matching Firefly)', + 'csv_column_currency-symbol' => 'Currency symbol (matching Firefly)', + 'csv_column_date-rent' => 'Rent calculation date', + 'csv_column_date-transaction' => 'Date', + 'csv_column_description' => 'Description', + 'csv_column_opposing-iban' => 'Opposing account (IBAN)', + 'csv_column_opposing-id' => 'Opposing account ID (matching Firefly)', + 'csv_column_opposing-name' => 'Opposing account (name)', + 'csv_column_rabo-debet-credit' => 'Rabobank specific debet/credit indicator', + 'csv_column_sepa-ct-id' => 'SEPA Credit Transfer end-to-end ID', + 'csv_column_sepa-ct-op' => 'SEPA Credit Transfer opposing account', + 'csv_column_sepa-db' => 'SEPA Direct Debet', + 'csv_column_tags-comma' => 'Tags (comma separated)', + 'csv_column_tags-space' => 'Tags (space separated)', + 'csv_specifix_RabobankDescription' => 'Select this when you\'re importing Rabobank CSV export files.', + 'csv_specifix_Dummy' => 'Checking this has no effect whatsoever.', + 'csv_import_account_help' => 'If your CSV file does NOT contain information about your asset account(s), use this dropdown to select to which account the transactions in the CSV belong to.', + 'csv_date_parse_error' => 'Could not parse a valid date from ":value", using the format ":format". Are you sure your CSV is correct?', + + // create new stuff: + 'create_new_withdrawal' => 'Creer un nouveau retrait', + 'create_new_deposit' => 'Create new deposit', + 'create_new_transfer' => 'Creer un nouveau transfert', + 'create_new_asset' => 'Create new asset account', + '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', + + // currencies: + 'create_currency' => 'Create a new currency', + 'edit_currency' => 'Edit currency ":name"', + 'store_currency' => 'Store new currency', + 'update_currency' => 'Update currency', + + // new user: + 'submit' => 'Submit', + 'getting_started' => 'Getting started', + 'to_get_started' => 'To get started with Firefly, please enter your current bank\'s name, and the balance of your checking account:', + 'savings_balance_text' => 'If you have a savings account, please enter the current balance of your savings account:', + 'cc_balance_text' => 'If you have a credit card, please enter your credit card\'s limit.', + + // forms: + 'mandatoryFields' => 'Mandatory fields', + 'optionalFields' => 'Optional fields', + 'options' => 'Options', + 'something' => 'Something!', + + // budgets: + 'create_new_budget' => 'Create a new budget', + 'store_new_budget' => ' Store new budget', + 'availableIn' => 'Available in :date', + 'transactionsWithoutBudget' => 'Expenses without budget', + 'transactionsWithoutBudgetDate' => 'Expenses without budget in :date', + 'createBudget' => 'New budget', + 'inactiveBudgets' => 'Inactive budgets', + 'without_budget_between' => 'Transactions without a budget between :start and :end', + 'budget_in_month' => ':name in :month', + 'delete_budget' => 'Delete budget ":name"', + 'edit_budget' => 'Edit budget ":name"', + 'update_amount' => 'Update amount', + 'update_budget' => 'Update budget', + + // bills: + 'delete_bill' => 'Delete bill ":name"', + 'edit_bill' => 'Edit bill ":name"', + 'update_bill' => 'Update bill', + 'store_new_bill' => 'Store new bill', + + // accounts: + '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"', + 'asset_deleted' => 'Successfully deleted asset account ":name"', + 'expense_deleted' => 'Successfully deleted expense account ":name"', + 'revenue_deleted' => 'Successfully deleted revenue account ":name"', + 'update_asset_account' => 'Update asset account', + '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', + 'asset_accounts' => 'Asset accounts', + 'expense_accounts' => 'Expense accounts', + 'revenue_accounts' => 'Revenue accounts', + 'accountExtraHelp_asset' => '', + 'accountExtraHelp_expense' => '', + 'accountExtraHelp_revenue' => '', + 'account_type' => 'Account type', + 'save_transactions_by_moving' => 'Save these transaction(s) by moving them to another account:', + + // categories: + 'new_category' => 'New category', + 'create_new_category' => 'Create a new category', + 'without_category' => 'Without a category', + 'update_category' => 'Wijzig categorie', + 'categories' => 'Categories', + 'edit_category' => 'Edit category ":name"', + 'no_category' => '(no category)', + 'category' => 'Category', + 'delete_category' => 'Delete category ":name"', + 'store_category' => 'Store new category', + + // transactions: + 'update_withdrawal' => 'Update withdrawal', + 'update_deposit' => 'Update deposit', + 'update_transfer' => 'Update transfer', + 'delete_withdrawal' => 'Delete withdrawal ":description"', + 'delete_deposit' => 'Delete deposit ":description"', + 'delete_transfer' => 'Delete transfer ":description"', + + // new user: + 'welcome' => 'Welcome to Firefly!', + 'createNewAsset' => 'Create a new asset account to get started. ' . + 'This will allow you to create transactions and start your financial management', + 'createNewAssetButton' => 'Create new asset account', + + // home page: + 'yourAccounts' => 'Your accounts', + 'budgetsAndSpending' => 'Budgets and spending', + 'savings' => 'Savings', + 'markAsSavingsToContinue' => 'Mark your asset accounts as "Savings account" to fill this panel', + 'createPiggyToContinue' => 'Create piggy banks to fill this panel.', + 'newWithdrawal' => 'New expense', + 'newDeposit' => 'New deposit', + 'newTransfer' => 'New transfer', + 'moneyIn' => 'Money in', + 'moneyOut' => 'Money out', + 'billsToPay' => 'Bills to pay', + 'billsPaid' => 'Bills paid', + 'viewDetails' => 'View details', + 'divided' => 'divided', + 'toDivide' => 'left to divide', + + // menu and titles, should be recycled as often as possible: + 'toggleNavigation' => 'Toggle navigation', + 'currency' => 'Currency', + 'preferences' => 'Preferences', + 'logout' => 'Logout', + 'searchPlaceholder' => 'Search...', + 'dashboard' => 'Dashboard', + 'currencies' => 'Currencies', + 'accounts' => 'Accounts', + 'Asset account' => 'Asset account', + 'Default account' => 'Asset account', + 'Expense account' => 'Expense account', + 'Revenue account' => 'Revenue account', + 'Initial balance account' => 'Initial balance account', + 'budgets' => 'Budgets', + 'tags' => 'Tags', + 'reports' => 'Reports', + 'transactions' => 'Transactions', + 'expenses' => 'Expenses', + 'income' => 'Revenue / income', + 'transfers' => 'Transferts', + 'moneyManagement' => 'Money management', + 'piggyBanks' => 'Piggy banks', + 'bills' => 'Bills', + 'createNew' => 'Create new', + 'withdrawal' => 'Withdrawal', + 'deposit' => 'Deposit', + 'account' => 'Account', + 'transfer' => 'Transfer', + 'Withdrawal' => 'Withdrawal', + 'Deposit' => 'Deposit', + 'Transfer' => 'Transfer', + 'bill' => 'Bill', + 'yes' => 'Yes', + 'no' => 'No', + 'amount' => 'Amount', + 'newBalance' => 'New balance', + 'overview' => 'Overview', + 'saveOnAccount' => 'Save on account', + 'unknown' => 'Unknown', + 'daily' => 'Daily', + 'weekly' => 'Weekly', + 'monthly' => 'Monthly', + 'quarterly' => 'Quarterly', + 'half-year' => 'Every six months', + 'yearly' => 'Yearly', + 'profile' => 'Profile', + + // reports: + 'report_default' => 'Default financial report for :start until :end', + 'quick_link_reports' => 'Quick links', + 'quick_link_default_report' => 'Default financial report', + 'report_this_month_quick' => 'Current month, all accounts', + 'report_this_year_quick' => 'Current 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', + 'balanceStartOfYear' => 'Balance at start of year', + 'balanceEndOfYear' => 'Balance at end of year', + 'balanceStartOfMonth' => 'Balance at start of month', + 'balanceEndOfMonth' => 'Balance at end of month', + 'balanceStart' => 'Balance at start of period', + 'balanceEnd' => 'Balance at end of period', + 'reportsOwnAccounts' => 'Reports for your own accounts', + 'reportsOwnAccountsAndShared' => 'Reports for your own accounts and shared accounts', + 'splitByAccount' => 'Split by account', + 'balancedByTransfersAndTags' => 'Balanced by transfers and tags', + 'coveredWithTags' => 'Covered with tags', + 'leftUnbalanced' => 'Left unbalanced', + 'expectedBalance' => 'Expected balance', + 'outsideOfBudgets' => 'Outside of budgets', + 'leftInBudget' => 'Left in budget', + 'sumOfSums' => 'Sum of sums', + 'noCategory' => '(no category)', + 'notCharged' => 'Not charged (yet)', + 'inactive' => 'Inactive', + 'difference' => 'Difference', + 'in' => 'In', + 'out' => 'Out', + 'topX' => 'top :number', + 'showTheRest' => 'Show everything', + 'hideTheRest' => 'Show only the top :number', + 'sum_of_year' => 'Sum of year', + 'sum_of_years' => 'Sum of years', + 'average_of_year' => 'Average of year', + 'average_of_years' => 'Average of years', + 'categories_earned_in_year' => 'Categories (by earnings)', + 'categories_spent_in_year' => 'Categories (by spendings)', + 'report_type' => 'Report type', + 'report_type_default' => 'Default financial report', + 'report_included_accounts' => 'Included accounts', + 'report_date_range' => 'Date range', + 'report_include_help' => 'In all cases, transfers to shared accounts count as expenses, and transfers from shared accounts count as income.', + 'report_preset_ranges' => 'Pre-set ranges', + 'shared' => 'Shared', + + // charts: + 'dayOfMonth' => 'Day of the month', + 'month' => 'Month', + 'budget' => 'Budget', + 'spent' => 'Spent', + 'earned' => 'Earned', + 'overspent' => 'Overspent', + 'left' => 'Left', + 'noBudget' => '(no budget)', + 'maxAmount' => 'Maximum amount', + 'minAmount' => 'Minumum amount', + 'billEntry' => 'Current bill entry', + 'name' => 'Name', + 'date' => 'Date', + 'paid' => 'Paid', + 'unpaid' => 'Unpaid', + 'day' => 'Day', + 'budgeted' => 'Budgeted', + 'period' => 'Period', + 'balance' => 'Balance', + 'summary' => 'Summary', + 'sum' => 'Sum', + 'average' => 'Average', + 'balanceFor' => 'Balance for :name', + + // piggy banks: + 'piggy_bank' => 'Piggy bank', + 'new_piggy_bank' => 'Create new piggy bank', + 'store_piggy_bank' => 'Store new piggy bank', + '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', + 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', + 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', + 'add' => 'Add', + '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"', + 'details' => 'Details', + 'events' => 'Events', + 'target_amount' => 'Target amount', + 'start_date' => 'Start date', + 'target_date' => 'Target date', + 'no_target_date' => 'No target date', + 'todo' => 'to do', + 'table' => 'Table', + 'piggy_bank_not_exists' => 'Piggy bank no longer exists.', + 'add_any_amount_to_piggy' => 'Add money to this piggy bank to reach your target of :amount.', + 'add_set_amount_to_piggy' => 'Add :amount to fill this piggy bank on :date', + 'delete_piggy_bank' => 'Delete piggy bank ":name"', + + // tags + 'regular_tag' => 'Just a regular tag.', + 'balancing_act' => 'The tag takes at most two transactions; an expense and a transfer. They\'ll balance each other out.', + 'advance_payment' => 'The tag accepts one expense and any number of deposits aimed to repay the original expense.', + 'delete_tag' => 'Supprimer le tag ":tag"', + 'new_tag' => 'Make new tag', + 'edit_tag' => 'Editer le tag ":tag"', + 'no_year' => 'No year set', + 'no_month' => 'No month set', + 'tag_title_nothing' => 'Default tags', + 'tag_title_balancingAct' => 'Balancing act tags', + 'tag_title_advancePayment' => 'Advance payment tags', + 'tags_introduction' => 'Usually tags are singular words, designed to quickly band items together using things like expensive, bill or for-party. In Firefly III, tags can have more properties such as a date, description and location. This allows you to join transactions together in a more meaningful way. For example, you could make a tag called Christmas dinner with friends and add information about the restaurant. Such tags are "singular", you would only use them for a single occasion, perhaps with multiple transactions.', + 'tags_group' => 'Tags group transactions together, which makes it possible to store reimbursements (in case you front money for others) and other "balancing acts" where expenses are summed up (the payments on your new TV) or where expenses and deposits are cancelling each other out (buying something with saved money). It\'s all up to you. Using tags the old-fashioned way is of course always possible. ', + 'tags_start' => 'Create a tag to get started or enter tags when creating new transactions.', + +]; diff --git a/resources/lang/fr_FR/form.php b/resources/lang/fr_FR/form.php new file mode 100644 index 0000000000..b48e2ae154 --- /dev/null +++ b/resources/lang/fr_FR/form.php @@ -0,0 +1,97 @@ + 'Bank name', + 'bank_balance' => 'Balance', + 'savings_balance' => 'Savings balance', + 'credit_card_limit' => 'Credit card limit', + 'automatch' => 'Match automatically', + 'skip' => 'Skip', + 'name' => 'Name', + 'active' => 'Active', + 'amount_min' => 'Minimum amount', + 'amount_max' => 'Maximum amount', + 'match' => 'Matches on', + 'repeat_freq' => 'Repeats', + 'account_from_id' => 'From account', + 'account_to_id' => 'To account', + 'account_id' => 'Asset account', + 'budget_id' => 'Budget', + 'openingBalance' => 'Opening balance', + 'tagMode' => 'Tag mode', + 'tagPosition' => 'Tag location', + 'virtualBalance' => 'Virtual balance', + 'longitude_latitude' => 'Location', + 'targetamount' => 'Target amount', + 'accountRole' => 'Account role', + 'openingBalanceDate' => 'Opening balance date', + 'ccType' => 'Credit card payment plan', + 'ccMonthlyPaymentDate' => 'Credit card monthly payment date', + 'piggy_bank_id' => 'Piggy bank', + 'returnHere' => 'Return here', + 'returnHereExplanation' => 'After storing, return here to create another one.', + 'returnHereUpdateExplanation' => 'After updating, return here.', + 'description' => 'Description', + 'expense_account' => 'Expense account', + 'revenue_account' => 'Revenue account', + 'amount' => 'Amount', + 'date' => 'Date', + 'category' => 'Category', + 'tags' => 'Tags', + 'deletePermanently' => 'Delete permanently', + 'cancel' => 'Cancel', + 'targetdate' => 'Target date', + 'tag' => 'Tag', + 'under' => 'Under', + 'symbol' => 'Symbol', + 'code' => 'Code', + 'iban' => 'IBAN', + 'csv' => 'CSV file', + 'has_headers' => 'Headers', + 'date_format' => 'Date format', + 'csv_config' => 'CSV import configuration', + 'specifix' => 'Bank- or file specific fixes', + 'csv_import_account' => 'Default import account', + 'attachments[]' => 'Attachments', + 'store_new_withdrawal' => 'Store new withdrawal', + 'store_new_deposit' => 'Store new deposit', + 'store_new_transfer' => 'Store new transfer', + 'add_new_withdrawal' => 'Add a new withdrawal', + 'add_new_deposit' => 'Add a new deposit', + 'add_new_transfer' => 'Add a new transfer', + 'noPiggybank' => '(no piggy bank)', + 'noBudget' => '(no budget)', + 'title' => 'Title', + 'notes' => 'Notes', + 'filename' => 'File name', + 'mime' => 'Mime type', + 'size' => 'Size', + + + 'delete_account' => 'Delete account ":name"', + 'delete_bill' => 'Supprimer la facture ":name"', + 'delete_budget' => 'Delete budget ":name"', + 'delete_category' => 'Delete category ":name"', + 'delete_currency' => 'Delete currency ":name"', + 'delete_journal' => 'Delete transaction with description ":description"', + 'delete_attachment' => 'Delete attachment ":name"', + + 'attachment_areYouSure' => 'Are you sure you want to delete the attachment named ":name"?', + 'account_areYouSure' => 'Are you sure you want to delete the account named ":name"?', + 'bill_areYouSure' => 'Are you sure you want to delete the bill named ":name"?', + 'budget_areYouSure' => 'Are you sure you want to delete the budget named ":name"?', + 'category_areYouSure' => 'Are you sure you want to delete the category named ":name"?', + 'currency_areYouSure' => 'Are you sure you want to delete the currency named ":name"?', + 'piggyBank_areYouSure' => 'Are you sure you want to delete the piggy bank named ":name"?', + 'journal_areYouSure' => 'Are you sure you want to delete the transaction described ":description"?', + 'tag_areYouSure' => 'Are you sure you want to delete the tag ":tag"?', + + 'permDeleteWarning' => 'Deleting stuff from Firely is permanent and cannot be undone.', + 'also_delete_transactions' => 'The only transaction connected to this account will be deleted as well.|All :count transactions connected to this account will be deleted as well.', + 'also_delete_piggyBanks' => 'The only piggy bank connected to this account will be deleted as well.|All :count piggy bank connected to this account will be deleted as well.', + 'bill_keep_transactions' => 'The only transaction connected to this bill will not be deleted.|All :count transactions connected to this bill will spared deletion.', + 'budget_keep_transactions' => 'The only transaction connected to this budget will not be deleted.|All :count transactions connected to this budget will spared deletion.', + 'category_keep_transactions' => 'The only transaction connected to this category will not be deleted.|All :count transactions connected to this category will spared deletion.', + 'tag_keep_transactions' => 'The only transaction connected to this tag will not be deleted.|All :count transactions connected to this tag will spared deletion.', +]; diff --git a/resources/lang/fr_FR/help.php b/resources/lang/fr_FR/help.php new file mode 100644 index 0000000000..75acf0fbdd --- /dev/null +++ b/resources/lang/fr_FR/help.php @@ -0,0 +1,93 @@ + 'Welcome to Firefly III', + 'main-content-text' => 'Do yourself a favor and follow this short guide to make sure you know your way around.', + 'sidebar-toggle-title' => 'Sidebar to create stuff', + 'sidebar-toggle-text' => 'Hidden under the plus icon are all the buttons to create new stuff. Accounts, transactions, everything!', + 'account-menu-title' => 'All your accounts', + 'account-menu-text' => 'Here you can find all the accounts you\'ve made.', + 'budget-menu-title' => 'Budgets', + 'budget-menu-text' => 'Use this page to organise your finances and limit spending.', + 'report-menu-title' => 'Rapport', + 'report-menu-text' => 'Check this out when you want a solid overview of your fiances.', + 'transaction-menu-title' => 'Transactions', + 'transaction-menu-text' => 'All transactions you\'ve created can be found here.', + 'option-menu-title' => 'Options', + 'option-menu-text' => 'This is pretty self-explanatory.', + 'main-content-end-title' => 'The end!', + 'main-content-end-text' => 'Remember that every page has a small question mark at the right top. Click it to get help about the page you\'re on.', + + + 'register' => 'register', + 'index' => 'The main index', + 'home' => 'home', + 'flush' => 'flush', + 'accounts-index' => 'accounts.index', + 'accounts-create' => 'accounts.create', + 'accounts-edit' => 'accounts.edit', + 'accounts-delete' => 'accounts.delete', + 'accounts-show' => 'accounts.show', + 'bills-index' => 'bills.index', + 'bills-rescan' => 'bills.rescan', + 'bills-create' => 'bills.create', + 'bills-edit' => 'bills.edit', + 'bills-delete' => 'bills.delete', + 'bills-show' => 'bills.show', + 'budgets-index' => 'budgets.index', + 'budgets-income' => 'budgets.income', + 'budgets-create' => 'budgets.create', + 'budgets-edit' => 'budgets.edit', + 'budgets-delete' => 'budgets.delete', + 'budgets-show' => 'budgets.show', + 'budgets-noBudget' => 'budgets.noBudget', + 'categories-index' => 'categories.index', + 'categories-create' => 'categories.create', + 'categories-edit' => 'categories.edit', + 'categories-delete' => 'categories.delete', + 'categories-show' => 'categories.show', + 'categories-noCategory' => 'categories.noCategory', + 'csv-index' => 'Upload and import a CSV file', + 'currency-index' => 'currency.index', + 'currency-create' => 'currency.create', + 'currency-edit' => 'currency.edit', + 'currency-delete' => 'currency.delete', + 'currency-default' => 'currency.default', + 'help-show' => 'help.show', + 'json-expense-accounts' => 'json.expense-accounts', + 'json-revenue-accounts' => 'json.revenue-accounts', + 'json-categories' => 'json.categories', + 'json-tags' => 'json.tags', + 'json-box-in' => 'json.box.in', + 'json-box-out' => 'json.box.out', + 'json-box-paid' => 'json.box.paid', + 'json-box-unpaid' => 'json.box.unpaid', + 'new-user-index' => 'new-user.index', + 'piggy-banks-index' => 'piggy-banks.index', + 'piggy-banks-addMoney' => 'piggy-banks.addMoney', + 'piggy-banks-removeMoney' => 'piggy-banks.removeMoney', + 'piggy-banks-create' => 'piggy-banks.create', + 'piggy-banks-edit' => 'piggy-banks.edit', + 'piggy-banks-delete' => 'piggy-banks.delete', + 'piggy-banks-show' => 'piggy-banks.show', + 'preferences' => 'preferences', + 'profile' => 'profile', + 'profile-change-password' => 'profile.change-password', + 'profile-delete-account' => 'profile.delete-account', + 'reports-index' => 'reports.index', + 'reports-year' => 'reports.year', + 'reports-month' => 'reports.month', + 'search' => 'search', + 'tags-index' => 'tags.index', + 'tags-create' => 'tags.create', + 'tags-show' => 'tags.show', + 'tags-edit' => 'tags.edit', + 'tags-delete' => 'tags.delete', + 'transactions-index' => 'transactions.index', + 'transactions-create' => 'transactions.create', + 'transactions-edit' => 'transactions.edit', + 'transactions-delete' => 'transactions.delete', + 'transactions-show' => 'transactions.show', + 'logout' => 'logout', +]; diff --git a/resources/lang/fr_FR/list.php b/resources/lang/fr_FR/list.php new file mode 100644 index 0000000000..4bc0b61bc9 --- /dev/null +++ b/resources/lang/fr_FR/list.php @@ -0,0 +1,33 @@ + 'Name', + 'role' => 'Role', + 'currentBalance' => 'Current balance', + 'active' => 'Is active?', + 'lastActivity' => 'Last activity', + 'balanceDiff' => 'Balance difference between :start and :end', + 'matchedOn' => 'Matched on', + 'matchesOn' => 'Matched on', + 'matchingAmount' => 'Amount', + 'lastMatch' => 'Last match', + 'expectedMatch' => 'Expected match', + 'automatch' => 'Auto match?', + 'repeat_freq' => 'Repeats', + 'description' => 'Description', + 'amount' => 'Amount', + 'date' => 'Date', + 'from' => 'From', + 'to' => 'To', + 'budget' => 'Budget', + 'category' => 'Category', + 'bill' => 'Bill', + 'withdrawal' => 'Withdrawal', + 'deposit' => 'Deposit', + 'transfer' => 'Transfer', + 'type' => 'Type', + 'completed' => 'Completed', + 'iban' => 'IBAN', +]; diff --git a/resources/lang/fr_FR/pagination.php b/resources/lang/fr_FR/pagination.php new file mode 100644 index 0000000000..fcab34b253 --- /dev/null +++ b/resources/lang/fr_FR/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/resources/lang/fr_FR/passwords.php b/resources/lang/fr_FR/passwords.php new file mode 100644 index 0000000000..f248128198 --- /dev/null +++ b/resources/lang/fr_FR/passwords.php @@ -0,0 +1,22 @@ + "Passwords must be at least six characters and match the confirmation.", + "user" => "We can't find a user with that e-mail address.", + "token" => "This password reset token is invalid.", + "sent" => "We have e-mailed your password reset link!", + "reset" => "Your password has been reset!", + 'blocked' => 'Nice try though.' + +]; diff --git a/resources/lang/fr_FR/validation.php b/resources/lang/fr_FR/validation.php new file mode 100644 index 0000000000..3f8d653556 --- /dev/null +++ b/resources/lang/fr_FR/validation.php @@ -0,0 +1,67 @@ + 'Due to security constraints, you cannot register from this domain.', + 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', + 'file_attached' => 'Succesfully uploaded file ":name".', + '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.', + "accepted" => "Le champ :attribute doit être accepté.", + "active_url" => "Le champ :attribute n'est pas une URL valide.", + "after" => "Le champ :attribute doit être une date postérieure au :date.", + "alpha" => "Le champ :attribute doit seulement contenir des lettres.", + "alpha_dash" => "Le champ :attribute doit seulement contenir des lettres, des chiffres et des tirets.", + "alpha_num" => "Le champ :attribute doit seulement contenir des chiffres et des lettres.", + "array" => "Le champ :attribute doit être un tableau.", + "unique_for_user" => "There already is an entry with this :attribute.", + "before" => "Le champ :attribute doit être une date antérieure au :date.", + 'unique_object_for_user' => 'This name is already in use', + 'unique_account_for_user' => 'This account name is already in use', + "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.", + "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.", + "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.", + "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.", +]; diff --git a/resources/lang/nl_NL/firefly.php b/resources/lang/nl_NL/firefly.php index c7e9b77418..9d731d940b 100644 --- a/resources/lang/nl_NL/firefly.php +++ b/resources/lang/nl_NL/firefly.php @@ -41,8 +41,8 @@ return [ 'store_new_tag' => 'Sla tag op', 'update_tag' => 'Sla wijzigingen op', 'no_location_set' => 'Zonder plaats', - 'location' => 'Plaats', 'meta_data' => 'Metagegevens', + 'location' => 'Plaats', // preferences 'pref_home_screen_accounts' => 'Voorpaginarekeningen', @@ -67,8 +67,7 @@ return [ 'new_password' => 'Nieuw wachtwoord', 'new_password_again' => 'Nieuw wachtwoord (bevestiging)', 'delete_your_account' => 'Verwijder je account', - 'delete_your_account_help' => 'Als je je account verwijderd worden ook al je rekeningen, transacties en alle andere zaken verwijderd.' . - ' Alles is dan WEG.', + '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!', @@ -78,7 +77,8 @@ return [ 'should_change' => 'Vul ook echt een ander wachtwoord in.', 'invalid_password' => 'Ongeldig wachtwoord!', - // attach + + // attachments 'nr_of_attachments' => 'Eén bijlage|:count bijlagen', 'attachments' => 'Bijlagen', 'edit_attachment' => 'Wijzig bijlage ":name"', @@ -108,25 +108,15 @@ return [ 'csv_define_column_roles' => 'Bepaal kolominhoud', 'csv_map_values' => 'Leg relaties met kolomwaardes', 'csv_download_config' => 'Download CSV configuratiebestand.', - 'csv_index_text' => 'Met deze (en de komende) pagina\'s kan je kommagescheiden tekstbestanden importeren. Deze tool is gebaseerd ' - . 'op de prachtige tool van Atlassian. Om te beginnen selecteer' - . ' je jouw tekstbestand bij "CSV-bestand". ' - . 'Als je hulp nodig hebt, klik dan op het -icoontje rechtsboven.', + 'csv_index_text' => 'Met deze (en de komende) pagina\'s kan je kommagescheiden tekstbestanden importeren. Deze tool is gebaseerd op de prachtige tool van Atlassian. Om te beginnen selecteer je jouw tekstbestand bij "CSV-bestand". Als je hulp nodig hebt, klik dan op het -icoontje rechtsboven.', 'csv_index_beta_warning' => 'Deze tool is nog erg experimenteel. Wees dus voorzichtig.', - 'csv_header_help' => 'Zet hier een vinkje als de eerste rij van je tekstbestand bestaat uit kolomnamen,' - . 'en niet uit daadwerkelijke gegevens.', - 'csv_date_help' => 'Het gebruikte datumformaat in jouw bestand. Gebruik het formaat zoals deze' - . ' pagina het uitlegt (Engels). Het standaardformaat kan omgaan met data zoals deze: ' . date('Ymd'), + 'csv_header_help' => 'Zet hier een vinkje als de eerste rij van het CSV-bestand de namen van de kolommen bevat', + 'csv_date_help' => 'Het gebruikte datumformaat in jouw bestand. Gebruik het formaat zoals deze pagina het uitlegt (Engels). Het standaardformaat kan omgaan met data zoals deze: :dateExample.', 'csv_csv_file_help' => 'Voer hier je kommagescheiden tekstbestand in. Je kan er maar één tegelijkertijd invoeren.', 'csv_csv_config_file_help' => 'Voer hier je configuratiebestand in. Als je deze niet hebt, geen zorgen. Latere stappen leggen dit uit.', 'csv_upload_button' => 'Begin de import', 'csv_column_roles_title' => 'Bepaal de inhoud van elke kolom', - 'csv_column_roles_text' => 'Firefly kan niet automatisch ontdekken wat elke kolom betekent. Je moet het zelf aangeven. Gebruik de' - . ' voorbeeldgegevens als je het ook niet zeker weet. Klik op het -icoontje ' - . 'rechtsboven om te ontdekken wat elke kolomsoort precies is. Als de kolominhoud een directe' - . ' relatie heeft met gegevens' - . ' die al in Firefly staan, gebruik dan het vinkje. Tijdens de volgende stap komt Firefly hier dan op terug.', + 'csv_column_roles_text' => 'Firefly kan niet automatisch ontdekken wat elke kolom betekent. Je moet het zelf aangeven. Gebruik de voorbeeldgegevens als je het ook niet zeker weet. Klik op het vraagteken-icoontje (rechtsboven) om te ontdekken wat elke kolomsoort precies is. Als de kolominhoud een directe relatie heeft met gegevens die al in Firefly staan, gebruik dan het vinkje. Tijdens de volgende stap komt Firefly hier dan op terug.', 'csv_column_roles_table' => 'Kolominhoud', 'csv_column' => 'CSV-kolom', 'csv_column_name' => 'CSV-kolomnaam', @@ -136,29 +126,24 @@ return [ 'csv_continue' => 'Naar de volgende stap', 'csv_go_back' => 'Terug naar de vorige stap', 'csv_map_title' => 'Leg relaties met kolomwaardes', - 'csv_map_text' => 'Sommige kolommen bevatten waardes die misschien al in Firefly bestaan. Selecteer hier de juiste combinaties' - . 'zodat het importeren netjes aansluit bij je huidige gegevens.', + 'csv_map_text' => 'Sommige kolommen bevatten waardes die misschien al in Firefly bestaan. Selecteer hier de juiste combinaties zodat het importeren netjes aansluit bij je huidige gegevens.', 'csv_field_value' => 'Veldwaarde', 'csv_field_mapped_to' => 'Is gelijk aan', 'csv_do_not_map' => 'Geen relatie', 'csv_download_config_title' => 'Download importconfiguratie', - 'csv_download_config_text' => 'Firefly is klaar om je bestand te importeren. De instellingen en selecties die je zojuist hebt gemaakt' . - ' kan je downloaden en opslaan. Bij de volgende keer kan je dit bestand ook uploaden. Als je' . - ' kommagescheiden bestand dezelfde indeling heeft, zullen alle selecties goed staan. Dat scheelt weer!', - 'csv_more_information_text' => 'Ook als het importeren fout gaat is dit bestand handig. Na het importeren krijg je nogmaals' . - ' de gelegenheid dit bestand te downloaden.', + 'csv_download_config_text' => 'Alles wat je nu hebt zitten instellen kan je downloaden als configuratiebestand voor de volgende keer. Klik op de knop om dit te doen.', + 'csv_more_information_text' => 'Ook als het importeren fout gaat is dit bestand handig. Na het importeren krijg je nogmaals de gelegenheid dit bestand te downloaden.', 'csv_do_download_config' => 'Download het configuratiebestand', 'csv_empty_description' => '(geen beschrijving)', 'csv_upload_form' => 'CSV upload formulier', 'csv_index_unsupported_warning' => 'Het volgende wordt nog niet ondersteund:', - 'csv_unsupported_map' => 'The importer cannot map the column ":columnRole" to existing values in the database.', - 'csv_unsupported_value' => 'The importer does not know how to handle values in columns marked as ":columnRole".', - 'csv_cannot_store_value' => 'The importer has not reserved space for columns marked ":columnRole" and will be incapable of processing them.', + 'csv_unsupported_map' => 'De tool kan de kolom ":columnRole" niet koppelen aan bestaande gegevens in de database.', + 'csv_unsupported_value' => 'Firefly kan niet omgaan met kolommen gemarkeerd als ":columnRole".', + 'csv_cannot_store_value' => 'Firefly heeft geen ruimte gereserveerd voor kolommen gemarkeert als ":columnRole" en kan ze helaas niet verwerken.', 'csv_process_title' => 'Het importeren is klaar', 'csv_process_text' => ':rows rijen zijn verwerkt.', 'csv_row' => 'Rij', - 'csv_import_with_errors' => 'Er was één fout. Deze foutmelding is mogelijk in het Engels.|Er zijn :errors fouten opgetreden. De foutmeldingen' - . ' zijn mogelijk in het Engels.', + 'csv_import_with_errors' => 'Er ging één ding fout.|Er gingen :errors dingen fout.', 'csv_error_see_logs' => 'De logboeken bevatten mogelijk meer details.', 'csv_process_new_entries' => 'Firefly heeft :imported nieuwe transactie(s) gemaakt.', 'csv_start_over' => 'Begin opnieuw', @@ -194,8 +179,7 @@ return [ 'csv_specifix_RabobankDescription' => 'Vink dit aan als je Rabobank bestanden importeert.', 'csv_specifix_Dummy' => 'Dit vinkje doet niks (dummy).', 'csv_import_account_help' => 'Als jouw CSV bestand geen referenties bevat naar jouw rekening(en), geef dan hier aan om welke rekening het gaat.', - 'csv_date_parse_error' => 'Kan geen chocola maken van ":value" (met hulp van configuratie ":format").' . - ' Weet je zeker dat je CSV bestand geen fouten bevat?', + 'csv_date_parse_error' => 'Firefly kan van ":value" geen datum maken, gegeven het formaat ":format". Weet je zeker dat je CSV goed is?', // create new stuff: 'create_new_withdrawal' => 'Nieuwe uitgave', @@ -235,7 +219,7 @@ return [ 'createBudget' => 'Maak nieuw budget', 'inactiveBudgets' => 'Inactieve budgetten', 'without_budget_between' => 'Transacties zonder budget tussen :start en :end', - 'budget_in_month' => ':name in :month', + 'budget_in_month' => ':naam in :maand', 'delete_budget' => 'Verwijder budget ":name"', 'edit_budget' => 'Wijzig budget ":name"', 'update_amount' => 'Bedrag bijwerken', @@ -243,8 +227,8 @@ return [ // bills: 'delete_bill' => 'Verwijder contract ":name"', - 'update_bill' => 'Wijzig contract', 'edit_bill' => 'Wijzig contract ":name"', + 'update_bill' => 'Wijzig contract', 'store_new_bill' => 'Sla nieuw contract op', // accounts: @@ -252,265 +236,242 @@ return [ '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"', - - 'asset_deleted' => 'Betaalrekening ":name" is verwijderd.', - 'expense_deleted' => 'Crediteur ":name" is verwijderd.', - 'revenue_deleted' => 'Debiteur ":name" is verwijderd.', - - 'update_asset_account' => 'Wijzig betaalrekening', - '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', - - 'asset_accounts' => 'Betaalrekeningen', - 'expense_accounts' => 'Crediteuren', - 'revenue_accounts' => 'Debiteuren', - 'account_type' => 'Account type', - - // some extra help: - 'accountExtraHelp_asset' => '', - 'accountExtraHelp_expense' => - 'Een crediteur is een persoon of een bedrijf waar je geld aan moet betalen. Je staat bij ze in het krijt. Een verwarrende' . - ' term misschien, maar zo werkt het nou eenmaal. De supermarkt, je huurbaas of de bank zijn crediteuren. Jouw ' . - 'geld (krediet) gaat naar hen toe. De term komt uit de wereld van de boekhouding. De uitgaves die je hier ziet zijn ' . - 'positief, want je kijkt uit hun perspectief. Zodra jij afrekent in een winkel, komt het geld er bij hen bij (positief).', - 'accountExtraHelp_revenue' => 'Als je geld krijgt van een bedrijf of een persoon is dat een debiteur. ' . - 'Dat kan salaris zijn, of een andere betaling. ' . - ' Ze hebben een schuld (debet) aan jou. De term komt uit de wereld van de boekhouding.' . - ' De inkomsten die je hier ziet zijn negatief, want je kijkt uit hun perspectief. Zodra een debiteur geld naar jou ' . - 'overmaakt gaat het er bij hen af (negatief).', - 'save_transactions_by_moving' => 'Bewaar deze transacties door ze aan een andere rekening te koppelen:', + '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"', + 'asset_deleted' => 'Betaalrekening ":name" is verwijderd.', + 'expense_deleted' => 'Crediteur ":name" is verwijderd.', + 'revenue_deleted' => 'Debiteur ":name" is verwijderd.', + 'update_asset_account' => 'Wijzig betaalrekening', + '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', + 'asset_accounts' => 'Betaalrekeningen', + 'expense_accounts' => 'Crediteuren', + 'revenue_accounts' => 'Debiteuren', + 'accountExtraHelp_asset' => '', + 'accountExtraHelp_expense' => '', + 'accountExtraHelp_revenue' => '', + 'account_type' => 'Rekeningtype', + 'save_transactions_by_moving' => 'Bewaar deze transacties door ze aan een andere rekening te koppelen:', // categories: - 'new_category' => 'Nieuwe categorie', - 'create_new_category' => 'Nieuwe categorie', - 'without_category' => 'Zonder categorie', - 'update_category' => 'Wijzig categorie', - 'edit_category' => 'Wijzig categorie ":name"', - 'categories' => 'Categorieën', - 'no_category' => '(geen categorie)', - 'category' => 'Categorie', - 'delete_category' => 'Verwijder categorie ":name"', - 'store_category' => 'Sla nieuwe categorie op', + 'new_category' => 'Nieuwe categorie', + 'create_new_category' => 'Nieuwe categorie', + 'without_category' => 'Zonder categorie', + 'update_category' => 'Wijzig categorie', + 'categories' => 'Categorieën', + 'edit_category' => 'Wijzig categorie ":name"', + 'no_category' => '(geen categorie)', + 'category' => 'Categorie', + 'delete_category' => 'Verwijder categorie ":name"', + 'store_category' => 'Sla nieuwe categorie op', // transactions: - 'update_withdrawal' => 'Wijzig uitgave', - 'update_deposit' => 'Wijzig inkomsten', - 'update_transfer' => 'Wijzig overschrijving', - 'delete_withdrawal' => 'Verwijder uitgave ":description"', - 'delete_deposit' => 'Verwijder inkomsten ":description"', - 'delete_transfer' => 'Verwijder overschrijving ":description"', + 'update_withdrawal' => 'Wijzig uitgave', + 'update_deposit' => 'Wijzig inkomsten', + 'update_transfer' => 'Wijzig overschrijving', + 'delete_withdrawal' => 'Verwijder uitgave ":description"', + 'delete_deposit' => 'Verwijder inkomsten ":description"', + 'delete_transfer' => 'Verwijder overschrijving ":description"', // new user: - 'welcome' => 'Welkom bij Firefly!', - 'createNewAsset' => 'Maak om te beginnen een nieuwe betaalrekening. Dit is je start van je financiële beheer.', - 'createNewAssetButton' => 'Maak een nieuwe betaalrekening', - + 'welcome' => 'Welkom bij Firefly!', + 'createNewAsset' => 'Maak om te beginnen een nieuwe betaalrekening .' . + 'Hiermee kan je nieuwe transacties opslaan en beginnen met het beheren van je geld', + 'createNewAssetButton' => 'Maak een nieuwe betaalrekening', // home page: - 'yourAccounts' => 'Je betaalrekeningen', - 'budgetsAndSpending' => 'Budgetten en uitgaven', - 'savings' => 'Sparen', - 'markAsSavingsToContinue' => 'Om hier wat te zien stel je je betaalrekeningen in als "spaarrekening".', - 'createPiggyToContinue' => 'Maak spaarpotjes om hier iets te zien.', - 'newWithdrawal' => 'Nieuwe uitgave', - 'newDeposit' => 'Nieuwe inkomsten', - 'newTransfer' => 'Nieuwe overschrijving', - 'moneyIn' => 'Inkomsten', - 'moneyOut' => 'Uitgaven', - 'billsToPay' => 'Openstaande contracten', - 'billsPaid' => 'Betaalde contracten', - 'viewDetails' => 'Meer info', - 'divided' => 'verdeeld', - 'toDivide' => 'te verdelen', + 'yourAccounts' => 'Je betaalrekeningen', + 'budgetsAndSpending' => 'Budgetten en uitgaven', + 'savings' => 'Sparen', + 'markAsSavingsToContinue' => 'Om hier wat te zien stel je je betaalrekeningen in als "spaarrekening".', + 'createPiggyToContinue' => 'Maak spaarpotjes om hier iets te zien.', + 'newWithdrawal' => 'Nieuwe uitgave', + 'newDeposit' => 'Nieuwe inkomsten', + 'newTransfer' => 'Nieuwe overschrijving', + 'moneyIn' => 'Inkomsten', + 'moneyOut' => 'Uitgaven', + 'billsToPay' => 'Openstaande contracten', + 'billsPaid' => 'Betaalde contracten', + 'viewDetails' => 'Meer info', + 'divided' => 'verdeeld', + 'toDivide' => 'te verdelen', // menu and titles, should be recycled as often as possible: - 'toggleNavigation' => 'Navigatie aan of uit', - 'currency' => 'Valuta', - 'preferences' => 'Voorkeuren', - 'logout' => 'Uitloggen', - 'searchPlaceholder' => 'Zoeken...', - 'dashboard' => 'Dashboard', - 'currencies' => 'Valuta', - 'accounts' => 'Rekeningen', - 'Asset account' => 'Betaalrekening', - 'Default account' => 'Betaalrekening', - 'Expense account' => 'Crediteur', - 'Revenue account' => 'Debiteur', - 'Initial balance account' => 'Startbalansrekening', - 'budgets' => 'Budgetten', - 'tags' => 'Tags', - 'reports' => 'Overzichten', - 'transactions' => 'Transacties', - 'expenses' => 'Uitgaven', - 'income' => 'Inkomsten', - 'transfers' => 'Overschrijvingen', - 'moneyManagement' => 'Geldbeheer', - 'piggyBanks' => 'Spaarpotjes', - 'bills' => 'Contracten', - 'createNew' => 'Nieuw', - 'withdrawal' => 'Uitgave', - 'deposit' => 'Inkomsten', - 'account' => 'Rekening', - 'transfer' => 'Overschrijving', - 'Withdrawal' => 'Uitgave', - 'Deposit' => 'Inkomsten', - 'Transfer' => 'Overschrijving', - 'profile' => 'Profiel', - 'bill' => 'Contract', - 'yes' => 'Ja', - 'no' => 'Nee', - 'amount' => 'Bedrag', - 'newBalance' => 'Nieuw saldo', - 'overview' => 'Overzicht', - 'saveOnAccount' => 'Sparen op rekening', - 'unknown' => 'Onbekend', - 'daily' => 'Dagelijks', - 'weekly' => 'Wekelijks', - 'monthly' => 'Maandelijks', - 'quarterly' => 'Elk kwartaal', - 'half-year' => 'Elk half jaar', - 'yearly' => 'Jaarlijks', - 'sum_of_year' => 'Som van jaar', - 'average_of_year' => 'Gemiddelde in jaar', - 'sum_of_years' => 'Som van jaren', - 'average_of_years' => 'Gemiddelde in jaren', + 'toggleNavigation' => 'Navigatie aan of uit', + 'currency' => 'Valuta', + 'preferences' => 'Voorkeuren', + 'logout' => 'Uitloggen', + 'searchPlaceholder' => 'Zoeken...', + 'dashboard' => 'Dashboard', + 'currencies' => 'Valuta', + 'accounts' => 'Rekeningen', + 'Asset account' => 'Betaalrekening', + 'Default account' => 'Betaalrekening', + 'Expense account' => 'Crediteur', + 'Revenue account' => 'Debiteur', + 'Initial balance account' => 'Startbalansrekening', + 'budgets' => 'Budgetten', + 'tags' => 'Tags', + 'reports' => 'Overzichten', + 'transactions' => 'Transacties', + 'expenses' => 'Uitgaven', + 'income' => 'Inkomsten', + 'transfers' => 'Overschrijvingen', + 'moneyManagement' => 'Geldbeheer', + 'piggyBanks' => 'Spaarpotjes', + 'bills' => 'Contracten', + 'createNew' => 'Nieuw', + 'withdrawal' => 'Uitgave', + 'deposit' => 'Inkomsten', + 'account' => 'Rekening', + 'transfer' => 'Overschrijving', + 'Withdrawal' => 'Uitgave', + 'Deposit' => 'Inkomsten', + 'Transfer' => 'Overschrijving', + 'bill' => 'Contract', + 'yes' => 'Ja', + 'no' => 'Nee', + 'amount' => 'Bedrag', + 'newBalance' => 'Nieuw saldo', + 'overview' => 'Overzicht', + 'saveOnAccount' => 'Sparen op rekening', + 'unknown' => 'Onbekend', + 'daily' => 'Dagelijks', + 'weekly' => 'Wekelijks', + 'monthly' => 'Maandelijks', + 'quarterly' => 'Elk kwartaal', + 'half-year' => 'Elk half jaar', + 'yearly' => 'Jaarlijks', + 'profile' => 'Profiel', // reports: - 'report_default' => 'Standaard financieel rapport (:start tot :end)', - 'quick_link_reports' => 'Snelle links', - 'quick_link_default_report' => 'Standaard financieel rapport', - 'report_this_month_quick' => 'Deze maand, alle rekeningen', - 'report_this_year_quick' => 'Dit jaar, 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', - 'balanceStartOfYear' => 'Saldo aan het begin van het jaar', - 'balanceEndOfYear' => 'Saldo aan het einde van het jaar', - 'balanceStartOfMonth' => 'Saldo aan het begin van de maand', - 'balanceEndOfMonth' => 'Saldo aan het einde van de maand', - 'balanceStart' => 'Saldo aan het begin van de periode', - 'balanceEnd' => 'Saldo aan het einde van de periode', - 'reportsOwnAccounts' => 'Overzichten voor je eigen betaalrekeningen', - 'reportsOwnAccountsAndShared' => 'Overzichten voor je eigen betaalrekeningen en gedeelde rekeningen', - 'splitByAccount' => 'Per betaalrekening', - 'balancedByTransfersAndTags' => 'Gecorrigeerd met overschrijvingen en tags', - 'coveredWithTags' => 'Gecorrigeerd met tags', - 'leftUnbalanced' => 'Ongecorrigeerd', - 'expectedBalance' => 'Verwacht saldo', - 'outsideOfBudgets' => 'Buiten budgetten', - 'leftInBudget' => 'Over van budget', - 'sumOfSums' => 'Alles bij elkaar', - 'noCategory' => '(zonder categorie)', - 'notCharged' => '(Nog) niet betaald', - 'inactive' => 'Niet actief', - 'difference' => 'Verschil', - 'in' => 'In', - 'out' => 'Uit', - 'topX' => 'top :number', - 'showTheRest' => 'Laat alles zien', - 'hideTheRest' => 'Laat alleen de top :number zien', - 'categories_earned_in_year' => 'Categorieën (inkomsten)', - 'categories_spent_in_year' => 'Categorieën (uitgaven)', - 'report_type' => 'Rapporttype', - 'report_type_default' => 'Standard financieel rapport', - 'report_included_accounts' => 'Accounts in rapport', - 'report_date_range' => 'Datumbereik', - 'report_include_help' => 'Overboekingen naar gedeelde rekeningen tellen als uitgave. Overboekingen van gedeelde rekeningen tellen als inkomsten.', - 'report_preset_ranges' => 'Standaardbereik', - 'shared' => 'Gedeeld', - + 'report_default' => 'Standaard financieel rapport (:start tot :end)', + 'quick_link_reports' => 'Snelle links', + 'quick_link_default_report' => 'Standaard financieel rapport', + 'report_this_month_quick' => 'Deze maand, alle rekeningen', + 'report_this_year_quick' => 'Dit jaar, 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', + 'balanceStartOfYear' => 'Saldo aan het begin van het jaar', + 'balanceEndOfYear' => 'Saldo aan het einde van het jaar', + 'balanceStartOfMonth' => 'Saldo aan het begin van de maand', + 'balanceEndOfMonth' => 'Saldo aan het einde van de maand', + 'balanceStart' => 'Saldo aan het begin van de periode', + 'balanceEnd' => 'Saldo aan het einde van de periode', + 'reportsOwnAccounts' => 'Overzichten voor je eigen betaalrekeningen', + 'reportsOwnAccountsAndShared' => 'Overzichten voor je eigen betaalrekeningen en gedeelde rekeningen', + 'splitByAccount' => 'Per betaalrekening', + 'balancedByTransfersAndTags' => 'Gecorrigeerd met overschrijvingen en tags', + 'coveredWithTags' => 'Gecorrigeerd met tags', + 'leftUnbalanced' => 'Ongecorrigeerd', + 'expectedBalance' => 'Verwacht saldo', + 'outsideOfBudgets' => 'Buiten budgetten', + 'leftInBudget' => 'Over van budget', + 'sumOfSums' => 'Alles bij elkaar', + 'noCategory' => '(zonder categorie)', + 'notCharged' => '(Nog) niet betaald', + 'inactive' => 'Niet actief', + 'difference' => 'Verschil', + 'in' => 'In', + 'out' => 'Uit', + 'topX' => 'top :number', + 'showTheRest' => 'Laat alles zien', + 'hideTheRest' => 'Laat alleen de top :number zien', + 'sum_of_year' => 'Som van jaar', + 'sum_of_years' => 'Som van jaren', + 'average_of_year' => 'Gemiddelde in jaar', + 'average_of_years' => 'Gemiddelde in jaren', + 'categories_earned_in_year' => 'Categorieën (inkomsten)', + 'categories_spent_in_year' => 'Categorieën (uitgaven)', + 'report_type' => 'Rapporttype', + 'report_type_default' => 'Standard financieel rapport', + 'report_included_accounts' => 'Accounts in rapport', + 'report_date_range' => 'Datumbereik', + 'report_include_help' => 'Overboekingen naar gedeelde rekeningen tellen als uitgave. Overboekingen van gedeelde rekeningen tellen als inkomsten.', + 'report_preset_ranges' => 'Standaardbereik', + 'shared' => 'Gedeeld', // charts: - 'dayOfMonth' => 'Dag vd maand', - 'month' => 'Maand', - 'budget' => 'Budget', - 'spent' => 'Uitgegeven', - 'earned' => 'Verdiend', - 'overspent' => 'Teveel uitgegeven', - 'left' => 'Over', - 'noBudget' => '(geen budget)', - 'maxAmount' => 'Maximaal bedrag', - 'minAmount' => 'Minimaal bedrag', - 'billEntry' => 'Bedrag voor dit contract', - 'name' => 'Naam', - 'date' => 'Datum', - 'paid' => 'Betaald', - 'unpaid' => 'Niet betaald', - 'day' => 'Dag', - 'budgeted' => 'Gebudgetteerd', - 'period' => 'Periode', - 'balance' => 'Saldo', - 'summary' => 'Samenvatting', - 'sum' => 'Som', - 'average' => 'Gemiddeld', - 'balanceFor' => 'Saldo op :name', + 'dayOfMonth' => 'Dag vd maand', + 'month' => 'Maand', + 'budget' => 'Budget', + 'spent' => 'Uitgegeven', + 'earned' => 'Verdiend', + 'overspent' => 'Teveel uitgegeven', + 'left' => 'Over', + 'noBudget' => '(geen budget)', + 'maxAmount' => 'Maximaal bedrag', + 'minAmount' => 'Minimaal bedrag', + 'billEntry' => 'Bedrag voor dit contract', + 'name' => 'Naam', + 'date' => 'Datum', + 'paid' => 'Betaald', + 'unpaid' => 'Niet betaald', + 'day' => 'Dag', + 'budgeted' => 'Gebudgetteerd', + 'period' => 'Periode', + 'balance' => 'Saldo', + 'summary' => 'Samenvatting', + 'sum' => 'Som', + 'average' => 'Gemiddeld', + 'balanceFor' => 'Saldo op :name', // piggy banks: - 'piggy_bank' => 'Spaarpotje', - 'new_piggy_bank' => 'Nieuw spaarpotje', - 'store_piggy_bank' => 'Sla spaarpotje op', - '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', - 'add_money_to_piggy_title' => 'Stop geld in spaarpotje ":name"', - 'remove_money_from_piggy_title' => 'Haal geld uit spaarpotje ":name"', - 'add' => 'Toevoegen', - '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"', - 'details' => 'Details', - 'events' => 'Gebeurtenissen', - 'target_amount' => 'Doelbedrag', - 'start_date' => 'Startdatum', - 'target_date' => 'Doeldatum', - 'no_target_date' => 'Geen doeldatum', - 'todo' => 'te doen', - 'table' => 'Tabel', - 'piggy_bank_not_exists' => 'Dit spaarpotje bestaat niet meer.', - 'add_any_amount_to_piggy' => 'Stop geld in dit spaarpotje om het doel van :amount te halen.', - 'add_set_amount_to_piggy' => 'Stop voor :date :amount in dit spaarpotje om hem op tijd te vullen.', - 'delete_piggy_bank' => 'Verwijder spaarpotje ":name"', + 'piggy_bank' => 'Spaarpotje', + 'new_piggy_bank' => 'Nieuw spaarpotje', + 'store_piggy_bank' => 'Sla spaarpotje op', + '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', + 'add_money_to_piggy_title' => 'Stop geld in spaarpotje ":name"', + 'remove_money_from_piggy_title' => 'Haal geld uit spaarpotje ":name"', + 'add' => 'Toevoegen', + '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"', + 'details' => 'Details', + 'events' => 'Gebeurtenissen', + 'target_amount' => 'Doelbedrag', + 'start_date' => 'Startdatum', + 'target_date' => 'Doeldatum', + 'no_target_date' => 'Geen doeldatum', + 'todo' => 'te doen', + 'table' => 'Tabel', + 'piggy_bank_not_exists' => 'Dit spaarpotje bestaat niet meer.', + 'add_any_amount_to_piggy' => 'Stop geld in dit spaarpotje om het doel van :amount te halen.', + 'add_set_amount_to_piggy' => 'Stop voor :date :amount in dit spaarpotje om hem op tijd te vullen.', + 'delete_piggy_bank' => 'Verwijder spaarpotje ":name"', // tags - 'regular_tag' => 'Een gewone tag.', - 'balancing_act' => 'Er kunnen maar twee transacties worden getagged; een uitgaven en inkomsten. Ze balanceren elkaar.', - 'advance_payment' => 'Je kan een uitgave taggen en zoveel inkomsten om de uitgave (helemaal) te compenseren.', - 'delete_tag' => 'Verwijder tag ":tag"', - 'new_tag' => 'Maak nieuwe tag', - 'edit_tag' => 'Wijzig tag ":tag"', - 'no_year' => 'Zonder jaar', - 'no_month' => 'Zonder maand', - 'tag_title_nothing' => 'Standaard tags', - 'tag_title_balancingAct' => 'Balancerende tags', - 'tag_title_advancePayment' => 'Vooruitbetaalde tags', - 'tags_introduction' => 'Normaal gesproken zijn tags enkele woorden, gebruikt om gerelateerde zaken snel aan elkaar te plakken. ' . - 'dure-aanschaf, rekening, ' . - 'feestje. In Firefly III hebben tags meer betekenis en kan je er een datum' . - ', beschrijving en locatie aan geven. Daarmee kan je je transacties op een wat zinvollere manier aan elkaar ' . - 'koppelen. Je kan bijvoorbeeld een tag Kerstdiner maken en informatie over' . - ' het restaurant meenemen. Zulke tags zijn enkelvoudig; je gebruikt ze maar bij één gelegenheid.', - 'tags_group' => 'Omdat tags transacties groeperen kan je er teruggaves, vergoedingen en andere geldzaken mee aanduiden, zolang' . - ' de transacties elkaar "opheffen". Hoe je dit aanpakt is aan jou. De gewone manier kan natuurlijk ook.', - 'tags_start' => 'Maak hieronder een tag, of voer nieuwe tags in als je nieuwe transacties maakt.', + 'regular_tag' => 'Een gewone tag.', + 'balancing_act' => 'Er kunnen maar twee transacties worden getagged; een uitgaven en inkomsten. Ze balanceren elkaar.', + 'advance_payment' => 'Je kan een uitgave taggen en zoveel inkomsten om de uitgave (helemaal) te compenseren.', + 'delete_tag' => 'Verwijder tag ":tag"', + 'new_tag' => 'Maak nieuwe tag', + 'edit_tag' => 'Wijzig tag ":tag"', + 'no_year' => 'Zonder jaar', + 'no_month' => 'Zonder maand', + 'tag_title_nothing' => 'Standaard tags', + 'tag_title_balancingAct' => 'Balancerende tags', + 'tag_title_advancePayment' => 'Vooruitbetaalde tags', + 'tags_introduction' => 'Normaal gesproken zijn tags enkele woorden, gebruikt om gerelateerde zaken snel aan elkaar te plakken. dure-aanschaf, rekening, feestje. In Firefly III hebben tags meer betekenis en kan je er een datum, beschrijving en locatie aan geven. Daarmee kan je je transacties op een wat zinvollere manier aan elkaar koppelen. Je kan bijvoorbeeld een tag Kerstdiner maken en informatie over het restaurant meenemen. Zulke tags zijn enkelvoudig; je gebruikt ze maar bij één gelegenheid.', + 'tags_group' => 'Omdat tags transacties groeperen kan je er teruggaves, vergoedingen en andere geldzaken mee aanduiden, zolang de transacties elkaar "opheffen". Hoe je dit aanpakt is aan jou. De gewone manier kan natuurlijk ook.', + 'tags_start' => 'Maak hieronder een tag, of voer nieuwe tags in als je nieuwe transacties maakt.', + ]; diff --git a/resources/lang/nl_NL/form.php b/resources/lang/nl_NL/form.php index 35422eef27..5bfb9a1a11 100644 --- a/resources/lang/nl_NL/form.php +++ b/resources/lang/nl_NL/form.php @@ -54,21 +54,20 @@ return [ 'specifix' => 'Bank- or of bestandsspecifieke opties', 'csv_import_account' => 'Standaard rekening voor importeren', 'attachments[]' => 'Bijlagen', + 'store_new_withdrawal' => 'Nieuwe uitgave opslaan', + 'store_new_deposit' => 'Nieuwe inkomsten opslaan', + 'store_new_transfer' => 'Nieuwe overschrijving opslaan', + 'add_new_withdrawal' => 'Maak nieuwe uitgave', + 'add_new_deposit' => 'Maak nieuwe inkomsten', + 'add_new_transfer' => 'Maak nieuwe overschrijving', + 'noPiggybank' => '(geen spaarpotje)', + 'noBudget' => '(geen budget)', + 'title' => 'Titel', + 'notes' => 'Notities', + 'filename' => 'Bestandsnaam', + 'mime' => 'Bestandstype', + 'size' => 'Grootte', - 'title' => 'Titel', - 'notes' => 'Notities', - 'filename' => 'Bestandsnaam', - 'mime' => 'Bestandstype', - 'size' => 'Grootte', - - 'store_new_withdrawal' => 'Nieuwe uitgave opslaan', - 'store_new_deposit' => 'Nieuwe inkomsten opslaan', - 'store_new_transfer' => 'Nieuwe overschrijving opslaan', - 'add_new_withdrawal' => 'Maak nieuwe uitgave', - 'add_new_deposit' => 'Maak nieuwe inkomsten', - 'add_new_transfer' => 'Maak nieuwe overschrijving', - 'noPiggybank' => '(geen spaarpotje)', - 'noBudget' => '(geen budget)', 'delete_account' => 'Verwijder rekening ":name"', 'delete_bill' => 'Verwijder contract ":name"', @@ -78,7 +77,6 @@ return [ 'delete_journal' => 'Verwijder transactie met omschrijving ":description"', 'delete_attachment' => 'Verwijder bijlage ":name"', - 'tag_areYouSure' => 'Weet je zeker dat je de tag met naam ":tag" wilt verwijderen?', 'attachment_areYouSure' => 'Weet je zeker dat je de bijlage met naam ":name" wilt verwijderen?', 'account_areYouSure' => 'Weet je zeker dat je de rekening met naam ":name" wilt verwijderen?', 'bill_areYouSure' => 'Weet je zeker dat je het contract met naam ":name" wilt verwijderen?', @@ -87,18 +85,13 @@ return [ 'currency_areYouSure' => 'Weet je zeker dat je de valuta met naam ":name" wilt verwijderen?', 'piggyBank_areYouSure' => 'Weet je zeker dat je het spaarpotje met naam ":name" wilt verwijderen?', 'journal_areYouSure' => 'Weet je zeker dat je de transactie met naam ":description" wilt verwijderen?', + 'tag_areYouSure' => 'Weet je zeker dat je de tag met naam ":tag" wilt verwijderen?', 'permDeleteWarning' => 'Dingen verwijderen uit Firefly is permanent en kan niet ongedaan gemaakt worden.', - 'also_delete_transactions' => 'Ook de enige transactie verbonden aan deze rekening wordt verwijderd.' . - '|Ook alle :count transacties verbonden aan deze rekening worden verwijderd.', - 'also_delete_piggyBanks' => 'Ook het spaarpotje verbonden aan deze rekening wordt verwijderd.' . - '|Ook alle :count spaarpotjes verbonden aan deze rekening worden verwijderd.', - 'bill_keep_transactions' => 'De transactie verbonden aan dit contract blijft bewaard.' . - '|De :count transacties verbonden aan dit contract blijven bewaard.', - 'budget_keep_transactions' => 'De transactie verbonden aan dit budget blijft bewaard.' . - '|De :count transacties verbonden aan dit budget blijven bewaard.', - 'category_keep_transactions' => 'De transactie verbonden aan deze categorie blijft bewaard.' . - '|De :count transacties verbonden aan deze categorie blijven bewaard.', - 'tag_keep_transactions' => 'De transactie verbonden aan deze tag blijft bewaard.' . - '|De :count transacties verbonden aan deze tag blijven bewaard.', + 'also_delete_transactions' => 'Ook de enige transactie verbonden aan deze rekening wordt verwijderd.|Ook alle :count transacties verbonden aan deze rekening worden verwijderd.', + 'also_delete_piggyBanks' => 'Ook het spaarpotje verbonden aan deze rekening wordt verwijderd.|Ook alle :count spaarpotjes verbonden aan deze rekening worden verwijderd.', + 'bill_keep_transactions' => 'De transactie verbonden aan dit contract blijft bewaard.|De :count transacties verbonden aan dit contract blijven bewaard.', + 'budget_keep_transactions' => 'De transactie verbonden aan dit budget blijft bewaard.|De :count transacties verbonden aan dit budget blijven bewaard.', + 'category_keep_transactions' => 'De transactie verbonden aan deze categorie blijft bewaard.|De :count transacties verbonden aan deze categorie blijven bewaard.', + 'tag_keep_transactions' => 'De transactie verbonden aan deze tag blijft bewaard.|De :count transacties verbonden aan deze tag blijven bewaard.', ]; diff --git a/resources/lang/nl_NL/help.php b/resources/lang/nl_NL/help.php index 433a8a2efb..7282a1259f 100644 --- a/resources/lang/nl_NL/help.php +++ b/resources/lang/nl_NL/help.php @@ -19,7 +19,7 @@ return [ 'main-content-end-title' => 'Einde!', 'main-content-end-text' => 'Elke pagina heeft een vraagtekentje rechtsboven. Gebruik deze voor meer hulp. Veel plezier!', - 'csv-index' => 'csv-index', + 'register' => 'register', 'index' => 'index', 'home' => 'home', @@ -48,6 +48,7 @@ return [ 'categories-delete' => 'categories.delete', 'categories-show' => 'categories.show', 'categories-noCategory' => 'categories.noCategory', + 'csv-index' => 'csv-index', 'currency-index' => 'currency.index', 'currency-create' => 'currency.create', 'currency-edit' => 'currency.edit', diff --git a/resources/lang/nl_NL/validation.php b/resources/lang/nl_NL/validation.php index c80a9a8d1e..33ec3e5570 100644 --- a/resources/lang/nl_NL/validation.php +++ b/resources/lang/nl_NL/validation.php @@ -1,80 +1,67 @@ 'Kan niet registereren vanaf dit domein.', - 'file_already_attached' => 'Het geuploade bestand ":name" is al gelinkt aan deze transactie.', - 'file_attached' => 'Bestand met naam ":name" is met succes geuploaded.', - 'file_invalid_mime' => 'Bestand ":name" is van het type ":mime", en die kan je niet uploaden.', - 'file_too_large' => 'Bestand ":name" is te groot.', - - 'accepted' => ':attribute moet geaccepteerd zijn.', - 'active_url' => ':attribute is geen geldige URL.', - 'after' => ':attribute moet een datum na :date 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.', - 'before' => ':attribute moet een datum voor :date zijn.', + 'invalid_domain' => 'Kan niet registereren vanaf dit domein.', + 'file_already_attached' => 'Het geuploade bestand ":name" is al gelinkt aan deze transactie.', + 'file_attached' => 'Bestand met naam ":name" is met succes geuploaded.', + 'file_invalid_mime' => 'Bestand ":name" is van het type ":mime", en die kan je niet uploaden.', + 'file_too_large' => 'Bestand ":name" is te groot.', + "accepted" => ":attribute moet geaccepteerd zijn.", + "active_url" => ":attribute is geen geldige URL.", + "after" => ":attribute moet een datum na :date 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' => 'This rekeningnaam is already in use', - '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.', - 'exists' => ':attribute bestaat niet.', - 'filled' => ':attribute is verplicht.', - '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' => 'The :attribute must be a valid JSON string.', - '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.', - '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.', - '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.', - 'size.file' => ':attribute moet :size kilobyte zijn.', - 'size.string' => ':attribute moet :size karakters zijn.', - 'size.array' => ':attribute moet :size items bevatten.', + "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.", + "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.", + "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.", + "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.', - 'timezone' => 'Het :attribute moet een geldige zone zijn.', - 'unique' => ':attribute is al in gebruik.', - 'url' => ':attribute is geen geldige URL.', - + "url" => ":attribute is geen geldige URL.", + "timezone" => "Het :attribute moet een geldige zone zijn.", ]; diff --git a/resources/lang/pt_BR/firefly.php b/resources/lang/pt_BR/firefly.php index 1e39161b3c..23584f877e 100644 --- a/resources/lang/pt_BR/firefly.php +++ b/resources/lang/pt_BR/firefly.php @@ -1,7 +1,7 @@ 'Você selecionou Inglês', 'close' => 'Fechar', 'pleaseHold' => 'Por favor espere...', @@ -60,14 +60,14 @@ return [ 'pref_languages_help' => 'Firefly III suporta muitos idiomas. Qual você prefere?', 'pref_save_settings' => 'Salvar definições', - // profile + // profile: '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' => 'Exclusão da conta também excluirá todas as contas, transações, qualquer coisa que você poderia ter salvo em Firefly III. Tudo será perdido.', + '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' => 'Coloque sua senha para continuar.', 'password' => 'Senha', 'are_you_sure' => 'Você tem certeza? Você não poderá desfazer isso.', @@ -87,7 +87,7 @@ return [ 'attachment_deleted' => 'Anexo apagado ":name"', 'upload_max_file_size' => 'Tamanho máximo do arquivo: :size', - // tour + // tour: 'prev' => 'Anterior', 'next' => 'Próximo', 'end-tour' => 'Fim do Tour', @@ -101,7 +101,7 @@ return [ 'title_transfer' => 'Transferências', 'title_transfers' => 'Transferências', - // csv import + // csv import: 'csv_import' => 'Importar arquivo CSV', 'csv' => 'CSV', 'csv_index_title' => 'Carregar e importar um arquivo CSV', @@ -111,7 +111,7 @@ return [ 'csv_index_text' => 'This form allows you to import a CSV file with transactions into Firefly. It is based on the excellent CSV importer made by the folks at Atlassian. Simply upload your CSV file and follow the instructions. If you would like to learn more, please click on the button at the top of this page.', 'csv_index_beta_warning' => 'Esta ferramenta está em beta. Por favor proceder com cautela', 'csv_header_help' => 'Check this box when your CSV file\'s first row consists of column names, not actual data', - 'csv_date_help' => 'Date time format in your CSV. Follow the format like this page indicates. The default value will parse dates that look like this: 20151201', + 'csv_date_help' => 'Date time format in your CSV. Follow the format like this page indicates. The default value will parse dates that look like this: :dateExample.', 'csv_csv_file_help' => 'Select the CSV file here. You can only upload one file at a time', 'csv_csv_config_file_help' => 'Select your CSV import configuration here. If you do not know what this is, ignore it. It will be explained later.', 'csv_upload_button' => 'Iniciando importação do CSV', @@ -181,8 +181,7 @@ return [ 'csv_import_account_help' => 'If your CSV file does NOT contain information about your asset account(s), use this dropdown to select to which account the transactions in the CSV belong to.', 'csv_date_parse_error' => 'Could not parse a valid date from ":value", using the format ":format". Are you sure your CSV is correct?', - - // create new stuff + // create new stuff: 'create_new_withdrawal' => 'Criar nova retirada', 'create_new_deposit' => 'Criar um novo depósito', 'create_new_transfer' => 'Criar nova transferência', @@ -192,27 +191,26 @@ return [ 'create_new_piggy_bank' => 'Criar novo cofrinho', 'create_new_bill' => 'Criar nova fatura', - - // currencies + // currencies: 'create_currency' => 'Criar uma nova moeda', 'edit_currency' => 'Editar moeda ":name"', 'store_currency' => 'Armazenar nova moeda', 'update_currency' => 'Atualizar moeda', - // new user + // new user: 'submit' => 'Enviar', 'getting_started' => 'Iniciar', 'to_get_started' => 'To get started with Firefly, please enter your current bank\'s name, and the balance of your checking account:', 'savings_balance_text' => 'If you have a savings account, please enter the current balance of your savings account:', 'cc_balance_text' => 'If you have a credit card, please enter your credit card\'s limit.', - // forms + // forms: 'mandatoryFields' => 'Campos obrigatórios', 'optionalFields' => 'Campos opcionais', 'options' => 'Opções', 'something' => 'Qualquer coisa!', - // budgets + // budgets: 'create_new_budget' => 'Criar um novo orçamento', 'store_new_budget' => 'Armazenar novo orçamento', 'availableIn' => 'Disponível em :date', @@ -227,261 +225,253 @@ return [ 'update_amount' => 'Update amount', 'update_budget' => 'Update budget', - // bills + // bills: 'delete_bill' => 'Delete bill ":name"', 'edit_bill' => 'Edit bill ":name"', 'update_bill' => 'Update bill', 'store_new_bill' => 'Store new bill', - // accounts + // accounts: '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"', + 'asset_deleted' => 'Successfully deleted asset account ":name"', + 'expense_deleted' => 'Successfully deleted expense account ":name"', + 'revenue_deleted' => 'Successfully deleted revenue account ":name"', + 'update_asset_account' => 'Update asset account', + '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', + 'asset_accounts' => 'Asset accounts', + 'expense_accounts' => 'Expense accounts', + 'revenue_accounts' => 'Revenue accounts', + 'accountExtraHelp_asset' => '', + 'accountExtraHelp_expense' => '', + 'accountExtraHelp_revenue' => '', + 'account_type' => 'Account type', + 'save_transactions_by_moving' => 'Save these transaction(s) by moving them to another account:', - 'store_new_asset_account' => 'Store new asset account', - 'store_new_expense_account' => 'Store new expense account', - 'store_new_revenue_account' => 'Store new revenue account', + // categories: + 'new_category' => 'New category', + 'create_new_category' => 'Create a new category', + 'without_category' => 'Without a category', + 'update_category' => 'Wijzig categorie', + 'categories' => 'Categories', + 'edit_category' => 'Edit category ":name"', + 'no_category' => '(no category)', + 'category' => 'Category', + 'delete_category' => 'Delete category ":name"', + 'store_category' => 'Store new category', - 'edit_asset_account' => 'Edit asset account ":name"', - 'edit_expense_account' => 'Edit expense account ":name"', - 'edit_revenue_account' => 'Edit revenue account ":name"', + // transactions: + 'update_withdrawal' => 'Update withdrawal', + 'update_deposit' => 'Update deposit', + 'update_transfer' => 'Update transfer', + 'delete_withdrawal' => 'Delete withdrawal ":description"', + 'delete_deposit' => 'Delete deposit ":description"', + 'delete_transfer' => 'Delete transfer ":description"', - 'delete_asset_account' => 'Delete asset account ":name"', - 'delete_expense_account' => 'Delete expense account ":name"', - 'delete_revenue_account' => 'Delete revenue account ":name"', + // new user: + 'welcome' => 'Welcome to Firefly!', + 'createNewAsset' => 'Create a new asset account to get started. ' . + 'This will allow you to create transactions and start your financial management', + 'createNewAssetButton' => 'Criar nova conta de ativo', - 'asset_deleted' => 'Successfully deleted asset account ":name"', - 'expense_deleted' => 'Successfully deleted expense account ":name"', - 'revenue_deleted' => 'Successfully deleted revenue account ":name"', + // home page: + 'yourAccounts' => 'Your accounts', + 'budgetsAndSpending' => 'Budgets and spending', + 'savings' => 'Savings', + 'markAsSavingsToContinue' => 'Mark your asset accounts as "Savings account" to fill this panel', + 'createPiggyToContinue' => 'Create piggy banks to fill this panel.', + 'newWithdrawal' => 'New expense', + 'newDeposit' => 'Novo depósito', + 'newTransfer' => 'Nova transferência', + 'moneyIn' => 'Money in', + 'moneyOut' => 'Money out', + 'billsToPay' => 'Bills to pay', + 'billsPaid' => 'Bills paid', + 'viewDetails' => 'View details', + 'divided' => 'divided', + 'toDivide' => 'left to divide', - 'update_asset_account' => 'Update asset account', - 'update_expense_account' => 'Update expense account', - 'update_revenue_account' => 'Update revenue account', + // menu and titles, should be recycled as often as possible: + 'toggleNavigation' => 'Toggle navigation', + 'currency' => 'Currency', + 'preferences' => 'Preferences', + 'logout' => 'Logout', + 'searchPlaceholder' => 'Search...', + 'dashboard' => 'Dashboard', + 'currencies' => 'Currencies', + 'accounts' => 'Accounts', + 'Asset account' => 'Asset account', + 'Default account' => 'Asset account', + 'Expense account' => 'Conta de Despesa', + 'Revenue account' => 'Conta de Receita', + 'Initial balance account' => 'Initial balance account', + 'budgets' => 'Budgets', + 'tags' => 'Tags', + 'reports' => 'Relatórios', + 'transactions' => 'Transações', + 'expenses' => 'Despesas', + 'income' => 'Receita / Renda', + 'transfers' => 'Transferências', + 'moneyManagement' => 'Gerenciamento de Dinheiro', + 'piggyBanks' => 'Cofrinhos', + 'bills' => 'Faturas', + 'createNew' => 'Criar nova(o)', + 'withdrawal' => 'Retirada', + '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', + 'newBalance' => 'Novo saldo', + 'overview' => 'Visão Geral', + 'saveOnAccount' => 'Salvar na conta', + 'unknown' => 'Desconhecido', + 'daily' => 'Diário', + 'weekly' => 'Semanal', + 'monthly' => 'Mensal', + 'quarterly' => 'Trimestral', + 'half-year' => 'Semestral', + 'yearly' => 'Anual', + 'profile' => 'Perfil', - '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', + // reports: + 'report_default' => 'Default financial report for :start until :end', + 'quick_link_reports' => 'Quick links', + 'quick_link_default_report' => 'Default financial report', + 'report_this_month_quick' => 'Current month, all accounts', + 'report_this_year_quick' => 'Current year, all accounts', + 'report_all_time_quick' => 'All-time, all accounts', + 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', + 'incomeVsExpenses' => 'Renda vs. Despesas', + 'accountBalances' => 'Saldos de Contas', + 'balanceStartOfYear' => 'Balance at start of year', + 'balanceEndOfYear' => 'Balance at end of year', + 'balanceStartOfMonth' => 'Balance at start of month', + 'balanceEndOfMonth' => 'Balance at end of month', + 'balanceStart' => 'Balance at start of period', + 'balanceEnd' => 'Balance at end of period', + 'reportsOwnAccounts' => 'Reports for your own accounts', + 'reportsOwnAccountsAndShared' => 'Reports for your own accounts and shared accounts', + 'splitByAccount' => 'Split by account', + 'balancedByTransfersAndTags' => 'Balanced by transfers and tags', + 'coveredWithTags' => 'Covered with tags', + 'leftUnbalanced' => 'Left unbalanced', + 'expectedBalance' => 'Saldo Experado', + 'outsideOfBudgets' => 'Fora do orçamento', + 'leftInBudget' => 'Deixou no orçamento', + 'sumOfSums' => 'Soma dos montantes', + 'noCategory' => '(no category)', + 'notCharged' => 'Não cobrado (ainda)', + 'inactive' => 'Inativo', + 'difference' => 'Diferente', + 'in' => 'Entrada', + 'out' => 'Saída', + 'topX' => 'top :number', + 'showTheRest' => 'Mostrar tudo', + 'hideTheRest' => 'Mostrar apenas os top :number', + 'sum_of_year' => 'Soma do ano', + 'sum_of_years' => 'Sum of years', + 'average_of_year' => 'Média do ano', + 'average_of_years' => 'Average of years', + 'categories_earned_in_year' => 'Categories (by earnings)', + 'categories_spent_in_year' => 'Categories (by spendings)', + 'report_type' => 'Report type', + 'report_type_default' => 'Default financial report', + 'report_included_accounts' => 'Included accounts', + 'report_date_range' => 'Date range', + 'report_include_help' => 'In all cases, transfers to shared accounts count as expenses, and transfers from shared accounts count as income.', + 'report_preset_ranges' => 'Pre-set ranges', + 'shared' => 'Shared', - 'asset_accounts' => 'Asset accounts', - 'expense_accounts' => 'Expense accounts', - 'revenue_accounts' => 'Revenue accounts', + // charts: + 'dayOfMonth' => 'Dia do mês', + 'month' => 'Mês', + 'budget' => 'Orçamento', + 'spent' => 'Gasto', + 'earned' => 'Ganho', + 'overspent' => 'Gasto excedido', + 'left' => 'Left', + 'noBudget' => '(sem orçamento)', + 'maxAmount' => 'Valor Máximo', + 'minAmount' => 'Valor Mínimo', + 'billEntry' => 'Current bill entry', + 'name' => 'Nome', + 'date' => 'Data', + 'paid' => 'Pago', + 'unpaid' => 'Não pago', + 'day' => 'Dia', + 'budgeted' => 'Orçado', + 'period' => 'Período', + 'balance' => 'Saldo', + 'summary' => 'Sumário', + 'sum' => 'Soma', + 'average' => 'Média', + 'balanceFor' => 'Saldo para ":name"', - 'accountExtraHelp_asset' => '', - 'accountExtraHelp_expense' => '', - 'accountExtraHelp_revenue' => '', - 'account_type' => 'Account type', - 'save_transactions_by_moving' => 'Save these transaction(s) by moving them to another account:', - - // categories - 'new_category' => 'New category', - 'create_new_category' => 'Create a new category', - 'without_category' => 'Without a category', - 'update_category' => 'Wijzig categorie', - 'categories' => 'Categories', - 'edit_category' => 'Edit category ":name"', - 'no_category' => '(no category)', - 'category' => 'Category', - 'delete_category' => 'Delete category ":name"', - 'store_category' => 'Store new category', - - // transactions - 'update_withdrawal' => 'Update withdrawal', - 'update_deposit' => 'Update deposit', - 'update_transfer' => 'Update transfer', - 'delete_withdrawal' => 'Delete withdrawal ":description"', - 'delete_deposit' => 'Delete deposit ":description"', - 'delete_transfer' => 'Delete transfer ":description"', - - // new user - 'welcome' => 'Welcome to Firefly!', - 'createNewAsset' => 'Create a new asset account to get started. This will allow you to create transactions and start your financial management', - 'createNewAssetButton' => 'Criar nova conta de ativo', - - // home page - 'yourAccounts' => 'Your accounts', - 'budgetsAndSpending' => 'Budgets and spending', - 'savings' => 'Savings', - 'markAsSavingsToContinue' => 'Mark your asset accounts as "Savings account" to fill this panel', - 'createPiggyToContinue' => 'Create piggy banks to fill this panel.', - 'newWithdrawal' => 'New expense', - 'newDeposit' => 'Novo depósito', - 'newTransfer' => 'Nova transferência', - 'moneyIn' => 'Money in', - 'moneyOut' => 'Money out', - 'billsToPay' => 'Bills to pay', - 'billsPaid' => 'Bills paid', - 'viewDetails' => 'View details', - 'divided' => 'divided', - 'toDivide' => 'left to divide', - - // menu and titles, should be recycled as often as possible - 'toggleNavigation' => 'Toggle navigation', - 'currency' => 'Currency', - 'preferences' => 'Preferences', - 'logout' => 'Logout', - 'searchPlaceholder' => 'Search...', - 'dashboard' => 'Dashboard', - 'currencies' => 'Currencies', - 'accounts' => 'Accounts', - 'Asset account' => 'Asset account', - 'Default account' => 'Asset account', - 'Expense account' => 'Conta de Despesa', - 'Revenue account' => 'Conta de Receita', - 'Initial balance account' => 'Initial balance account', - 'budgets' => 'Budgets', - 'tags' => 'Tags', - 'reports' => 'Relatórios', - 'transactions' => 'Transações', - 'expenses' => 'Despesas', - 'income' => 'Receita / Renda', - 'transfers' => 'Transferências', - 'moneyManagement' => 'Gerenciamento de Dinheiro', - 'piggyBanks' => 'Cofrinhos', - 'bills' => 'Faturas', - 'createNew' => 'Criar nova(o)', - 'withdrawal' => 'Retirada', - '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', - 'newBalance' => 'Novo saldo', - 'overview' => 'Visão Geral', - 'saveOnAccount' => 'Salvar na conta', - 'unknown' => 'Desconhecido', - 'daily' => 'Diário', - 'weekly' => 'Semanal', - 'monthly' => 'Mensal', - 'quarterly' => 'Trimestral', - 'half-year' => 'Semestral', - 'yearly' => 'Anual', - 'profile' => 'Perfil', - - // reports - 'report_default' => 'Default financial report for :start until :end', - 'quick_link_reports' => 'Quick links', - 'quick_link_default_report' => 'Default financial report', - 'report_this_month_quick' => 'Current month, all accounts', - 'report_this_year_quick' => 'Current year, all accounts', - 'report_all_time_quick' => 'All-time, all accounts', - 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', - 'incomeVsExpenses' => 'Renda vs. Despesas', - 'accountBalances' => 'Saldos de Contas', - 'balanceStartOfYear' => 'Balance at start of year', - 'balanceEndOfYear' => 'Balance at end of year', - 'balanceStartOfMonth' => 'Balance at start of month', - 'balanceEndOfMonth' => 'Balance at end of month', - 'balanceStart' => 'Balance at start of period', - 'balanceEnd' => 'Balance at end of period', - 'reportsOwnAccounts' => 'Reports for your own accounts', - 'reportsOwnAccountsAndShared' => 'Reports for your own accounts and shared accounts', - 'splitByAccount' => 'Split by account', - 'balancedByTransfersAndTags' => 'Balanced by transfers and tags', - 'coveredWithTags' => 'Covered with tags', - 'leftUnbalanced' => 'Left unbalanced', - 'expectedBalance' => 'Saldo Experado', - 'outsideOfBudgets' => 'Fora do orçamento', - 'leftInBudget' => 'Deixou no orçamento', - 'sumOfSums' => 'Soma dos montantes', - 'noCategory' => '(no category)', - 'notCharged' => 'Não cobrado (ainda)', - 'inactive' => 'Inativo', - 'difference' => 'Diferente', - 'in' => 'Entrada', - 'out' => 'Saída', - 'topX' => 'top :number', - 'showTheRest' => 'Mostrar tudo', - 'hideTheRest' => 'Mostrar apenas os top :number', - 'sum_of_year' => 'Soma do ano', - 'sum_of_years' => 'Sum of years', - 'average_of_year' => 'Média do ano', - 'average_of_years' => 'Average of years', - 'categories_earned_in_year' => 'Categories (by earnings)', - 'categories_spent_in_year' => 'Categories (by spendings)', - 'report_type' => 'Report type', - 'report_type_default' => 'Default financial report', - 'report_included_accounts' => 'Included accounts', - 'report_date_range' => 'Date range', - 'report_include_help' => 'In all cases, transfers to shared accounts count as expenses, and transfers from shared accounts count as income.', - 'report_preset_ranges' => 'Pre-set ranges', - 'shared' => 'Shared', - - // charts - 'dayOfMonth' => 'Dia do mês', - 'month' => 'Mês', - 'budget' => 'Orçamento', - 'spent' => 'Gasto', - 'earned' => 'Ganho', - 'overspent' => 'Gasto excedido', - 'left' => 'Left', - 'noBudget' => '(sem orçamento)', - 'maxAmount' => 'Valor Máximo', - 'minAmount' => 'Valor Mínimo', - 'billEntry' => 'Current bill entry', - 'name' => 'Nome', - 'date' => 'Data', - 'paid' => 'Pago', - 'unpaid' => 'Não pago', - 'day' => 'Dia', - 'budgeted' => 'Orçado', - 'period' => 'Período', - 'balance' => 'Saldo', - 'summary' => 'Sumário', - 'sum' => 'Soma', - 'average' => 'Média', - 'balanceFor' => 'Saldo para ":name"', - - // piggy banks - 'piggy_bank' => 'Cofrinho', - 'new_piggy_bank' => 'Criar novo cofrinho', - 'store_piggy_bank' => 'Store new piggy bank', - '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', - 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', - 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', - 'add' => 'Adicionar', - 'remove' => 'Remover', - '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"', - 'details' => 'Detalhes', - 'events' => 'Eventos', - 'target_amount' => 'Valor alvo', - 'start_date' => 'Data de Início', - 'target_date' => 'Data Alvo', - 'no_target_date' => 'Nenhum data', - 'todo' => 'A fazer', - 'table' => 'Tabela', - 'piggy_bank_not_exists' => 'Piggy bank no longer exists.', - 'add_any_amount_to_piggy' => 'Add money to this piggy bank to reach your target of :amount.', - 'add_set_amount_to_piggy' => 'Add :amount to fill this piggy bank on :date', - 'delete_piggy_bank' => 'Apagar cofrinho ":name"', + // piggy banks: + 'piggy_bank' => 'Cofrinho', + 'new_piggy_bank' => 'Criar novo cofrinho', + 'store_piggy_bank' => 'Store new piggy bank', + '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', + 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', + 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', + 'add' => 'Adicionar', + 'remove' => 'Remover', + '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"', + 'details' => 'Detalhes', + 'events' => 'Eventos', + 'target_amount' => 'Valor alvo', + 'start_date' => 'Data de Início', + 'target_date' => 'Data Alvo', + 'no_target_date' => 'Nenhum data', + 'todo' => 'A fazer', + 'table' => 'Tabela', + 'piggy_bank_not_exists' => 'Piggy bank no longer exists.', + 'add_any_amount_to_piggy' => 'Add money to this piggy bank to reach your target of :amount.', + 'add_set_amount_to_piggy' => 'Add :amount to fill this piggy bank on :date', + 'delete_piggy_bank' => 'Apagar cofrinho ":name"', // tags - 'regular_tag' => 'Just a regular tag.', - 'balancing_act' => 'The tag takes at most two transactions; an expense and a transfer. They\'ll balance each other out.', - 'advance_payment' => 'The tag accepts one expense and any number of deposits aimed to repay the original expense.', - - 'delete_tag' => 'Apagar tag ":tag"', - 'new_tag' => 'Fazer nova tag', - 'edit_tag' => 'Editar tag ":tag"', - 'no_year' => 'Nenhum ano definido', - 'no_month' => 'Nenhum mês definido', - 'tag_title_nothing' => 'Tags padrões', - 'tag_title_balancingAct' => 'Balancing act tags', - 'tag_title_advancePayment' => 'Advance payment tags', - 'tags_introduction' => 'Usually tags are singular words, designed to quickly band items together using things like expensive, bill or for-party. In Firefly III, tags can have more properties such as a date, description and location. This allows you to join transactions together in a more meaningful way. For example, you could make a tag called Christmas dinner with friends and add information about the restaurant. Such tags are "singular", you would only use them for a single occasion, perhaps with multiple transactions.', - 'tags_group' => 'Tags group transactions together, which makes it possible to store reimbursements (in case you front money for others) and other "balancing acts" where expenses are summed up (the payments on your new TV) or where expenses and deposits are cancelling each other out (buying something with saved money). It\'s all up to you. Using tags the old-fashioned way is of course always possible. ', - 'tags_start' => 'Create a tag to get started or enter tags when creating new transactions.', + 'regular_tag' => 'Just a regular tag.', + 'balancing_act' => 'The tag takes at most two transactions; an expense and a transfer. They\'ll balance each other out.', + 'advance_payment' => 'The tag accepts one expense and any number of deposits aimed to repay the original expense.', + 'delete_tag' => 'Apagar tag ":tag"', + 'new_tag' => 'Fazer nova tag', + 'edit_tag' => 'Editar tag ":tag"', + 'no_year' => 'Nenhum ano definido', + 'no_month' => 'Nenhum mês definido', + 'tag_title_nothing' => 'Tags padrões', + 'tag_title_balancingAct' => 'Balancing act tags', + 'tag_title_advancePayment' => 'Advance payment tags', + 'tags_introduction' => 'Usually tags are singular words, designed to quickly band items together using things like expensive, bill or for-party. In Firefly III, tags can have more properties such as a date, description and location. This allows you to join transactions together in a more meaningful way. For example, you could make a tag called Christmas dinner with friends and add information about the restaurant. Such tags are "singular", you would only use them for a single occasion, perhaps with multiple transactions.', + 'tags_group' => 'Tags group transactions together, which makes it possible to store reimbursements (in case you front money for others) and other "balancing acts" where expenses are summed up (the payments on your new TV) or where expenses and deposits are cancelling each other out (buying something with saved money). It\'s all up to you. Using tags the old-fashioned way is of course always possible. ', + 'tags_start' => 'Create a tag to get started or enter tags when creating new transactions.', ]; diff --git a/resources/lang/pt_BR/form.php b/resources/lang/pt_BR/form.php index f773a9b9f8..03f40ccc90 100644 --- a/resources/lang/pt_BR/form.php +++ b/resources/lang/pt_BR/form.php @@ -68,6 +68,7 @@ return [ 'mime' => 'Mime type', 'size' => 'Tamanho', + 'delete_account' => 'Apagar conta ":name"', 'delete_bill' => 'Apagar fatura ":name"', 'delete_budget' => 'Delete budget ":name"', @@ -89,7 +90,7 @@ return [ 'permDeleteWarning' => 'Deleting stuff from Firely is permanent and cannot be undone.', 'also_delete_transactions' => 'The only transaction connected to this account will be deleted as well.|All :count transactions connected to this account will be deleted as well.', 'also_delete_piggyBanks' => 'The only piggy bank connected to this account will be deleted as well.|All :count piggy bank connected to this account will be deleted as well.', - 'bill_keep_transactions' => 'A única transação vinculada para esta fatura não será apagada.|Todas :count transações vinculadas a esta fatura não serão apagadas.', + 'bill_keep_transactions' => 'The only transaction connected to this bill will not be deleted.|All :count transactions connected to this bill will spared deletion.', 'budget_keep_transactions' => 'The only transaction connected to this budget will not be deleted.|All :count transactions connected to this budget will spared deletion.', 'category_keep_transactions' => 'The only transaction connected to this category will not be deleted.|All :count transactions connected to this category will spared deletion.', 'tag_keep_transactions' => 'The only transaction connected to this tag will not be deleted.|All :count transactions connected to this tag will spared deletion.', diff --git a/resources/lang/pt_BR/list.php b/resources/lang/pt_BR/list.php index 779d2c44ea..c8c03f946d 100644 --- a/resources/lang/pt_BR/list.php +++ b/resources/lang/pt_BR/list.php @@ -14,7 +14,7 @@ return [ 'matchingAmount' => 'Total', 'lastMatch' => 'Último equivalente', 'expectedMatch' => 'Equivalente esperado', - 'automatch' => 'Auto equivale?', + 'automatch' => 'Auto match?', 'repeat_freq' => 'Repetições', 'description' => 'Descrição', 'amount' => 'Total', diff --git a/resources/lang/pt_BR/validation.php b/resources/lang/pt_BR/validation.php index fa3ebc59bc..80f0e059f4 100755 --- a/resources/lang/pt_BR/validation.php +++ b/resources/lang/pt_BR/validation.php @@ -6,63 +6,62 @@ return [ 'file_attached' => 'Succesfully uploaded file ":name".', '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.', - 'accepted' => 'O campo :attribute deve ser aceito.', - 'active_url' => 'O campo :attribute não contém um URL válido.', - 'after' => 'O campo :attribute deverá conter uma data posterior a :date.', - '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.', + "accepted" => "O campo :attribute deve ser aceito.", + "active_url" => "O campo :attribute não contém um URL válido.", + "after" => "O campo :attribute deverá conter uma data posterior a :date.", + "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" => "There already is an entry with this :attribute.", - 'before' => 'O campo :attribute deverá conter uma data anterior a :date.', + "before" => "O campo :attribute deverá conter uma data anterior a :date.", 'unique_object_for_user' => 'This name is already in use', 'unique_account_for_user' => 'This account name is already in use', - '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.', - 'exists' => 'O valor selecionado para o campo :attribute é inválido.', - 'filled' => 'O campo :attribute é obrigatório.', - '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.', - '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.', - '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.', - '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.', + "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.", + "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.", + "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.", + "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.', - 'timezone' => 'O campo :attribute deverá ter um fuso horário válido.', - 'unique' => 'O valor indicado para o campo :attribute já se encontra utilizado.', - 'url' => 'O formato do URL indicado para o campo :attribute é inválido.', - + "url" => "O formato do URL indicado para o campo :attribute é inválido.", + "timezone" => "O campo :attribute deverá ter um fuso horário válido.", ]; From 144ee6b8caa17ae318b4218bca1fbe8b0bf5aca3 Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 23 Dec 2015 10:38:42 +0100 Subject: [PATCH 19/64] Updated read me. --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 479dd5f478..b74cd948f8 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,6 @@ their current cashflow. There are tons of ways to save and earn money. Firefly works on the principle that if you know where you're money is going, you can stop it from going there. - To get to know Firefly, and to see if it fits you, check out these resources: - The screenshots below on this very page. @@ -90,6 +89,11 @@ You should always run Firefly III on a site with TLS enabled (https://). Please database are encrypted (transaction descriptions, names, etc.) some parts are _not_ (amounts, dates, etc). If you need more security, you must enable transparent database encryption or a comparable technology. +## Translations + +Firefly III is currently available in Dutch and English. Support for other languages is being worked on. I can use +your help. Checkout [Crowdin](https://crowdin.com/project/firefly-iii) for more information. + ## Credits Firefly III uses the following libraries and tools: From 72cf6c9c0f445dfea6fe97f566530fc27bb43e72 Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 23 Dec 2015 11:32:41 +0100 Subject: [PATCH 20/64] Removed old route. --- app/Http/routes.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Http/routes.php b/app/Http/routes.php index 09c9f9423d..4ff527f2f8 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -284,7 +284,6 @@ Route::group( Route::get('/home', ['uses' => 'HomeController@index', 'as' => 'home']); Route::post('/daterange', ['uses' => 'HomeController@dateRange', 'as' => 'daterange']); Route::get('/flush', ['uses' => 'HomeController@flush', 'as' => 'flush']); - Route::get('/routes', ['uses' => 'HomeController@routes']); /** * Account Controller */ From 14a48303cbc9bc4ba4f5c2effc8926304635bae2 Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 23 Dec 2015 11:32:50 +0100 Subject: [PATCH 21/64] Cleanup. --- resources/lang/en_US/help.php | 132 ++++++++++++++++------------------ 1 file changed, 62 insertions(+), 70 deletions(-) diff --git a/resources/lang/en_US/help.php b/resources/lang/en_US/help.php index 9b6b58228d..535afee591 100644 --- a/resources/lang/en_US/help.php +++ b/resources/lang/en_US/help.php @@ -20,74 +20,66 @@ return [ 'main-content-end-text' => 'Remember that every page has a small question mark at the right top. Click it to get help about the page you\'re on.', - 'register' => 'register', - 'index' => 'The main index', - 'home' => 'home', - 'flush' => 'flush', - 'accounts-index' => 'accounts.index', - 'accounts-create' => 'accounts.create', - 'accounts-edit' => 'accounts.edit', - 'accounts-delete' => 'accounts.delete', - 'accounts-show' => 'accounts.show', - 'bills-index' => 'bills.index', - 'bills-rescan' => 'bills.rescan', - 'bills-create' => 'bills.create', - 'bills-edit' => 'bills.edit', - 'bills-delete' => 'bills.delete', - 'bills-show' => 'bills.show', - 'budgets-index' => 'budgets.index', - 'budgets-income' => 'budgets.income', - 'budgets-create' => 'budgets.create', - 'budgets-edit' => 'budgets.edit', - 'budgets-delete' => 'budgets.delete', - 'budgets-show' => 'budgets.show', - 'budgets-noBudget' => 'budgets.noBudget', - 'categories-index' => 'categories.index', - 'categories-create' => 'categories.create', - 'categories-edit' => 'categories.edit', - 'categories-delete' => 'categories.delete', - 'categories-show' => 'categories.show', - 'categories-noCategory' => 'categories.noCategory', - 'csv-index' => 'Upload and import a CSV file', - 'currency-index' => 'currency.index', - 'currency-create' => 'currency.create', - 'currency-edit' => 'currency.edit', - 'currency-delete' => 'currency.delete', - 'currency-default' => 'currency.default', - 'help-show' => 'help.show', - 'json-expense-accounts' => 'json.expense-accounts', - 'json-revenue-accounts' => 'json.revenue-accounts', - 'json-categories' => 'json.categories', - 'json-tags' => 'json.tags', - 'json-box-in' => 'json.box.in', - 'json-box-out' => 'json.box.out', - 'json-box-paid' => 'json.box.paid', - 'json-box-unpaid' => 'json.box.unpaid', - 'new-user-index' => 'new-user.index', - 'piggy-banks-index' => 'piggy-banks.index', - 'piggy-banks-addMoney' => 'piggy-banks.addMoney', - 'piggy-banks-removeMoney' => 'piggy-banks.removeMoney', - 'piggy-banks-create' => 'piggy-banks.create', - 'piggy-banks-edit' => 'piggy-banks.edit', - 'piggy-banks-delete' => 'piggy-banks.delete', - 'piggy-banks-show' => 'piggy-banks.show', - 'preferences' => 'preferences', - 'profile' => 'profile', - 'profile-change-password' => 'profile.change-password', - 'profile-delete-account' => 'profile.delete-account', - 'reports-index' => 'reports.index', - 'reports-year' => 'reports.year', - 'reports-month' => 'reports.month', - 'search' => 'search', - 'tags-index' => 'tags.index', - 'tags-create' => 'tags.create', - 'tags-show' => 'tags.show', - 'tags-edit' => 'tags.edit', - 'tags-delete' => 'tags.delete', - 'transactions-index' => 'transactions.index', - 'transactions-create' => 'transactions.create', - 'transactions-edit' => 'transactions.edit', - 'transactions-delete' => 'transactions.delete', - 'transactions-show' => 'transactions.show', - 'logout' => 'logout', + 'index' => 'index', + 'home' => 'home', + 'accounts-index' => 'accounts.index', + 'accounts-create' => 'accounts.create', + 'accounts-edit' => 'accounts.edit', + 'accounts-delete' => 'accounts.delete', + 'accounts-show' => 'accounts.show', + 'attachments-edit' => 'attachments.edit', + 'attachments-delete' => 'attachments.delete', + 'attachments-show' => 'attachments.show', + 'attachments-preview' => 'attachments.preview', + 'bills-index' => 'bills.index', + 'bills-create' => 'bills.create', + 'bills-edit' => 'bills.edit', + 'bills-delete' => 'bills.delete', + 'bills-show' => 'bills.show', + 'budgets-index' => 'budgets.index', + 'budgets-create' => 'budgets.create', + 'budgets-edit' => 'budgets.edit', + 'budgets-delete' => 'budgets.delete', + 'budgets-show' => 'budgets.show', + 'budgets-noBudget' => 'budgets.noBudget', + 'categories-index' => 'categories.index', + 'categories-create' => 'categories.create', + 'categories-edit' => 'categories.edit', + 'categories-delete' => 'categories.delete', + 'categories-show' => 'categories.show', + 'categories-show-date' => 'categories.show.date', + 'categories-noCategory' => 'categories.noCategory', + 'csv-index' => 'csv.index', + 'csv-column-roles' => 'csv.column-roles', + 'csv-map' => 'csv.map', + 'csv-download-config' => 'csv.download-config', + 'csv-download-config-page' => 'csv.download-config-page', + 'csv-process' => 'csv.process', + 'currency-index' => 'currency.index', + 'currency-create' => 'currency.create', + 'currency-edit' => 'currency.edit', + 'currency-delete' => 'currency.delete', + 'new-user-index' => 'new-user.index', + 'piggy-banks-index' => 'piggy-banks.index', + 'piggy-banks-create' => 'piggy-banks.create', + 'piggy-banks-edit' => 'piggy-banks.edit', + 'piggy-banks-delete' => 'piggy-banks.delete', + 'piggy-banks-show' => 'piggy-banks.show', + 'preferences' => 'preferences', + 'profile' => 'profile', + 'profile-change-password' => 'profile.change-password', + 'profile-delete-account' => 'profile.delete-account', + 'reports-index' => 'reports.index', + 'reports-report' => 'reports.report', + 'search' => 'search', + 'tags-index' => 'tags.index', + 'tags-create' => 'tags.create', + 'tags-show' => 'tags.show', + 'tags-edit' => 'tags.edit', + 'tags-delete' => 'tags.delete', + 'transactions-index' => 'transactions.index', + 'transactions-create' => 'transactions.create', + 'transactions-edit' => 'transactions.edit', + 'transactions-delete' => 'transactions.delete', + 'transactions-show' => 'transactions.show', ]; From 6dd12729e674680bf32a0f81812133b5d8425965 Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 24 Dec 2015 08:20:19 +0100 Subject: [PATCH 22/64] Small disclaimer in readme. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b74cd948f8..f96bf5bca4 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,8 @@ This site always runs the latest version of Firefly III. If you want to use it, You should always run Firefly III on a site with TLS enabled (https://). Please note that although some parts of the database are encrypted (transaction descriptions, names, etc.) some parts are _not_ (amounts, dates, etc). If you need -more security, you must enable transparent database encryption or a comparable technology. +more security, you must enable transparent database encryption or a comparable technology. Please remember that this +is open source software under active development, and it is in no way guaranteed to be safe or secure. ## Translations From 56ee830558d532b766338db8d5eadeb9aa658954 Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 24 Dec 2015 08:20:47 +0100 Subject: [PATCH 23/64] Moved locale information from the language to the translation files. --- config/firefly.php | 6 ++++++ resources/lang/en_US/config.php | 8 ++++++++ resources/lang/fr_FR/config.php | 8 ++++++++ resources/lang/nl_NL/config.php | 8 ++++++++ resources/lang/pt_BR/config.php | 8 ++++++++ 5 files changed, 38 insertions(+) create mode 100644 resources/lang/en_US/config.php create mode 100644 resources/lang/fr_FR/config.php create mode 100644 resources/lang/nl_NL/config.php create mode 100644 resources/lang/pt_BR/config.php diff --git a/config/firefly.php b/config/firefly.php index ebfb2e0f76..590c94bf3a 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -98,6 +98,12 @@ return [ 'Revenue account' => 'revenue', 'Cash account' => 'cash', ], + 'languages' => [ + 'en_US' => ['name_locale' => 'English', 'name_english' => 'English', 'complete' => true], + 'nl_NL' => ['name_locale' => 'Nederlands', 'name_english' => 'Dutch', 'complete' => true], + 'pt_BR' => ['name_locale' => 'Português do Brasil', 'name_english' => 'Portugese (Brazil)', 'complete' => false], + 'fr_FR' => ['name_locale' => 'Français', 'name_english' => 'French', 'complete' => false], + ], 'lang' => [ 'en_US' => 'English', 'nl_NL' => 'Nederlands', diff --git a/resources/lang/en_US/config.php b/resources/lang/en_US/config.php new file mode 100644 index 0000000000..6a4b42f53e --- /dev/null +++ b/resources/lang/en_US/config.php @@ -0,0 +1,8 @@ + 'en, English, en_US, en_US.utf8', + 'month' => '%B %Y', + 'month_and_day' => '%B %e, %Y', + +]; diff --git a/resources/lang/fr_FR/config.php b/resources/lang/fr_FR/config.php new file mode 100644 index 0000000000..6aa208d339 --- /dev/null +++ b/resources/lang/fr_FR/config.php @@ -0,0 +1,8 @@ + 'fr, French, fr_FR, fr_FR.utf8', + 'month' => '%B %Y', + 'month_and_day' => '%e %B %Y', + +]; diff --git a/resources/lang/nl_NL/config.php b/resources/lang/nl_NL/config.php new file mode 100644 index 0000000000..55f590c9a3 --- /dev/null +++ b/resources/lang/nl_NL/config.php @@ -0,0 +1,8 @@ + 'nl, Dutch, nl_NL, nl_NL.utf8', + 'month' => '%B %Y', + 'month_and_day' => '%e %B %Y', + +]; diff --git a/resources/lang/pt_BR/config.php b/resources/lang/pt_BR/config.php new file mode 100644 index 0000000000..342e06a566 --- /dev/null +++ b/resources/lang/pt_BR/config.php @@ -0,0 +1,8 @@ + 'pt_BR, pt_BR.utf8', + 'month' => '%B %Y', + 'month_and_day' => '%e de %B de %Y', + +]; From 7069e242aebe34aa3edfb1785a13b3f547145671 Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 24 Dec 2015 08:20:59 +0100 Subject: [PATCH 24/64] Removed useless entry. --- resources/lang/en_US/help.php | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/lang/en_US/help.php b/resources/lang/en_US/help.php index 535afee591..358db49713 100644 --- a/resources/lang/en_US/help.php +++ b/resources/lang/en_US/help.php @@ -52,7 +52,6 @@ return [ 'csv-index' => 'csv.index', 'csv-column-roles' => 'csv.column-roles', 'csv-map' => 'csv.map', - 'csv-download-config' => 'csv.download-config', 'csv-download-config-page' => 'csv.download-config-page', 'csv-process' => 'csv.process', 'currency-index' => 'currency.index', From a6d71988f28eeafbeb64dd6dee9793e3a6efa07d Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 24 Dec 2015 08:35:08 +0100 Subject: [PATCH 25/64] Replaced some language calls. --- .env.example | 3 ++ .../Account/ChartJsAccountChartGenerator.php | 6 +-- .../Chart/Bill/ChartJsBillChartGenerator.php | 3 +- .../Budget/ChartJsBudgetChartGenerator.php | 7 ++- .../ChartJsCategoryChartGenerator.php | 6 +-- .../ChartJsPiggyBankChartGenerator.php | 3 +- .../Report/ChartJsReportChartGenerator.php | 3 +- app/Http/Controllers/Controller.php | 4 +- .../Controllers/PreferencesController.php | 8 ++-- app/Http/Middleware/Authenticate.php | 6 ++- app/Http/breadcrumbs.php | 3 +- resources/lang/en_US/firefly.php | 1 + resources/twig/preferences/index.twig | 48 ++++++++++++------- 13 files changed, 56 insertions(+), 45 deletions(-) diff --git a/.env.example b/.env.example index 0633f79412..f8a2c2d6e0 100644 --- a/.env.example +++ b/.env.example @@ -2,6 +2,7 @@ APP_ENV=production APP_DEBUG=false APP_KEY=SomeRandomStringOf32CharsExactly + DB_CONNECTION=mysql DB_HOST=localhost DB_DATABASE=homestead @@ -20,6 +21,8 @@ EMAIL_USERNAME= EMAIL_PASSWORD= EMAIL_PRETEND=false +SHOW_INCOMPLETE_TRANSLATIONS=false + ANALYTICS_ID= RUNCLEANUP=true SITE_OWNER=mail@example.com diff --git a/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php b/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php index 280c0a2bdc..194e667633 100644 --- a/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php +++ b/app/Generator/Chart/Account/ChartJsAccountChartGenerator.php @@ -105,8 +105,7 @@ class ChartJsAccountChartGenerator implements AccountChartGenerator public function frontpage(Collection $accounts, Carbon $start, Carbon $end) { // language: - $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; - $format = Config::get('firefly.monthAndDay.' . $language); + $format = trans('config.month_and_day'); $data = [ 'count' => 0, 'labels' => [], @@ -151,8 +150,7 @@ class ChartJsAccountChartGenerator implements AccountChartGenerator public function single(Account $account, Carbon $start, Carbon $end) { // language: - $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; - $format = Config::get('firefly.monthAndDay.' . $language); + $format = trans('config.month_and_day'); $data = [ 'count' => 1, diff --git a/app/Generator/Chart/Bill/ChartJsBillChartGenerator.php b/app/Generator/Chart/Bill/ChartJsBillChartGenerator.php index 972944763f..9a319be137 100644 --- a/app/Generator/Chart/Bill/ChartJsBillChartGenerator.php +++ b/app/Generator/Chart/Bill/ChartJsBillChartGenerator.php @@ -71,8 +71,7 @@ class ChartJsBillChartGenerator implements BillChartGenerator public function single(Bill $bill, Collection $entries) { // language: - $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; - $format = Config::get('firefly.month.' . $language); + $format = trans('config.month'); $data = [ 'count' => 3, diff --git a/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php b/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php index d0952216c9..42608e027d 100644 --- a/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php +++ b/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php @@ -24,7 +24,7 @@ class ChartJsBudgetChartGenerator implements BudgetChartGenerator public function budget(Collection $entries, $dateFormat = 'month') { // language: - $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE', 'en_US'))->data; $format = Config::get('firefly.' . $dateFormat . '.' . $language); $data = [ @@ -33,7 +33,7 @@ class ChartJsBudgetChartGenerator implements BudgetChartGenerator [ 'label' => 'Amount', 'data' => [], - ] + ], ], ]; @@ -115,8 +115,7 @@ class ChartJsBudgetChartGenerator implements BudgetChartGenerator public function year(Collection $budgets, Collection $entries) { // language: - $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; - $format = Config::get('firefly.month.' . $language); + $format = trans('config.month'); $data = [ 'labels' => [], diff --git a/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php b/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php index cac74e488e..76c09790f2 100644 --- a/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php +++ b/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php @@ -101,8 +101,7 @@ class ChartJsCategoryChartGenerator implements CategoryChartGenerator { // language: - $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; - $format = Config::get('firefly.month.' . $language); + $format = trans('config.month'); $data = [ 'count' => 0, @@ -135,8 +134,7 @@ class ChartJsCategoryChartGenerator implements CategoryChartGenerator { // language: - $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; - $format = Config::get('firefly.month.' . $language); + $format = trans('config.month'); $data = [ 'count' => 0, diff --git a/app/Generator/Chart/PiggyBank/ChartJsPiggyBankChartGenerator.php b/app/Generator/Chart/PiggyBank/ChartJsPiggyBankChartGenerator.php index e1aa9fb352..3e10f5cac0 100644 --- a/app/Generator/Chart/PiggyBank/ChartJsPiggyBankChartGenerator.php +++ b/app/Generator/Chart/PiggyBank/ChartJsPiggyBankChartGenerator.php @@ -25,8 +25,7 @@ class ChartJsPiggyBankChartGenerator implements PiggyBankChartGenerator { // language: - $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; - $format = Config::get('firefly.monthAndDay.' . $language); + $format = trans('config.month_and_day'); $data = [ 'count' => 1, diff --git a/app/Generator/Chart/Report/ChartJsReportChartGenerator.php b/app/Generator/Chart/Report/ChartJsReportChartGenerator.php index 8cd93f3ccf..8cb01d82d3 100644 --- a/app/Generator/Chart/Report/ChartJsReportChartGenerator.php +++ b/app/Generator/Chart/Report/ChartJsReportChartGenerator.php @@ -22,8 +22,7 @@ class ChartJsReportChartGenerator implements ReportChartGenerator public function yearInOut(Collection $entries) { // language: - $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; - $format = Config::get('firefly.month.' . $language); + $format = trans('config.month'); $data = [ 'count' => 2, diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index dcbb6cf7be..bb9b3d2bc6 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -36,8 +36,8 @@ abstract class Controller extends BaseController if (Auth::check()) { $pref = Preferences::get('language', env('DEFAULT_LANGUAGE', 'en_US')); $lang = $pref->data; - $this->monthFormat = Config::get('firefly.month.' . $lang); - $this->monthAndDayFormat = Config::get('firefly.monthAndDay.' . $lang); + $this->monthFormat = trans('config.month'); + $this->monthAndDayFormat = trans('config.month_and_day'); View::share('monthFormat', $this->monthFormat); View::share('monthAndDayFormat', $this->monthAndDayFormat); diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index 9fd0cb95b9..c782b418e4 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -37,10 +37,12 @@ class PreferencesController extends Controller $viewRange = $viewRangePref->data; $frontPageAccounts = Preferences::get('frontPageAccounts', []); $budgetMax = Preferences::get('budgetMaximum', 1000); - $language = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; + $language = Preferences::get('language', env('DEFAULT_LANGUAGE', 'en_US'))->data; $budgetMaximum = $budgetMax->data; - return view('preferences.index', compact('budgetMaximum', 'language', 'accounts', 'frontPageAccounts', 'viewRange')); + $showIncomplete = env('SHOW_INCOMPLETE_TRANSLATIONS', 'false') == 'true'; + + return view('preferences.index', compact('budgetMaximum', 'language', 'accounts', 'frontPageAccounts', 'viewRange', 'showIncomplete')); } /** @@ -70,7 +72,7 @@ class PreferencesController extends Controller // language: $lang = Input::get('language'); - if (in_array($lang, array_keys(Config::get('firefly.lang')))) { + if (in_array($lang, array_keys(Config::get('firefly.languages')))) { Preferences::set('language', $lang); } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index b0caed5ef4..d867e9512f 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -64,9 +64,11 @@ class Authenticate $pref = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US')); App::setLocale($pref->data); Carbon::setLocale(substr($pref->data,0,2)); + $locale = explode(',', trans('config.locale')); + $locale = array_map('trim', $locale); - setlocale(LC_TIME, Config::get('firefly.locales.' . $pref->data)); - setlocale(LC_MONETARY, Config::get('firefly.locales.' . $pref->data)); + setlocale(LC_TIME, $locale); + setlocale(LC_MONETARY, $locale); return $next($request); } diff --git a/app/Http/breadcrumbs.php b/app/Http/breadcrumbs.php index 6030da8875..2e6ccb2834 100644 --- a/app/Http/breadcrumbs.php +++ b/app/Http/breadcrumbs.php @@ -354,8 +354,7 @@ Breadcrumbs::register( 'reports.report', function (Generator $breadcrumbs, Carbon $start, Carbon $end, $reportType, $accountIds) { $breadcrumbs->parent('reports.index'); - $pref = Preferences::get('language', env('DEFAULT_LANGUAGE','en_US'))->data; - $monthFormat = Config::get('firefly.monthAndDay.' . $pref); + $monthFormat = trans('config.month_and_day'); $title = trans('firefly.report_default', ['start' => $start->formatLocalized($monthFormat), 'end' => $end->formatLocalized($monthFormat)]); $breadcrumbs->push($title, route('reports.report', ['url' => 'abcde'])); diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index 493522627f..6a8cb5a3e1 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -2,6 +2,7 @@ return [ // general stuff: + 'language_incomplete' => 'This language is not yet fully translated', 'test' => 'You have selected English.', 'close' => 'Close', 'pleaseHold' => 'Please hold...', diff --git a/resources/twig/preferences/index.twig b/resources/twig/preferences/index.twig index da4aaac469..f847fa1f6d 100644 --- a/resources/twig/preferences/index.twig +++ b/resources/twig/preferences/index.twig @@ -21,9 +21,11 @@
    @@ -55,35 +57,40 @@
    @@ -97,17 +104,22 @@

    {{ 'pref_languages_help'|_ }}

    - {% for key, lang in Config.get('firefly.lang') %} -
    - -
    + {% for key, lang in Config.get('firefly.languages') %} + {% if lang.complete == true or (lang.complete == false and showIncomplete) %} +
    + +
    + {% endif %} {% endfor %}
    From 5a61a11a619432756a3c9e1e426af7e273b87789 Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 24 Dec 2015 09:45:21 +0100 Subject: [PATCH 26/64] Attempt to fix bug #133 --- app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php | 4 +--- app/Http/Controllers/Chart/BudgetController.php | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php b/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php index 42608e027d..ea808d30c6 100644 --- a/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php +++ b/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php @@ -129,10 +129,8 @@ class ChartJsBudgetChartGenerator implements BudgetChartGenerator foreach ($entries as $entry) { $array = [ 'label' => $entry[0]->formatLocalized($format), - 'data' => [], + 'data' => array_shift($entry), ]; - array_shift($entry); - $array['data'] = $entry; $data['datasets'][] = $array; } diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index daa0fdf128..85021011fd 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -290,7 +290,6 @@ class BudgetController extends Controller } // filter empty budgets: - foreach ($allBudgets as $budget) { $spent = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); if ($spent != 0) { @@ -315,7 +314,7 @@ class BudgetController extends Controller $start->endOfMonth()->addDay(); } - $data = $this->generator->year($allBudgets, $entries); + $data = $this->generator->year($budgets, $entries); $cache->store($data); return Response::json($data); From 2faae839120fee26337d3eef9fa97734730a889d Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 24 Dec 2015 09:47:44 +0100 Subject: [PATCH 27/64] Include empty budgets. #133 --- app/Http/Controllers/Chart/BudgetController.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index 85021011fd..ababff90b4 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -290,12 +290,12 @@ class BudgetController extends Controller } // filter empty budgets: - foreach ($allBudgets as $budget) { - $spent = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); - if ($spent != 0) { - $budgets->push($budget); - } - } +// foreach ($allBudgets as $budget) { +// $spent = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); +// if ($spent != 0) { +// $budgets->push($budget); +// } +// } $entries = new Collection; @@ -306,7 +306,7 @@ class BudgetController extends Controller $row = [clone $start]; // each budget, fill the row: - foreach ($budgets as $budget) { + foreach ($allBudgets as $budget) { $spent = $repository->balanceInPeriodForList($budget, $start, $month, $accounts); $row[] = $spent * -1; } @@ -314,7 +314,7 @@ class BudgetController extends Controller $start->endOfMonth()->addDay(); } - $data = $this->generator->year($budgets, $entries); + $data = $this->generator->year($allBudgets, $entries); $cache->store($data); return Response::json($data); From 8bab9e84e258d7a88edb33083b52949097ddd95a Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 24 Dec 2015 09:50:16 +0100 Subject: [PATCH 28/64] Should not have edited that code. #133 --- app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php b/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php index ea808d30c6..42608e027d 100644 --- a/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php +++ b/app/Generator/Chart/Budget/ChartJsBudgetChartGenerator.php @@ -129,8 +129,10 @@ class ChartJsBudgetChartGenerator implements BudgetChartGenerator foreach ($entries as $entry) { $array = [ 'label' => $entry[0]->formatLocalized($format), - 'data' => array_shift($entry), + 'data' => [], ]; + array_shift($entry); + $array['data'] = $entry; $data['datasets'][] = $array; } From 8cdcba3231a65ca47743e8adb3ccf2f06ef6cbbc Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 24 Dec 2015 09:50:28 +0100 Subject: [PATCH 29/64] Original fix in place. #133 --- .../Controllers/Chart/BudgetController.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index ababff90b4..e943310c69 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -289,13 +289,13 @@ class BudgetController extends Controller return Response::json($cache->get()); // @codeCoverageIgnore } - // filter empty budgets: -// foreach ($allBudgets as $budget) { -// $spent = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); -// if ($spent != 0) { -// $budgets->push($budget); -// } -// } +// filter empty budgets: + foreach ($allBudgets as $budget) { + $spent = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); + if ($spent != 0) { + $budgets->push($budget); + } + } $entries = new Collection; @@ -306,7 +306,7 @@ class BudgetController extends Controller $row = [clone $start]; // each budget, fill the row: - foreach ($allBudgets as $budget) { + foreach ($budgets as $budget) { $spent = $repository->balanceInPeriodForList($budget, $start, $month, $accounts); $row[] = $spent * -1; } @@ -314,7 +314,7 @@ class BudgetController extends Controller $start->endOfMonth()->addDay(); } - $data = $this->generator->year($allBudgets, $entries); + $data = $this->generator->year($budgets, $entries); $cache->store($data); return Response::json($data); From 55333156ac954123afa9925c632a0ae4a420e67c Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 24 Dec 2015 10:14:01 +0100 Subject: [PATCH 30/64] Better cache control for some charts. --- app/Http/Controllers/Chart/BudgetController.php | 2 ++ app/Http/Controllers/Chart/CategoryController.php | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index e943310c69..05515f27af 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -283,6 +283,8 @@ class BudgetController extends Controller $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); + $cache->addProperty($report_type); + $cache->addProperty($accounts); $cache->addProperty('budget'); $cache->addProperty('year'); if ($cache->has()) { diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index ec7dafbef5..cca2c2d5a3 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -303,7 +303,9 @@ class CategoryController extends Controller $cache = new CacheProperties; // chart properties for cache: $cache->addProperty($start); + $cache->addProperty($report_type); $cache->addProperty($end); + $cache->addProperty($accounts); $cache->addProperty('category'); $cache->addProperty('spent-in-year'); if ($cache->has()) { @@ -361,6 +363,8 @@ class CategoryController extends Controller $cache = new CacheProperties; // chart properties for cache: $cache->addProperty($start); $cache->addProperty($end); + $cache->addProperty($report_type); + $cache->addProperty($accounts); $cache->addProperty('category'); $cache->addProperty('earned-in-year'); if ($cache->has()) { From 15fd8cf486b9cbd40a0e86935ec63022cfb10dea Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 24 Dec 2015 10:27:45 +0100 Subject: [PATCH 31/64] Completed the renaming of some methods. --- app/Helpers/Report/ReportHelper.php | 6 +-- app/Http/Controllers/BudgetController.php | 2 +- .../Controllers/Chart/BudgetController.php | 12 ++--- .../Controllers/Chart/CategoryController.php | 8 +-- app/Repositories/Budget/BudgetRepository.php | 17 +------ .../Budget/BudgetRepositoryInterface.php | 15 +----- .../Category/CategoryRepository.php | 18 +------ .../Category/CategoryRepositoryInterface.php | 18 +------ .../Shared/ComponentRepository.php | 51 +------------------ 9 files changed, 22 insertions(+), 125 deletions(-) diff --git a/app/Helpers/Report/ReportHelper.php b/app/Helpers/Report/ReportHelper.php index 7f028d6a10..43349c78a1 100644 --- a/app/Helpers/Report/ReportHelper.php +++ b/app/Helpers/Report/ReportHelper.php @@ -63,7 +63,7 @@ class ReportHelper implements ReportHelperInterface $repository = app('FireflyIII\Repositories\Category\CategoryRepositoryInterface'); $set = $repository->getCategories(); foreach ($set as $category) { - $spent = $repository->balanceInPeriodForList($category, $start, $end, $accounts); + $spent = $repository->balanceInPeriod($category, $start, $end, $accounts); $category->spent = $spent; $object->addCategory($category); } @@ -222,7 +222,7 @@ class ReportHelper implements ReportHelperInterface // no repetition(s) for this budget: if ($repetitions->count() == 0) { - $spent = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); + $spent = $repository->balanceInPeriod($budget, $start, $end, $accounts); $budgetLine = new BudgetLine; $budgetLine->setBudget($budget); $budgetLine->setOverspent($spent); @@ -237,7 +237,7 @@ class ReportHelper implements ReportHelperInterface $budgetLine = new BudgetLine; $budgetLine->setBudget($budget); $budgetLine->setRepetition($repetition); - $expenses = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); + $expenses = $repository->balanceInPeriod($budget, $start, $end, $accounts); // 200 en -100 is 100, vergeleken met 0 === 1 // 200 en -200 is 0, vergeleken met 0 === 0 diff --git a/app/Http/Controllers/BudgetController.php b/app/Http/Controllers/BudgetController.php index 74876933e4..2bece914ec 100644 --- a/app/Http/Controllers/BudgetController.php +++ b/app/Http/Controllers/BudgetController.php @@ -159,7 +159,7 @@ class BudgetController extends Controller // loop the budgets: /** @var Budget $budget */ foreach ($budgets as $budget) { - $budget->spent = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); + $budget->spent = $repository->balanceInPeriod($budget, $start, $end, $accounts); $budget->currentRep = $repository->getCurrentRepetition($budget, $start, $end); if ($budget->currentRep) { $budgeted = bcadd($budgeted, $budget->currentRep->amount); diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index 05515f27af..14298452cc 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -86,7 +86,7 @@ class BudgetController extends Controller $budgeted = 0; } else { $name = $budget->name; - $sum = $repository->balanceInPeriodForList($budget, $currentStart, $currentEnd, $accounts); + $sum = $repository->balanceInPeriod($budget, $currentStart, $currentEnd, $accounts); $budgeted = $repository->getBudgetLimitRepetitions($budget, $currentStart, $currentEnd)->sum('amount'); } @@ -144,7 +144,7 @@ class BudgetController extends Controller $end->subDay(); $chartDate = clone $end; $chartDate->startOfMonth(); - $spent = $repository->balanceInPeriodForList($budget, $first, $end, $accounts) * -1; + $spent = $repository->balanceInPeriod($budget, $first, $end, $accounts) * -1; $entries->push([$chartDate, $spent]); $first = Navigation::addPeriod($first, $range, 0); } @@ -233,13 +233,13 @@ class BudgetController extends Controller foreach ($budgets as $budget) { $repetitions = $repository->getBudgetLimitRepetitions($budget, $start, $end); if ($repetitions->count() == 0) { - $expenses = $repository->balanceInPeriodForList($budget, $start, $end, $accounts) * -1; + $expenses = $repository->balanceInPeriod($budget, $start, $end, $accounts) * -1; $allEntries->push([$budget->name, 0, 0, $expenses, 0, 0]); continue; } /** @var LimitRepetition $repetition */ foreach ($repetitions as $repetition) { - $expenses = $repository->balanceInPeriodForList($budget, $repetition->startdate, $repetition->enddate, $accounts) * -1; + $expenses = $repository->balanceInPeriod($budget, $repetition->startdate, $repetition->enddate, $accounts) * -1; // $left can be less than zero. // $overspent can be more than zero ( = overspending) @@ -293,7 +293,7 @@ class BudgetController extends Controller // filter empty budgets: foreach ($allBudgets as $budget) { - $spent = $repository->balanceInPeriodForList($budget, $start, $end, $accounts); + $spent = $repository->balanceInPeriod($budget, $start, $end, $accounts); if ($spent != 0) { $budgets->push($budget); } @@ -309,7 +309,7 @@ class BudgetController extends Controller // each budget, fill the row: foreach ($budgets as $budget) { - $spent = $repository->balanceInPeriodForList($budget, $start, $month, $accounts); + $spent = $repository->balanceInPeriod($budget, $start, $month, $accounts); $row[] = $spent * -1; } $entries->push($row); diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index cca2c2d5a3..7494c85abd 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -316,7 +316,7 @@ class CategoryController extends Controller $entries = new Collection; $categories = $allCategories->filter( function (Category $category) use ($repository, $start, $end, $accounts) { - $spent = $repository->balanceInPeriodForList($category, $start, $end, $accounts); + $spent = $repository->balanceInPeriod($category, $start, $end, $accounts); if ($spent < 0) { return $category; } @@ -331,7 +331,7 @@ class CategoryController extends Controller $row = [clone $start]; // make a row: foreach ($categories as $category) { // each budget, fill the row - $spent = $repository->balanceInPeriodForList($category, $start, $month, $accounts); + $spent = $repository->balanceInPeriod($category, $start, $month, $accounts); if ($spent < 0) { $row[] = $spent * -1; } else { @@ -375,7 +375,7 @@ class CategoryController extends Controller $allEntries = new Collection; $categories = $allCategories->filter( function (Category $category) use ($repository, $start, $end, $accounts) { - $spent = $repository->balanceInPeriodForList($category, $start, $end, $accounts); + $spent = $repository->balanceInPeriod($category, $start, $end, $accounts); if ($spent > 0) { return $category; } @@ -390,7 +390,7 @@ class CategoryController extends Controller $row = [clone $start]; // make a row: foreach ($categories as $category) { // each budget, fill the row - $spent = $repository->balanceInPeriodForList($category, $start, $month, $accounts); + $spent = $repository->balanceInPeriod($category, $start, $month, $accounts); if ($spent > 0) { $row[] = $spent; } else { diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index 49280c742f..0e0b9d1623 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -320,22 +320,9 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn * * @return string */ - public function balanceInPeriodForList(Budget $budget, Carbon $start, Carbon $end, Collection $accounts) + public function balanceInPeriod(Budget $budget, Carbon $start, Carbon $end, Collection $accounts) { - return $this->commonBalanceInPeriodForList($budget, $start, $end, $accounts); - } - - /** - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * @param bool $shared - * - * @return string - */ - public function balanceInPeriod(Budget $budget, Carbon $start, Carbon $end, $shared = true) - { - return $this->commonBalanceInPeriod($budget, $start, $end, $shared); + return $this->commonBalanceInPeriod($budget, $start, $end, $accounts); } /** diff --git a/app/Repositories/Budget/BudgetRepositoryInterface.php b/app/Repositories/Budget/BudgetRepositoryInterface.php index 9594f2d2bc..ad298b47a2 100644 --- a/app/Repositories/Budget/BudgetRepositoryInterface.php +++ b/app/Repositories/Budget/BudgetRepositoryInterface.php @@ -126,19 +126,6 @@ interface BudgetRepositoryInterface */ public function getWithoutBudgetSum(Carbon $start, Carbon $end); - /** - * - * Same as ::spentInPeriod but corrects journals for their amount (tags). - * - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * @param boolean $shared - * - * @return string - */ - public function balanceInPeriod(Budget $budget, Carbon $start, Carbon $end, $shared = true); - /** * * Same as ::spentInPeriod but corrects journals for a set of accounts @@ -150,7 +137,7 @@ interface BudgetRepositoryInterface * * @return string */ - public function balanceInPeriodForList(Budget $budget, Carbon $start, Carbon $end, Collection $accounts); + public function balanceInPeriod(Budget $budget, Carbon $start, Carbon $end, Collection $accounts); /** * @param array $data diff --git a/app/Repositories/Category/CategoryRepository.php b/app/Repositories/Category/CategoryRepository.php index aae38137fe..897a246cdf 100644 --- a/app/Repositories/Category/CategoryRepository.php +++ b/app/Repositories/Category/CategoryRepository.php @@ -242,20 +242,6 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito ->get(['transaction_journals.*']); } - /** - * @param Category $category - * @param Carbon $start - * @param Carbon $end - * - * @param bool $shared - * - * @return string - */ - public function balanceInPeriod(Category $category, Carbon $start, Carbon $end, $shared = false) - { - return $this->commonBalanceInPeriod($category, $start, $end, $shared); - } - /** * @param Category $category * @param Carbon $start @@ -264,9 +250,9 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito * * @return string */ - public function balanceInPeriodForList(Category $category, Carbon $start, Carbon $end, Collection $accounts) + public function balanceInPeriod(Category $category, Carbon $start, Carbon $end, Collection $accounts) { - return $this->commonBalanceInPeriodForList($category, $start, $end, $accounts); + return $this->commonBalanceInPeriod($category, $start, $end, $accounts); } /** diff --git a/app/Repositories/Category/CategoryRepositoryInterface.php b/app/Repositories/Category/CategoryRepositoryInterface.php index d54cdb5f55..8f269bdab9 100644 --- a/app/Repositories/Category/CategoryRepositoryInterface.php +++ b/app/Repositories/Category/CategoryRepositoryInterface.php @@ -147,21 +147,7 @@ interface CategoryRepositoryInterface public function getWithoutCategory(Carbon $start, Carbon $end); /** - * Corrected for tags. - * - * @param Category $category - * @param \Carbon\Carbon $start - * @param \Carbon\Carbon $end - * - * @param bool $shared - * - * @return string - */ - public function balanceInPeriod(Category $category, Carbon $start, Carbon $end, $shared = false); - - - /** - * Corrected for tags. + * Corrected for tags and list of accounts. * * @param Category $category * @param \Carbon\Carbon $start @@ -170,7 +156,7 @@ interface CategoryRepositoryInterface * * @return string */ - public function balanceInPeriodForList(Category $category, Carbon $start, Carbon $end, Collection $accounts); + public function balanceInPeriod(Category $category, Carbon $start, Carbon $end, Collection $accounts); /** * @param Category $category diff --git a/app/Repositories/Shared/ComponentRepository.php b/app/Repositories/Shared/ComponentRepository.php index 7f91fb8c13..8a198fe14a 100644 --- a/app/Repositories/Shared/ComponentRepository.php +++ b/app/Repositories/Shared/ComponentRepository.php @@ -17,55 +17,6 @@ use Illuminate\Support\Collection; class ComponentRepository { - - /** - * @param $object - * @param Carbon $start - * @param Carbon $end - * - * @param bool $shared - * - * @return string - */ - protected function commonBalanceInPeriod($object, Carbon $start, Carbon $end, $shared = false) - { - $cache = new CacheProperties; // we must cache this. - $cache->addProperty($object->id); - $cache->addProperty(get_class($object)); - $cache->addProperty($start); - $cache->addProperty($end); - $cache->addProperty($shared); - $cache->addProperty('balanceInPeriod'); - - if ($cache->has()) { - return $cache->get(); // @codeCoverageIgnore - } - - if ($shared === true) { // shared is true: always ignore transfers between accounts! - $sum = $object->transactionjournals() - ->transactionTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::OPENING_BALANCE]) - ->before($end) - ->after($start) - ->get(['transaction_journals.*'])->sum('amount'); - } else { - // do something else, SEE budgets. - // get all journals in this month where the asset account is NOT shared. - $sum = $object->transactionjournals()->before($end)->after($start) - ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') - ->transactionTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::OPENING_BALANCE]) - ->leftJoin( - 'account_meta', function (JoinClause $join) { - $join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole'); - } - )->where('account_meta.data', '!=', '"sharedAsset"')->get(['transaction_journals.*'])->sum('amount'); - } - - $cache->store($sum); - - return $sum; - } - /** * @param $object * @param Carbon $start @@ -74,7 +25,7 @@ class ComponentRepository * * @return string */ - protected function commonBalanceInPeriodForList($object, Carbon $start, Carbon $end, Collection $accounts) + protected function commonBalanceInPeriod($object, Carbon $start, Carbon $end, Collection $accounts) { $cache = new CacheProperties; // we must cache this. $cache->addProperty($object->id); From 75a478ad54478c759dc92adc460a92c7684841a9 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 07:31:29 +0100 Subject: [PATCH 32/64] New chart, earned in period. --- .../Chart/Category/CategoryChartGenerator.php | 8 +++++ .../ChartJsCategoryChartGenerator.php | 33 +++++++++++++++++++ app/Http/routes.php | 2 +- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/app/Generator/Chart/Category/CategoryChartGenerator.php b/app/Generator/Chart/Category/CategoryChartGenerator.php index de6891b556..f249b320bb 100644 --- a/app/Generator/Chart/Category/CategoryChartGenerator.php +++ b/app/Generator/Chart/Category/CategoryChartGenerator.php @@ -27,6 +27,14 @@ interface CategoryChartGenerator */ public function earnedInYear(Collection $categories, Collection $entries); + /** + * @param Collection $categories + * @param Collection $entries + * + * @return array + */ + public function earnedInPeriod(Collection $categories, Collection $entries); + /** * @param Collection $entries * diff --git a/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php b/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php index 76c09790f2..88df36fd69 100644 --- a/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php +++ b/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php @@ -157,6 +157,39 @@ class ChartJsCategoryChartGenerator implements CategoryChartGenerator } + /** + * @param Collection $categories + * @param Collection $entries + * + * @return array + */ + public function earnedInPeriod(Collection $categories, Collection $entries) + { + + // language: + $format = trans('config.month'); + + $data = [ + 'count' => 0, + 'labels' => [], + 'datasets' => [], + ]; + + foreach ($categories as $category) { + $data['labels'][] = $category->name; + } + + foreach ($entries as $entry) { + $date = $entry[0]->formatLocalized($format); + array_shift($entry); + $data['count']++; + $data['datasets'][] = ['label' => $date, 'data' => $entry]; + } + + return $data; + + } + /** * @param Collection $entries * diff --git a/app/Http/routes.php b/app/Http/routes.php index 4ff527f2f8..2f580fe108 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -414,8 +414,8 @@ Route::group( Route::get('/chart/category/frontpage', ['uses' => 'Chart\CategoryController@frontpage']); // these three charts are for reports: + Route::get('/chart/category/earned-in-period/{report_type}/{start_date}/{end_date}/{accountList}', ['uses' => 'Chart\CategoryController@earnedInPeriod']); Route::get('/chart/category/spent-in-year/{report_type}/{start_date}/{end_date}/{accountList}', ['uses' => 'Chart\CategoryController@spentInYear']); - Route::get('/chart/category/earned-in-year/{report_type}/{start_date}/{end_date}/{accountList}', ['uses' => 'Chart\CategoryController@earnedInYear']); Route::get( '/chart/category/multi-year/{report_type}/{start_date}/{end_date}/{accountList}/{categoryList}', ['uses' => 'Chart\CategoryController@multiYear'] ); From c07591ff5cf7b76ddcb598c567b8f818f0b564fb Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 07:31:43 +0100 Subject: [PATCH 33/64] New method, earnedForAccounts --- .../Category/CategoryRepository.php | 50 +++++++++++++++++++ .../Category/CategoryRepositoryInterface.php | 13 +++++ 2 files changed, 63 insertions(+) diff --git a/app/Repositories/Category/CategoryRepository.php b/app/Repositories/Category/CategoryRepository.php index 897a246cdf..3c4a8c5569 100644 --- a/app/Repositories/Category/CategoryRepository.php +++ b/app/Repositories/Category/CategoryRepository.php @@ -5,11 +5,13 @@ namespace FireflyIII\Repositories\Category; use Auth; use Carbon\Carbon; use Crypt; +use DB; use FireflyIII\Models\Category; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Shared\ComponentRepository; use FireflyIII\Support\CacheProperties; +use Illuminate\Database\Query\JoinClause; use Illuminate\Support\Collection; /** @@ -499,4 +501,52 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito return $sum; } + + /** + * Returns a collection of Categories appended with the amount of money that has been earned + * in these categories, based on the $accounts involved, in period X. + * The amount earned in category X in period X is saved in field "earned". + * + * @param $accounts + * @param $start + * @param $end + * + * @return Collection + */ + public function earnedForAccounts(Collection $accounts, Carbon $start, Carbon $end) + { + $accountIds = []; + foreach ($accounts as $account) { + $accountIds[] = $account->id; + } + + + $collection = Auth::user()->categories() + ->leftJoin('category_transaction_journal', 'category_transaction_journal.category_id', '=', 'categories.id') + ->leftJoin('transaction_journals', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') + ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') + ->leftJoin( + 'transactions AS t_src', function (JoinClause $join) { + $join->on('t_src.transaction_journal_id', '=', 'transaction_journals.id')->where('t_src.amount', '<', 0); + } + ) + ->leftJoin( + 'transactions AS t_dest', function (JoinClause $join) { + $join->on('t_dest.transaction_journal_id', '=', 'transaction_journals.id')->where('t_dest.amount', '>', 0); + } + ) + ->whereIn('t_dest.account_id', $accountIds)// to these accounts (earned) + ->whereNotIn('t_src.account_id', $accountIds)//-- but not from these accounts + ->whereIn( + 'transaction_types.type', [TransactionType::DEPOSIT, TransactionType::TRANSFER, TransactionType::OPENING_BALANCE] + )// earned from these things. + ->where('transaction_journals.date', '>=', $start->format('Y-m-d')) + ->where('transaction_journals.date', '<=', $end->format('Y-m-d')) + ->groupBy('categories.id') + ->get(['categories.*', DB::Raw('SUM(`t_dest`.`amount`) AS `earned`')]); + + return $collection; + + + } } diff --git a/app/Repositories/Category/CategoryRepositoryInterface.php b/app/Repositories/Category/CategoryRepositoryInterface.php index 8f269bdab9..ff0a072a5c 100644 --- a/app/Repositories/Category/CategoryRepositoryInterface.php +++ b/app/Repositories/Category/CategoryRepositoryInterface.php @@ -34,6 +34,19 @@ interface CategoryRepositoryInterface */ public function destroy(Category $category); + /** + * Returns a collection of Categories appended with the amount of money that has been earned + * in these categories, based on the $accounts involved, in period X. + * The amount earned in category X in period X is saved in field "earned". + * + * @param $accounts + * @param $start + * @param $end + * + * @return Collection + */ + public function earnedForAccounts(Collection $accounts, Carbon $start, Carbon $end); + /** * @return Collection */ From e16269daa820b82709e33e6fb4db30c99c1551ba Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 07:31:54 +0100 Subject: [PATCH 34/64] Collect data for new chart. --- .../Controllers/Chart/CategoryController.php | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index 7494c85abd..e36a93b975 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -347,6 +347,105 @@ class CategoryController extends Controller return Response::json($data); } + /** + * Returns a chart of what has been in this period in each category + * grouped by month. + * + * @param CategoryRepositoryInterface $repository + * @param $report_type + * @param Carbon $start + * @param Carbon $end + * @param Collection $accounts + * + * @return \Illuminate\Http\JsonResponse + */ + public function earnedInPeriod(CategoryRepositoryInterface $repository, $report_type, Carbon $start, Carbon $end, Collection $accounts) + { + $original = clone $start; + $cache = new CacheProperties; // chart properties for cache: + $cache->addProperty($start); + $cache->addProperty($end); + $cache->addProperty($report_type); + $cache->addProperty($accounts); + $cache->addProperty('category'); + $cache->addProperty('earned-in-period'); + if ($cache->has()) { + //return Response::json($cache->get()); // @codeCoverageIgnore + } + $categories = new Collection; + $sets = new Collection; + $entries = new Collection; + + // run a very special query each month: + $start = clone $original; + while ($start < $end) { + $currentEnd = clone $start; + $currentStart = clone $start; + $currentStart->startOfMonth(); + $currentEnd->endOfMonth(); + // get a list of categories, and what the user has earned for that category + // (if the user has earned anything) + $set = $repository->earnedForAccounts($accounts, $currentStart, $currentEnd); + $categories = $categories->merge($set); + // save the set combined with the data that is in it: + // for example: + // [december 2015, salary:1000, bonus:200] + $sets->push([$currentStart, $set]); + $start->addMonth(); + } + // filter categories into a single bunch. Useful later on. + // $categories contains all the categories the user has earned money + // in in this period. + $categories = $categories->unique('id'); + + // start looping the time again, this time processing the + // data for each month. + $start = clone $original; + while ($start < $end) { + $currentEnd = clone $start; + $currentStart = clone $start; + $currentStart->startOfMonth(); + $currentEnd->endOfMonth(); + + // in $sets we have saved all the sets of data for each month + // so now we need to retrieve the corrent one. + // match is on date of course. + $currentSet = $sets->first( + function ($key, $value) use ($currentStart) { + // set for this date. + return ($value[0] == $currentStart); + } + ); + // create a row used later on. + $row = [clone $currentStart]; + + // loop all categories: + /** @var Category $category */ + foreach ($categories as $category) { + // if entry is not null, we've earned money in this period for this category. + $entry = $currentSet[1]->first( + function ($key, $value) use ($category) { + return $value->id == $category->id; + } + ); + // save amount + if (!is_null($entry)) { + $row[] = $entry->earned; + } else { + $row[] = 0; + } + } + $entries->push($row); + $start->addMonth(); + } + + $data = $this->generator->earnedInPeriod($categories, $entries); + $cache->store($data); + + return $data; + + } + /** * This chart will only show income. * From 657116d361bfe1d68aea817bec732e752af6bfab Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 07:32:03 +0100 Subject: [PATCH 35/64] Display new chart. --- public/js/reports/default/year.js | 2 +- resources/twig/reports/default/year.twig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/reports/default/year.js b/public/js/reports/default/year.js index 026b30ba63..44461e38ec 100644 --- a/public/js/reports/default/year.js +++ b/public/js/reports/default/year.js @@ -19,7 +19,7 @@ function drawChart() { columnChart('chart/report/in-out-sum/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'income-expenses-sum-chart'); stackedColumnChart('chart/budget/year/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'budgets'); stackedColumnChart('chart/category/spent-in-year/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'categories-spent-in-year'); - stackedColumnChart('chart/category/earned-in-year/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'categories-earned-in-year'); + stackedColumnChart('chart/category/earned-in-period/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'categories-earned-in-period'); } diff --git a/resources/twig/reports/default/year.twig b/resources/twig/reports/default/year.twig index 34d7d31efc..7754eeee1b 100644 --- a/resources/twig/reports/default/year.twig +++ b/resources/twig/reports/default/year.twig @@ -71,7 +71,7 @@
    {% endif %} {% if Config.get('firefly.chart') == 'chartjs' %} - + {% endif %}
    From edde18aeef52d26bd0a17264ea8b202d061c8466 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 07:32:56 +0100 Subject: [PATCH 36/64] Remove old chart. --- .../Chart/Category/CategoryChartGenerator.php | 8 --- .../ChartJsCategoryChartGenerator.php | 39 +------------ .../Controllers/Chart/CategoryController.php | 58 ------------------- 3 files changed, 2 insertions(+), 103 deletions(-) diff --git a/app/Generator/Chart/Category/CategoryChartGenerator.php b/app/Generator/Chart/Category/CategoryChartGenerator.php index f249b320bb..f595fcf541 100644 --- a/app/Generator/Chart/Category/CategoryChartGenerator.php +++ b/app/Generator/Chart/Category/CategoryChartGenerator.php @@ -19,14 +19,6 @@ interface CategoryChartGenerator */ public function all(Collection $entries); - /** - * @param Collection $categories - * @param Collection $entries - * - * @return array - */ - public function earnedInYear(Collection $categories, Collection $entries); - /** * @param Collection $categories * @param Collection $entries diff --git a/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php b/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php index 88df36fd69..cf3a8a1dd9 100644 --- a/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php +++ b/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php @@ -2,9 +2,7 @@ namespace FireflyIII\Generator\Chart\Category; -use Config; use Illuminate\Support\Collection; -use Preferences; /** @@ -101,40 +99,7 @@ class ChartJsCategoryChartGenerator implements CategoryChartGenerator { // language: - $format = trans('config.month'); - - $data = [ - 'count' => 0, - 'labels' => [], - 'datasets' => [], - ]; - - foreach ($categories as $category) { - $data['labels'][] = $category->name; - } - - foreach ($entries as $entry) { - $date = $entry[0]->formatLocalized($format); - array_shift($entry); - $data['count']++; - $data['datasets'][] = ['label' => $date, 'data' => $entry]; - } - - return $data; - - } - - /** - * @param Collection $categories - * @param Collection $entries - * - * @return array - */ - public function earnedInYear(Collection $categories, Collection $entries) - { - - // language: - $format = trans('config.month'); + $format = trans('config.month'); $data = [ 'count' => 0, @@ -167,7 +132,7 @@ class ChartJsCategoryChartGenerator implements CategoryChartGenerator { // language: - $format = trans('config.month'); + $format = trans('config.month'); $data = [ 'count' => 0, diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index e36a93b975..5aa8db7ae0 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -446,62 +446,4 @@ class CategoryController extends Controller } - /** - * This chart will only show income. - * - * @param CategoryRepositoryInterface $repository - * @param $report_type - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return \Illuminate\Http\JsonResponse - */ - public function earnedInYear(CategoryRepositoryInterface $repository, $report_type, Carbon $start, Carbon $end, Collection $accounts) - { - $cache = new CacheProperties; // chart properties for cache: - $cache->addProperty($start); - $cache->addProperty($end); - $cache->addProperty($report_type); - $cache->addProperty($accounts); - $cache->addProperty('category'); - $cache->addProperty('earned-in-year'); - if ($cache->has()) { - return Response::json($cache->get()); // @codeCoverageIgnore - } - - $allCategories = $repository->getCategories(); - $allEntries = new Collection; - $categories = $allCategories->filter( - function (Category $category) use ($repository, $start, $end, $accounts) { - $spent = $repository->balanceInPeriod($category, $start, $end, $accounts); - if ($spent > 0) { - return $category; - } - - return null; - } - ); - - while ($start < $end) { - $month = clone $start; // month is the current end of the period - $month->endOfMonth(); - $row = [clone $start]; // make a row: - - foreach ($categories as $category) { // each budget, fill the row - $spent = $repository->balanceInPeriod($category, $start, $month, $accounts); - if ($spent > 0) { - $row[] = $spent; - } else { - $row[] = 0; - } - } - $allEntries->push($row); - $start->addMonth(); - } - $data = $this->generator->earnedInYear($categories, $allEntries); - $cache->store($data); - - return Response::json($data); - } } From 63969f5a3375a19e777caf1971c05adfdf17595e Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 07:42:00 +0100 Subject: [PATCH 37/64] Same routine but for money spent on accounts. --- .../ChartJsCategoryChartGenerator.php | 33 +++++++ .../Controllers/Chart/CategoryController.php | 94 ++++++++++++++++++- app/Http/routes.php | 2 +- .../Category/CategoryRepository.php | 48 +++++++++- .../Category/CategoryRepositoryInterface.php | 13 +++ public/js/reports/default/year.js | 2 +- resources/twig/reports/default/year.twig | 14 +-- 7 files changed, 190 insertions(+), 16 deletions(-) diff --git a/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php b/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php index cf3a8a1dd9..5b79fdbf47 100644 --- a/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php +++ b/app/Generator/Chart/Category/ChartJsCategoryChartGenerator.php @@ -155,6 +155,39 @@ class ChartJsCategoryChartGenerator implements CategoryChartGenerator } + /** + * @param Collection $categories + * @param Collection $entries + * + * @return array + */ + public function spentInPeriod(Collection $categories, Collection $entries) + { + + // language: + $format = trans('config.month'); + + $data = [ + 'count' => 0, + 'labels' => [], + 'datasets' => [], + ]; + + foreach ($categories as $category) { + $data['labels'][] = $category->name; + } + + foreach ($entries as $entry) { + $date = $entry[0]->formatLocalized($format); + array_shift($entry); + $data['count']++; + $data['datasets'][] = ['label' => $date, 'data' => $entry]; + } + + return $data; + + } + /** * @param Collection $entries * diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index 5aa8db7ae0..7f563c7403 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -348,7 +348,7 @@ class CategoryController extends Controller } /** - * Returns a chart of what has been in this period in each category + * Returns a chart of what has been earned in this period in each category * grouped by month. * * @param CategoryRepositoryInterface $repository @@ -397,6 +397,11 @@ class CategoryController extends Controller // $categories contains all the categories the user has earned money // in in this period. $categories = $categories->unique('id'); + $categories = $categories->sortBy( + function (Category $category) { + return $category->name; + } + ); // start looping the time again, this time processing the // data for each month. @@ -446,4 +451,91 @@ class CategoryController extends Controller } + /** + * Returns a chart of what has been spent in this period in each category + * grouped by month. + * + * @param CategoryRepositoryInterface $repository + * @param $report_type + * @param Carbon $start + * @param Carbon $end + * @param Collection $accounts + * + * @return \Illuminate\Http\JsonResponse + */ + public function spentInPeriod(CategoryRepositoryInterface $repository, $report_type, Carbon $start, Carbon $end, Collection $accounts) + { + $original = clone $start; + $cache = new CacheProperties; // chart properties for cache: + $cache->addProperty($start); + $cache->addProperty($end); + $cache->addProperty($report_type); + $cache->addProperty($accounts); + $cache->addProperty('category'); + $cache->addProperty('spent-in-period'); + if ($cache->has()) { + //return Response::json($cache->get()); // @codeCoverageIgnore + } + $categories = new Collection; + $sets = new Collection; + $entries = new Collection; + + // run a very special query each month: + $start = clone $original; + while ($start < $end) { + $currentEnd = clone $start; + $currentStart = clone $start; + $currentStart->startOfMonth(); + $currentEnd->endOfMonth(); + $set = $repository->spentForAccounts($accounts, $currentStart, $currentEnd); + $categories = $categories->merge($set); + $sets->push([$currentStart, $set]); + $start->addMonth(); + } + $categories = $categories->unique('id'); + $categories = $categories->sortBy( + function (Category $category) { + return $category->name; + } + ); + + $start = clone $original; + while ($start < $end) { + $currentEnd = clone $start; + $currentStart = clone $start; + $currentStart->startOfMonth(); + $currentEnd->endOfMonth(); + $currentSet = $sets->first( + function ($key, $value) use ($currentStart) { + // set for this date. + return ($value[0] == $currentStart); + } + ); + $row = [clone $currentStart]; + + /** @var Category $category */ + foreach ($categories as $category) { + /** @var Category $entry */ + $entry = $currentSet[1]->first( + function ($key, $value) use ($category) { + return $value->id == $category->id; + } + ); + if (!is_null($entry)) { + $row[] = $entry->spent; + } else { + $row[] = 0; + } + } + $entries->push($row); + $start->addMonth(); + } + + $data = $this->generator->spentInPeriod($categories, $entries); + $cache->store($data); + + return $data; + + } + } diff --git a/app/Http/routes.php b/app/Http/routes.php index 2f580fe108..fd6ac41c4c 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -415,7 +415,7 @@ Route::group( // these three charts are for reports: Route::get('/chart/category/earned-in-period/{report_type}/{start_date}/{end_date}/{accountList}', ['uses' => 'Chart\CategoryController@earnedInPeriod']); - Route::get('/chart/category/spent-in-year/{report_type}/{start_date}/{end_date}/{accountList}', ['uses' => 'Chart\CategoryController@spentInYear']); + Route::get('/chart/category/spent-in-period/{report_type}/{start_date}/{end_date}/{accountList}', ['uses' => 'Chart\CategoryController@spentInPeriod']); Route::get( '/chart/category/multi-year/{report_type}/{start_date}/{end_date}/{accountList}/{categoryList}', ['uses' => 'Chart\CategoryController@multiYear'] ); diff --git a/app/Repositories/Category/CategoryRepository.php b/app/Repositories/Category/CategoryRepository.php index 3c4a8c5569..55554da840 100644 --- a/app/Repositories/Category/CategoryRepository.php +++ b/app/Repositories/Category/CategoryRepository.php @@ -542,11 +542,57 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito )// earned from these things. ->where('transaction_journals.date', '>=', $start->format('Y-m-d')) ->where('transaction_journals.date', '<=', $end->format('Y-m-d')) - ->groupBy('categories.id') + ->groupBy('categories.id') ->get(['categories.*', DB::Raw('SUM(`t_dest`.`amount`) AS `earned`')]); return $collection; } + + /** + * Returns a collection of Categories appended with the amount of money that has been spent + * in these categories, based on the $accounts involved, in period X. + * The amount earned in category X in period X is saved in field "spent". + * + * @param $accounts + * @param $start + * @param $end + * + * @return Collection + */ + public function spentForAccounts(Collection $accounts, Carbon $start, Carbon $end) + { + $accountIds = []; + foreach ($accounts as $account) { + $accountIds[] = $account->id; + } + + + $collection = Auth::user()->categories() + ->leftJoin('category_transaction_journal', 'category_transaction_journal.category_id', '=', 'categories.id') + ->leftJoin('transaction_journals', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') + ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') + ->leftJoin( + 'transactions AS t_src', function (JoinClause $join) { + $join->on('t_src.transaction_journal_id', '=', 'transaction_journals.id')->where('t_src.amount', '<', 0); + } + ) + ->leftJoin( + 'transactions AS t_dest', function (JoinClause $join) { + $join->on('t_dest.transaction_journal_id', '=', 'transaction_journals.id')->where('t_dest.amount', '>', 0); + } + ) + ->whereIn('t_src.account_id', $accountIds)// from these accounts (spent) + ->whereNotIn('t_dest.account_id', $accountIds)//-- but not from these accounts (spent internally) + ->whereIn( + 'transaction_types.type', [TransactionType::WITHDRAWAL, TransactionType::TRANSFER, TransactionType::OPENING_BALANCE] + )// spent on these things. + ->where('transaction_journals.date', '>=', $start->format('Y-m-d')) + ->where('transaction_journals.date', '<=', $end->format('Y-m-d')) + ->groupBy('categories.id') + ->get(['categories.*', DB::Raw('SUM(`t_dest`.`amount`) AS `spent`')]); + + return $collection; + } } diff --git a/app/Repositories/Category/CategoryRepositoryInterface.php b/app/Repositories/Category/CategoryRepositoryInterface.php index ff0a072a5c..9a2116c8d7 100644 --- a/app/Repositories/Category/CategoryRepositoryInterface.php +++ b/app/Repositories/Category/CategoryRepositoryInterface.php @@ -47,6 +47,19 @@ interface CategoryRepositoryInterface */ public function earnedForAccounts(Collection $accounts, Carbon $start, Carbon $end); + /** + * Returns a collection of Categories appended with the amount of money that has been spent + * in these categories, based on the $accounts involved, in period X. + * The amount earned in category X in period X is saved in field "spent". + * + * @param $accounts + * @param $start + * @param $end + * + * @return Collection + */ + public function spentForAccounts(Collection $accounts, Carbon $start, Carbon $end); + /** * @return Collection */ diff --git a/public/js/reports/default/year.js b/public/js/reports/default/year.js index 44461e38ec..12fbfe7e13 100644 --- a/public/js/reports/default/year.js +++ b/public/js/reports/default/year.js @@ -18,7 +18,7 @@ function drawChart() { columnChart('chart/report/in-out/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'income-expenses-chart'); columnChart('chart/report/in-out-sum/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'income-expenses-sum-chart'); stackedColumnChart('chart/budget/year/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'budgets'); - stackedColumnChart('chart/category/spent-in-year/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'categories-spent-in-year'); + stackedColumnChart('chart/category/spent-in-period/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'categories-spent-in-period'); stackedColumnChart('chart/category/earned-in-period/' + reportType + '/' + startDate + '/' + endDate + '/' + accountIds, 'categories-earned-in-period'); } diff --git a/resources/twig/reports/default/year.twig b/resources/twig/reports/default/year.twig index 7754eeee1b..593fc4f2bf 100644 --- a/resources/twig/reports/default/year.twig +++ b/resources/twig/reports/default/year.twig @@ -49,12 +49,7 @@

    {{ 'categories_spent_in_year'|_ }}

    - {% if Config.get('firefly.chart') == 'google' %} -
    - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
    @@ -67,12 +62,7 @@

    {{ 'categories_earned_in_year'|_ }}

    - {% if Config.get('firefly.chart') == 'google' %} -
    - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
    From 33d9148029f6ecc2d67b73191cb0d0b2c526481f Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 07:43:34 +0100 Subject: [PATCH 38/64] Make sure charts are cached. --- app/Http/Controllers/Chart/CategoryController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index 7f563c7403..c12be90a40 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -370,7 +370,7 @@ class CategoryController extends Controller $cache->addProperty('category'); $cache->addProperty('earned-in-period'); if ($cache->has()) { - //return Response::json($cache->get()); // @codeCoverageIgnore + return Response::json($cache->get()); // @codeCoverageIgnore } $categories = new Collection; $sets = new Collection; @@ -474,7 +474,7 @@ class CategoryController extends Controller $cache->addProperty('category'); $cache->addProperty('spent-in-period'); if ($cache->has()) { - //return Response::json($cache->get()); // @codeCoverageIgnore + return Response::json($cache->get()); // @codeCoverageIgnore } $categories = new Collection; $sets = new Collection; From c61fb7a598a4935bdd9dbd0b21d64dda693f9158 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 07:52:56 +0100 Subject: [PATCH 39/64] Marked some unused stuff as deprecated. --- .../Account/AccountRepository.php | 1 + .../Account/AccountRepositoryInterface.php | 1 + app/Repositories/Budget/BudgetRepository.php | 3 + .../Budget/BudgetRepositoryInterface.php | 2 + .../Category/CategoryRepository.php | 1 + .../Category/CategoryRepositoryInterface.php | 1 + app/Repositories/PiggyBank/PiggybankPart.php | 149 ------------------ app/Repositories/Tag/TagRepository.php | 1 + .../Tag/TagRepositoryInterface.php | 1 + 9 files changed, 11 insertions(+), 149 deletions(-) delete mode 100644 app/Repositories/PiggyBank/PiggybankPart.php diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index 4376e02ff9..1dfa4d133c 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -646,6 +646,7 @@ class AccountRepository implements AccountRepositoryInterface } /** + * @deprecated * @param $accountId * * @return Account diff --git a/app/Repositories/Account/AccountRepositoryInterface.php b/app/Repositories/Account/AccountRepositoryInterface.php index a3bdd05ec7..8bbcf7c6b2 100644 --- a/app/Repositories/Account/AccountRepositoryInterface.php +++ b/app/Repositories/Account/AccountRepositoryInterface.php @@ -26,6 +26,7 @@ interface AccountRepositoryInterface /** * @param $accountId + * @deprecated * * @return Account */ diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index 0e0b9d1623..2338cc8436 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -229,6 +229,8 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn } /** + * @deprecated + * * @param Budget $budget * * @return Carbon @@ -244,6 +246,7 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn } /** + * @deprecated * @param Budget $budget * @param Carbon $date * diff --git a/app/Repositories/Budget/BudgetRepositoryInterface.php b/app/Repositories/Budget/BudgetRepositoryInterface.php index ad298b47a2..2e886960bf 100644 --- a/app/Repositories/Budget/BudgetRepositoryInterface.php +++ b/app/Repositories/Budget/BudgetRepositoryInterface.php @@ -96,6 +96,7 @@ interface BudgetRepositoryInterface public function getJournals(Budget $budget, LimitRepetition $repetition = null, $take = 50); /** + * @deprecated * @param Budget $budget * * @return Carbon @@ -103,6 +104,7 @@ interface BudgetRepositoryInterface public function getLastBudgetLimitDate(Budget $budget); /** + * @deprecated * @param Budget $budget * @param Carbon $date * diff --git a/app/Repositories/Category/CategoryRepository.php b/app/Repositories/Category/CategoryRepository.php index 55554da840..b966737d1f 100644 --- a/app/Repositories/Category/CategoryRepository.php +++ b/app/Repositories/Category/CategoryRepository.php @@ -304,6 +304,7 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito } /** + * @deprecated * This method returns the sum of the journals in the category, optionally * limited by a start or end date. * diff --git a/app/Repositories/Category/CategoryRepositoryInterface.php b/app/Repositories/Category/CategoryRepositoryInterface.php index 9a2116c8d7..60cd43a755 100644 --- a/app/Repositories/Category/CategoryRepositoryInterface.php +++ b/app/Repositories/Category/CategoryRepositoryInterface.php @@ -146,6 +146,7 @@ interface CategoryRepositoryInterface public function getJournalsInRange(Category $category, $page, Carbon $start, Carbon $end); /** + * @deprecated * This method returns the sum of the journals in the category, optionally * limited by a start or end date. * diff --git a/app/Repositories/PiggyBank/PiggybankPart.php b/app/Repositories/PiggyBank/PiggybankPart.php deleted file mode 100644 index 79090311fe..0000000000 --- a/app/Repositories/PiggyBank/PiggybankPart.php +++ /dev/null @@ -1,149 +0,0 @@ -repetition; - } - - /** - * @param PiggyBankRepetition $repetition - */ - public function setRepetition($repetition) - { - $this->repetition = $repetition; - } - - /** - * @return Carbon - */ - public function getStartdate() - { - return $this->startdate; - } - - /** - * @param Carbon $startdate - */ - public function setStartdate($startdate) - { - $this->startdate = $startdate; - } - - /** - * @return Carbon - */ - public function getTargetdate() - { - return $this->targetdate; - } - - /** - * @param Carbon $targetdate - */ - public function setTargetdate($targetdate) - { - $this->targetdate = $targetdate; - } - - /** - * @return float|int - */ - public function percentage() - { - bcscale(2); - if ($this->getCurrentamount() < $this->getCumulativeAmount()) { - $pct = 0; - // calculate halfway point? - if (bcsub($this->getCumulativeAmount(), $this->getCurrentamount()) < $this->getAmountPerBar()) { - $left = $this->getCurrentamount() % $this->getAmountPerBar(); - $pct = round($left / $this->getAmountPerBar() * 100); - } - - return $pct; - } else { - return 100; - } - } - - /** - * @return float - */ - public function getCurrentamount() - { - return $this->currentamount; - } - - /** - * @param float $currentamount - */ - public function setCurrentamount($currentamount) - { - $this->currentamount = $currentamount; - } - - /** - * @return float - */ - public function getCumulativeAmount() - { - return $this->cumulativeAmount; - } - - /** - * @param float $cumulativeAmount - */ - public function setCumulativeAmount($cumulativeAmount) - { - $this->cumulativeAmount = $cumulativeAmount; - } - - /** - * @return float - */ - public function getAmountPerBar() - { - return $this->amountPerBar; - } - - /** - * @param float $amountPerBar - */ - public function setAmountPerBar($amountPerBar) - { - $this->amountPerBar = $amountPerBar; - } - - -} diff --git a/app/Repositories/Tag/TagRepository.php b/app/Repositories/Tag/TagRepository.php index 77d4ca4f41..d57eb6d9ce 100644 --- a/app/Repositories/Tag/TagRepository.php +++ b/app/Repositories/Tag/TagRepository.php @@ -54,6 +54,7 @@ class TagRepository implements TagRepositoryInterface } /** + * @deprecated * This method scans the transaction journals from or to the given asset account * and checks if these are part of a balancing act. If so, it will sum up the amounts * transferred into the balancing act (if any) and return this amount. diff --git a/app/Repositories/Tag/TagRepositoryInterface.php b/app/Repositories/Tag/TagRepositoryInterface.php index 7d76fa30e8..75c6a4df96 100644 --- a/app/Repositories/Tag/TagRepositoryInterface.php +++ b/app/Repositories/Tag/TagRepositoryInterface.php @@ -27,6 +27,7 @@ interface TagRepositoryInterface public function connect(TransactionJournal $journal, Tag $tag); /** + * @deprecated * This method scans the transaction journals from or to the given asset account * and checks if these are part of a balancing act. If so, it will sum up the amounts * transferred into the balancing act (if any) and return this amount. From 5b3beded3920721cadc2ebb7ddb5a6dd4aec196e Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 07:58:19 +0100 Subject: [PATCH 40/64] I can't believe I left this here all this time. --- app/Http/Controllers/HomeController.php | 29 ------------------------- 1 file changed, 29 deletions(-) diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 5613809750..3320717d1f 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -120,33 +120,4 @@ class HomeController extends Controller ); } - /** - * @codeCoverageIgnore - * @return \Illuminate\Http\RedirectResponse|string - */ - public function routes() - { - if (!Auth::user()->hasRole('owner')) { - Session::flash('warning', 'This page is broken.'); - - return redirect(route('index')); - } - Log::debug('Make log.'); - - // get all routes: - $routeCollection = Route::getRoutes(); - /** @var \Illuminate\Routing\Route $value */ - foreach ($routeCollection as $value) { - $name = $value->getName(); - $methods = $value->getMethods(); - $isPost = in_array('POST', $methods); - $index = str_replace('.', '-', $name); - - if (strlen($name) > 0 && !$isPost) { - echo "'" . $index . "' => '" . $name . "',
    "; - } - } - - return ' '; - } } From 58628034341ec997e8e454cde5192f046d4df6f0 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 09:34:23 +0100 Subject: [PATCH 41/64] This saves some queries. --- app/Models/TransactionJournal.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index aee80cdfc4..0aff8fd74f 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -68,6 +68,7 @@ use Watson\Validating\ValidatingTrait; * @property-read int $account_id * @property string $name * @property-read string $symbol + * @property-read string $type * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Attachment[] $attachments * @property-read mixed $amount_positive */ @@ -503,6 +504,10 @@ class TransactionJournal extends Model */ public function isWithdrawal() { + if (!is_null($this->type)) { + return $this->type == TransactionType::WITHDRAWAL; + } + return $this->transactionType->isWithdrawal(); } @@ -511,6 +516,10 @@ class TransactionJournal extends Model */ public function isDeposit() { + if (!is_null($this->type)) { + return $this->type == TransactionType::DEPOSIT; + } + return $this->transactionType->isDeposit(); } @@ -519,6 +528,10 @@ class TransactionJournal extends Model */ public function isTransfer() { + if (!is_null($this->type)) { + return $this->type == TransactionType::TRANSFER; + } + return $this->transactionType->isTransfer(); } @@ -527,6 +540,10 @@ class TransactionJournal extends Model */ public function isOpeningBalance() { + if (!is_null($this->type)) { + return $this->type == TransactionType::OPENING_BALANCE; + } + return $this->transactionType->isOpeningBalance(); } } From 4f38b77ef6c9a2266ea07303707d575d7bba9ba8 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 09:34:37 +0100 Subject: [PATCH 42/64] Better caching. --- app/Repositories/Account/AccountRepository.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index 1dfa4d133c..2668c85938 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -158,6 +158,7 @@ class AccountRepository implements AccountRepositoryInterface $cache->addProperty($account->id); $cache->addProperty($start); $cache->addProperty($end); + $cache->addProperty('frontpage-transactions'); if ($cache->has()) { return $cache->get(); // @codeCoverageIgnore } From c25c5623d2eb916bc0eb090199e5a0c96168a574 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 16:38:53 +0100 Subject: [PATCH 43/64] Fixed the currency dropdown when multiple fields present on single page. --- public/js/firefly.js | 52 ++++++++++++++++++++++++++------ resources/twig/form/amount.twig | 15 ++++++--- resources/twig/form/balance.twig | 20 ++++++++---- 3 files changed, 67 insertions(+), 20 deletions(-) diff --git a/public/js/firefly.js b/public/js/firefly.js index 1599c28acd..019726a578 100644 --- a/public/js/firefly.js +++ b/public/js/firefly.js @@ -1,7 +1,9 @@ /* globals token, dateRangeConfig, $, */ $(function () { "use strict"; - $('.currencySelect').click(currencySelect); + + // when you click on a currency, this happens: + $('.currency-option').click(currencySelect); var ranges = {}; // range for the current month: @@ -62,21 +64,51 @@ $(function () { function currencySelect(e) { "use strict"; - var target = $(e.target); + // clicked on + var target = $(e.target); // target is the tag. + + // name of the field in question: + var name = target.data('name'); + + // id of menu button (used later on): + var menuID = 'currency_dropdown_' + name; + + // the hidden input with the actual value of the selected currency: + var hiddenInputName = 'amount_currency_id_' + target.data('name'); + + // span with the current selection (next to the caret): + var spanId = 'currency_select_symbol_' + target.data('name'); + + // the selected currency symbol: var symbol = target.data('symbol'); - var code = target.data('code'); + + // id of the selected currency. var id = target.data('id'); - var fieldType = target.data('field'); - var menu = $('.' + fieldType + 'CurrencyDropdown'); - var symbolHolder = $('#' + fieldType + 'CurrentSymbol'); - symbolHolder.text(symbol); - $('input[name="' + fieldType + '_currency_id"]').val(id); + // update the hidden input: + $('input[name="' + hiddenInputName + '"]').val(id); - // close dropdown (hack hack) - menu.click(); + // update the symbol: + $('#' + spanId).text(symbol); + + // close the menu (hack hack) + $('#' + menuID).click(); return false; + + //var code = target.data('code'); + //var fieldType = target.data('field'); + //var menu = $('.' + fieldType + 'CurrencyDropdown'); + // + //var symbolHolder = $('#' + fieldType + 'CurrentSymbol'); + //symbolHolder.text(symbol); + //$('input[name="' + fieldType + '_currency_id"]').val(id); + // + // close dropdown (hack hack) + //menu.click(); + + + //return false; } diff --git a/resources/twig/form/amount.twig b/resources/twig/form/amount.twig index 88eea41b08..ec2a229aa4 100644 --- a/resources/twig/form/amount.twig +++ b/resources/twig/form/amount.twig @@ -4,12 +4,18 @@
    - + +
    diff --git a/resources/twig/form/balance.twig b/resources/twig/form/balance.twig index aef25ff15b..ea390ecddb 100644 --- a/resources/twig/form/balance.twig +++ b/resources/twig/form/balance.twig @@ -4,21 +4,29 @@
    - -
    {{ Form.input('number', name, value, options) }} +
    + {% include 'form/feedback.twig' %}
    - +
    From 524edfe7c24b5f95c8195fec58296a2770b4e541 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 16:40:27 +0100 Subject: [PATCH 44/64] Better formatting (will take currency into account). --- resources/twig/list/journals.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/twig/list/journals.twig b/resources/twig/list/journals.twig index e8014c2f88..b51f83defa 100644 --- a/resources/twig/list/journals.twig +++ b/resources/twig/list/journals.twig @@ -64,7 +64,7 @@ - {{ journal.amount|formatAmount }} + {{ journal|formatJournal }} {{ journal.date.formatLocalized(monthAndDayFormat) }} From 72d054c55c2ad5c04e97f12a830b38363de81af2 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 17:10:04 +0100 Subject: [PATCH 45/64] Add support for virtual balance currency, even though it cannot be stored yet. --- app/Http/Controllers/AccountController.php | 5 ++++- app/Http/Requests/AccountFormRequest.php | 25 +++++++++++----------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 3d17a25e00..ab7993255d 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -38,6 +38,8 @@ class AccountController extends Controller */ public function create($what = 'asset') { + + $subTitleIcon = Config::get('firefly.subIconsByIdentifier.' . $what); $subTitle = trans('firefly.make_new_' . $what . '_account'); @@ -211,13 +213,14 @@ class AccountController extends Controller 'name' => $request->input('name'), 'accountType' => $request->input('what'), 'virtualBalance' => round($request->input('virtualBalance'), 2), + 'virtualBalanceCurrency' => intval($request->input('amount_currency_id_virtualBalance')), 'active' => true, 'user' => Auth::user()->id, 'iban' => $request->input('iban'), 'accountRole' => $request->input('accountRole'), 'openingBalance' => round($request->input('openingBalance'), 2), 'openingBalanceDate' => new Carbon((string)$request->input('openingBalanceDate')), - 'openingBalanceCurrency' => intval($request->input('balance_currency_id')), + 'openingBalanceCurrency' => intval($request->input('amount_currency_id_openingBalance')), ]; diff --git a/app/Http/Requests/AccountFormRequest.php b/app/Http/Requests/AccountFormRequest.php index a0ff4e9617..578c034176 100644 --- a/app/Http/Requests/AccountFormRequest.php +++ b/app/Http/Requests/AccountFormRequest.php @@ -41,18 +41,19 @@ class AccountFormRequest extends Request } return [ - 'id' => $idRule, - 'name' => $nameRule, - 'openingBalance' => 'numeric', - 'iban' => 'iban', - 'virtualBalance' => 'numeric', - 'openingBalanceDate' => 'date', - 'accountRole' => 'in:' . $accountRoles, - 'active' => 'boolean', - 'ccType' => 'in:' . $ccPaymentTypes, - 'ccMonthlyPaymentDate' => 'date', - 'balance_currency_id' => 'exists:transaction_currencies,id', - 'what' => 'in:' . $types + 'id' => $idRule, + 'name' => $nameRule, + 'openingBalance' => 'numeric', + 'iban' => 'iban', + 'virtualBalance' => 'numeric', + 'openingBalanceDate' => 'date', + 'accountRole' => 'in:' . $accountRoles, + 'active' => 'boolean', + 'ccType' => 'in:' . $ccPaymentTypes, + 'ccMonthlyPaymentDate' => 'date', + 'amount_currency_id_openingBalance' => 'exists:transaction_currencies,id', + 'amount_currency_id_virtualBalance' => 'exists:transaction_currencies,id', + 'what' => 'in:' . $types ]; } } From 9f7c6c2d0c5ef41daf75d7bec481225b3d7bf971 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 25 Dec 2015 17:11:55 +0100 Subject: [PATCH 46/64] Extra cache. --- app/Repositories/Account/AccountRepository.php | 17 +++++++++++++---- app/Repositories/Journal/JournalRepository.php | 12 +++++++++++- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index 2668c85938..cdadf440c7 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -41,7 +41,16 @@ class AccountRepository implements AccountRepositoryInterface */ public function countAccounts(array $types) { - return Auth::user()->accounts()->accountTypeIn($types)->count(); + $cache = new CacheProperties; + $cache->addProperty('user-count-accounts'); + if ($cache->has()) { + return $cache->get(); // @codeCoverageIgnore + } + + $count = Auth::user()->accounts()->accountTypeIn($types)->count(); + $cache->store($count); + + return $count; } /** @@ -123,8 +132,7 @@ class AccountRepository implements AccountRepositoryInterface public function getFrontpageAccounts(Preference $preference) { $cache = new CacheProperties(); - $cache->addProperty($preference->data); - $cache->addProperty('frontPageaccounts'); + $cache->addProperty('user-frontpage-accounts'); if ($cache->has()) { return $cache->get(); // @codeCoverageIgnore } @@ -229,7 +237,7 @@ class AccountRepository implements AccountRepositoryInterface $cache = new CacheProperties; $cache->addProperty($ids); - $cache->addProperty('piggyAccounts'); + $cache->addProperty('user-piggy-bank-accounts'); if ($cache->has()) { return $cache->get(); // @codeCoverageIgnore } @@ -648,6 +656,7 @@ class AccountRepository implements AccountRepositoryInterface /** * @deprecated + * * @param $accountId * * @return Account diff --git a/app/Repositories/Journal/JournalRepository.php b/app/Repositories/Journal/JournalRepository.php index 3fd766b1a5..b86a6704f3 100644 --- a/app/Repositories/Journal/JournalRepository.php +++ b/app/Repositories/Journal/JournalRepository.php @@ -13,6 +13,7 @@ use FireflyIII\Models\Tag; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; +use FireflyIII\Support\CacheProperties; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Log; @@ -44,7 +45,16 @@ class JournalRepository implements JournalRepositoryInterface */ public function first() { - return Auth::user()->transactionjournals()->orderBy('date', 'ASC')->first(['transaction_journals.*']); + $cache = new CacheProperties; + $cache->addProperty('user-first-journal'); + if ($cache->has()) { + return $cache->get(); // @codeCoverageIgnore + } + + $entry = Auth::user()->transactionjournals()->orderBy('date', 'ASC')->first(['transaction_journals.*']); + $cache->store($entry); + + return $entry; } /** From 170c1793cc6eb0cad097ba314a1c0f62b9439cc2 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 26 Dec 2015 08:06:34 +0100 Subject: [PATCH 47/64] #135 --- app/Http/Controllers/NewUserController.php | 7 +++---- app/Http/Requests/NewUserFormRequest.php | 12 +++++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/NewUserController.php b/app/Http/Controllers/NewUserController.php index c08717e4a7..a500010852 100644 --- a/app/Http/Controllers/NewUserController.php +++ b/app/Http/Controllers/NewUserController.php @@ -49,7 +49,6 @@ class NewUserController extends Controller */ public function submit(NewUserFormRequest $request, AccountRepositoryInterface $repository) { - // create normal asset account: $assetAccount = [ 'name' => $request->get('bank_name'), @@ -61,7 +60,7 @@ class NewUserController extends Controller 'accountRole' => 'defaultAsset', 'openingBalance' => round($request->input('bank_balance'), 2), 'openingBalanceDate' => new Carbon, - 'openingBalanceCurrency' => intval($request->input('balance_currency_id')), + 'openingBalanceCurrency' => intval($request->input('amount_currency_id_bank_balance')), ]; $repository->store($assetAccount); @@ -78,7 +77,7 @@ class NewUserController extends Controller 'accountRole' => 'savingAsset', 'openingBalance' => round($request->input('savings_balance'), 2), 'openingBalanceDate' => new Carbon, - 'openingBalanceCurrency' => intval($request->input('balance_currency_id')), + 'openingBalanceCurrency' => intval($request->input('amount_currency_id_savings_balance')), ]; $repository->store($savingsAccount); } @@ -96,7 +95,7 @@ class NewUserController extends Controller 'accountRole' => 'ccAsset', 'openingBalance' => null, 'openingBalanceDate' => null, - 'openingBalanceCurrency' => intval($request->input('balance_currency_id')), + 'openingBalanceCurrency' => intval($request->input('amount_currency_id_credit_card_limit')), ]; $creditCard = $repository->store($creditAccount); diff --git a/app/Http/Requests/NewUserFormRequest.php b/app/Http/Requests/NewUserFormRequest.php index b500ce6b02..a7fa888e43 100644 --- a/app/Http/Requests/NewUserFormRequest.php +++ b/app/Http/Requests/NewUserFormRequest.php @@ -27,11 +27,13 @@ class NewUserFormRequest extends Request public function rules() { return [ - 'bank_name' => 'required|between:1,200', - 'bank_balance' => 'required|numeric', - 'savings_balance' => 'numeric', - 'credit_card_limit' => 'numeric', - 'balance_currency_id' => 'exists:transaction_currencies,id', + 'bank_name' => 'required|between:1,200', + 'bank_balance' => 'required|numeric', + 'savings_balance' => 'numeric', + 'credit_card_limit' => 'numeric', + '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', ]; } } From eadc630fcb1e6d10a3dc0ee55f06dcfe079fcc7a Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 26 Dec 2015 08:12:44 +0100 Subject: [PATCH 48/64] #135 --- app/Http/Requests/BillFormRequest.php | 44 ++++++++++++++------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/app/Http/Requests/BillFormRequest.php b/app/Http/Requests/BillFormRequest.php index 341369f8b8..45de345a75 100644 --- a/app/Http/Requests/BillFormRequest.php +++ b/app/Http/Requests/BillFormRequest.php @@ -29,17 +29,18 @@ class BillFormRequest extends Request public function getBillData() { return [ - 'name' => $this->get('name'), - 'match' => $this->get('match'), - 'amount_min' => round($this->get('amount_min'), 2), - 'amount_currency_id' => round($this->get('amount_currency_id'), 2), - 'amount_max' => round($this->get('amount_max'), 2), - 'date' => new Carbon($this->get('date')), - 'user' => Auth::user()->id, - 'repeat_freq' => $this->get('repeat_freq'), - 'skip' => intval($this->get('skip')), - 'automatch' => intval($this->get('automatch')) === 1, - 'active' => intval($this->get('active')) === 1, + 'name' => $this->get('name'), + 'match' => $this->get('match'), + 'amount_min' => round($this->get('amount_min'), 2), + 'amount_currency_id_amount_min' => intval($this->get('amount_currency_id_amount_min')), + 'amount_currency_id_amount_max' => intval($this->get('amount_currency_id_amount_max')), + 'amount_max' => round($this->get('amount_max'), 2), + 'date' => new Carbon($this->get('date')), + 'user' => Auth::user()->id, + 'repeat_freq' => $this->get('repeat_freq'), + 'skip' => intval($this->get('skip')), + 'automatch' => intval($this->get('automatch')) === 1, + 'active' => intval($this->get('active')) === 1, ]; } @@ -56,16 +57,17 @@ class BillFormRequest extends Request } $rules = [ - 'name' => $nameRule, - 'match' => $matchRule, - 'amount_min' => 'required|numeric|min:0.01', - 'amount_max' => 'required|numeric|min:0.01', - 'amount_currency_id' => 'required|exists:transaction_currencies,id', - 'date' => 'required|date', - 'repeat_freq' => 'required|in:weekly,monthly,quarterly,half-year,yearly', - 'skip' => 'required|between:0,31', - 'automatch' => 'in:1', - 'active' => 'in:1', + 'name' => $nameRule, + 'match' => $matchRule, + 'amount_min' => 'required|numeric|min:0.01', + 'amount_max' => 'required|numeric|min:0.01', + 'amount_currency_id_amount_min' => 'required|exists:transaction_currencies,id', + 'amount_currency_id_amount_max' => 'required|exists:transaction_currencies,id', + 'date' => 'required|date', + 'repeat_freq' => 'required|in:weekly,monthly,quarterly,half-year,yearly', + 'skip' => 'required|between:0,31', + 'automatch' => 'in:1', + 'active' => 'in:1', ]; return $rules; From db72ad7c60d4cf06731908375a003a2814f30b9b Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 26 Dec 2015 08:12:51 +0100 Subject: [PATCH 49/64] Issue #135 --- resources/twig/form/amount.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/twig/form/amount.twig b/resources/twig/form/amount.twig index ec2a229aa4..ea390ecddb 100644 --- a/resources/twig/form/amount.twig +++ b/resources/twig/form/amount.twig @@ -5,8 +5,8 @@
    - {% if Config.get('firefly.chart') == 'google' %} -
    - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
    diff --git a/resources/twig/reports/default/month.twig b/resources/twig/reports/default/month.twig index ed7abcc7c7..4a1008753b 100644 --- a/resources/twig/reports/default/month.twig +++ b/resources/twig/reports/default/month.twig @@ -13,12 +13,7 @@

    {{ 'accountBalances'|_ }}

    - {% if Config.get('firefly.chart') == 'google' %} -
    - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
    diff --git a/resources/twig/reports/default/year.twig b/resources/twig/reports/default/year.twig index 593fc4f2bf..d69be74f88 100644 --- a/resources/twig/reports/default/year.twig +++ b/resources/twig/reports/default/year.twig @@ -75,12 +75,7 @@

    {{ 'budgets'|_ }}

    - {% if Config.get('firefly.chart') == 'google' %} -
    - {% endif %} - {% if Config.get('firefly.chart') == 'chartjs' %} - - {% endif %} +
    From c5dee29e4bfb1debf6485ad4c40694a461b028dc Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 27 Dec 2015 08:58:25 +0100 Subject: [PATCH 64/64] New version. --- config/firefly.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/firefly.php b/config/firefly.php index d35fcd1c5d..0ad434380e 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -2,7 +2,7 @@ return [ 'chart' => 'chartjs', - 'version' => '3.5.4', + 'version' => '3.5.5', 'index_periods' => ['1D', '1W', '1M', '3M', '6M', '1Y', 'custom'], 'budget_periods' => ['daily', 'weekly', 'monthly', 'quarterly', 'half-year', 'yearly'], 'csv_import_enabled' => true,