Merge branch 'release/3.10.3'

This commit is contained in:
James Cole 2016-09-11 08:17:41 +02:00
commit 1155096226
86 changed files with 2636 additions and 453 deletions

View File

@ -5,6 +5,27 @@ This project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased]
- No unreleased changes yet.
## [3.10.3] - 2016-08-29
### Added
- More fields for mass-edit, thanks to @Vissert (#282)
- First start of German translation
### Changed
- More optional fields for transactions and the ability to filter them.
### Removed
- Preference for budget maximum.
### Fixed
- A bug in the translation routine broke the import.
- It was possible to destroy your Firefly installation by removing all currencies. Thanks @mondjef
- Translation bugs.
- Import bug.
### Security
- Firefly will not accept registrations beyond the first one, by default.
## [3.10.2] - 2016-08-29
### Added
- New Chinese translations. Set Firefly III to show incomplete translations to follow the progress. Want to translate Firefly III in Chinese, or in any other language? Then check out [the Crowdin project](https://crowdin.com/project/firefly-iii).

View File

@ -12,7 +12,13 @@ declare(strict_types = 1);
namespace FireflyIII\Http\Controllers\Admin;
use Config;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Http\Requests\ConfigurationRequest;
use FireflyIII\Support\Facades\FireflyConfig;
use Preferences;
use Redirect;
use Session;
use View;
/**
@ -42,8 +48,30 @@ class ConfigurationController extends Controller
$subTitle = strval(trans('firefly.instance_configuration'));
$subTitleIcon = 'fa-wrench';
return view('admin.configuration.index', compact('subTitle', 'subTitleIcon'));
// all available configuration and their default value in case
// they don't exist yet.
$singleUserMode = FireflyConfig::get('single_user_mode', Config::get('firefly.configuration.single_user_mode'))->data;
return view('admin.configuration.index', compact('subTitle', 'subTitleIcon', 'singleUserMode'));
}
/**
* @param ConfigurationRequest $request
*/
public function store(ConfigurationRequest $request)
{
// get config values:
$singleUserMode = intval($request->get('single_user_mode')) === 1 ? true : false;
// store config values
FireflyConfig::set('single_user_mode', $singleUserMode);
// flash message
Session::flash('success', strval(trans('firefly.configuration_updated')));
Preferences::mark();
return Redirect::route('admin.configuration.index');
}
}

View File

@ -12,6 +12,7 @@ declare(strict_types = 1);
namespace FireflyIII\Http\Controllers\Auth;
use Auth;
use Config;
use FireflyIII\Events\UserRegistration;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Http\Controllers\Controller;
@ -108,6 +109,16 @@ class AuthController extends Controller
*/
public function register(Request $request)
{
// is allowed to?
$singleUserMode = FireflyConfig::get('single_user_mode', Config::get('firefly.configuration.single_user_mode'))->data;
$userCount = User::count();
if ($singleUserMode === true && $userCount > 0) {
$message = 'Registration is currently not available.';
return view('error', compact('message'));
}
$validator = $this->validator($request->all());
if ($validator->fails()) {
@ -145,6 +156,24 @@ class AuthController extends Controller
return redirect($this->redirectPath());
}
/**
* Show the application login form.
*
* @return \Illuminate\Http\Response
*/
public function showLoginForm()
{
// is allowed to?
$singleUserMode = FireflyConfig::get('single_user_mode', Config::get('firefly.configuration.single_user_mode'))->data;
$userCount = User::count();
$allowRegistration = true;
if ($singleUserMode === true && $userCount > 0) {
$allowRegistration = false;
}
return view('auth.login', compact('allowRegistration'));
}
/**
* Show the application registration form.
*
@ -154,6 +183,15 @@ class AuthController extends Controller
{
$showDemoWarning = env('SHOW_DEMO_WARNING', false);
// is allowed to?
$singleUserMode = FireflyConfig::get('single_user_mode', Config::get('firefly.configuration.single_user_mode'))->data;
$userCount = User::count();
if ($singleUserMode === true && $userCount > 0) {
$message = 'Registration is currently not available.';
return view('error', compact('message'));
}
return view('auth.register', compact('showDemoWarning'));
}

View File

@ -221,12 +221,11 @@ class BudgetController extends Controller
}
$budgetMaximum = Preferences::get('budgetMaximum', 1000)->data;
$defaultCurrency = Amount::getDefaultCurrency();
return view(
'budgets.index', compact(
'budgetMaximum', 'periodStart', 'periodEnd',
'periodStart', 'periodEnd',
'period', 'range', 'budgetIncomeTotal',
'defaultCurrency', 'inactive', 'budgets',
'spent', 'budgeted'
@ -253,8 +252,7 @@ class BudgetController extends Controller
$count = $journals->count();
$journals = $journals->slice($offset, $pageSize);
$list = new LengthAwarePaginator($journals, $count, $pageSize);
$subTitle = trans(
'firefly.without_budget_between',
$subTitle = trans('firefly.without_budget_between',
['start' => $start->formatLocalized($this->monthAndDayFormat), 'end' => $end->formatLocalized($this->monthAndDayFormat)]
);
$list->setPath('/budgets/list/noBudget');

View File

@ -350,8 +350,7 @@ class BudgetController extends Controller
$expenses = $this->repository->spentInPeriod(new Collection([$budget]), new Collection, $repetition->startdate, $repetition->enddate);
if ($repetitions->count() > 1) {
$name = $budget->name . ' ' . trans(
'firefly.between_dates',
$name = $budget->name . ' ' . trans('firefly.between_dates',
['start' => $repetition->startdate->formatLocalized($format), 'end' => $repetition->enddate->formatLocalized($format)]
);
}

View File

@ -81,20 +81,19 @@ class CurrencyController extends Controller
}
/**
* @param CurrencyRepositoryInterface $repository
* @param TransactionCurrency $currency
*
* @return \Illuminate\Http\RedirectResponse|View
*/
public function delete(CurrencyRepositoryInterface $repository, TransactionCurrency $currency)
public function delete(TransactionCurrency $currency)
{
if ($repository->countJournals($currency) > 0) {
if (!$this->canDeleteCurrency($currency)) {
Session::flash('error', trans('firefly.cannot_delete_currency', ['name' => $currency->name]));
return redirect(route('currency.index'));
}
// put previous url in session
Session::put('currency.delete.url', URL::previous());
Session::flash('gaEventCategory', 'currency');
@ -106,15 +105,14 @@ class CurrencyController extends Controller
}
/**
* @param CurrencyRepositoryInterface $repository
* @param TransactionCurrency $currency
*
* @return \Illuminate\Http\RedirectResponse
* @throws \Exception
*/
public function destroy(CurrencyRepositoryInterface $repository, TransactionCurrency $currency)
public function destroy(TransactionCurrency $currency)
{
if ($repository->countJournals($currency) > 0) {
if (!$this->canDeleteCurrency($currency)) {
Session::flash('error', trans('firefly.cannot_delete_currency', ['name' => $currency->name]));
return redirect(route('currency.index'));
@ -136,7 +134,7 @@ class CurrencyController extends Controller
public function edit(TransactionCurrency $currency)
{
$subTitleIcon = 'fa-pencil';
$subTitle = trans('firefly.edit_currency', ['name' => $currency->name]);
$subTitle = trans('breadcrumbs.edit_currency', ['name' => $currency->name]);
$currency->symbol = htmlentities($currency->symbol);
// put previous url in session if not redirect from store (not "return_to_edit").
@ -229,4 +227,39 @@ class CurrencyController extends Controller
}
/**
* @param TransactionCurrency $currency
*
* @return bool
*/
private function canDeleteCurrency(TransactionCurrency $currency): bool
{
$repository = app(CurrencyRepositoryInterface::class);
// has transactions still
if ($repository->countJournals($currency) > 0) {
return false;
}
// is the only currency left
if ($repository->get()->count() === 1) {
return false;
}
// is the default currency for the user or the system
$defaultCode = Preferences::get('currencyPreference', env('DEFAULT_CURRENCY', 'EUR'))->data;
if ($currency->code === $defaultCode) {
return false;
}
// is the default currency for the system
$defaultSystemCode = env('DEFAULT_CURRENCY', 'EUR');
if ($currency->code === $defaultSystemCode) {
return false;
}
// can be deleted
return true;
}
}

View File

@ -43,7 +43,7 @@ class NewUserController extends Controller
public function index(ARI $repository)
{
View::share('title', 'Welcome to Firefly!');
View::share('title', trans('firefly.welcome'));
View::share('mainTitleIcon', 'fa-fire');

View File

@ -14,7 +14,7 @@ use Auth;
use FireflyIII\Crud\Account\AccountCrudInterface;
use FireflyIII\Http\Requests\TokenFormRequest;
use FireflyIII\Models\AccountType;
use Input;
use Illuminate\Http\Request;
use PragmaRX\Google2FA\Contracts\Google2FA;
use Preferences;
use Session;
@ -79,13 +79,12 @@ class PreferencesController extends Controller
$viewRangePref = Preferences::get('viewRange', '1M');
$viewRange = $viewRangePref->data;
$frontPageAccounts = Preferences::get('frontPageAccounts', []);
$budgetMax = Preferences::get('budgetMaximum', 1000);
$language = Preferences::get('language', env('DEFAULT_LANGUAGE', 'en_US'))->data;
$budgetMaximum = $budgetMax->data;
$transactionPageSize = Preferences::get('transactionPageSize', 50)->data;
$customFiscalYear = Preferences::get('customFiscalYear', 0)->data;
$fiscalYearStartStr = Preferences::get('fiscalYearStart', '01-01')->data;
$fiscalYearStart = date('Y') . '-' . $fiscalYearStartStr;
$tjOptionalFields = Preferences::get('transaction_journal_optional_fields', [])->data;
$is2faEnabled = Preferences::get('twoFactorAuthEnabled', 0)->data; // twoFactorAuthEnabled
$has2faSecret = !is_null(Preferences::get('twoFactorAuthSecret')); // hasTwoFactorAuthSecret
$showIncomplete = env('SHOW_INCOMPLETE_TRANSLATIONS', false) === true;
@ -93,7 +92,7 @@ class PreferencesController extends Controller
return view(
'preferences.index',
compact(
'budgetMaximum', 'language', 'accounts', 'frontPageAccounts',
'language', 'accounts', 'frontPageAccounts', 'tjOptionalFields',
'viewRange', 'customFiscalYear', 'transactionPageSize', 'fiscalYearStart', 'is2faEnabled',
'has2faSecret', 'showIncomplete'
)
@ -117,38 +116,36 @@ class PreferencesController extends Controller
}
/**
* @return \Illuminate\Http\RedirectResponse
* @param Request $request
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function postIndex()
public function postIndex(Request $request)
{
// front page accounts
$frontPageAccounts = [];
if (is_array(Input::get('frontPageAccounts'))) {
foreach (Input::get('frontPageAccounts') as $id) {
if (is_array($request->get('frontPageAccounts'))) {
foreach ($request->get('frontPageAccounts') as $id) {
$frontPageAccounts[] = intval($id);
}
Preferences::set('frontPageAccounts', $frontPageAccounts);
}
// view range:
Preferences::set('viewRange', Input::get('viewRange'));
Preferences::set('viewRange', $request->get('viewRange'));
// forget session values:
Session::forget('start');
Session::forget('end');
Session::forget('range');
// budget maximum:
$budgetMaximum = intval(Input::get('budgetMaximum'));
Preferences::set('budgetMaximum', $budgetMaximum);
// custom fiscal year
$customFiscalYear = intval(Input::get('customFiscalYear')) === 1;
$fiscalYearStart = date('m-d', strtotime(Input::get('fiscalYearStart')));
$customFiscalYear = intval($request->get('customFiscalYear')) === 1;
$fiscalYearStart = date('m-d', strtotime($request->get('fiscalYearStart')));
Preferences::set('customFiscalYear', $customFiscalYear);
Preferences::set('fiscalYearStart', $fiscalYearStart);
// save page size:
$transactionPageSize = intval(Input::get('transactionPageSize'));
$transactionPageSize = intval($request->get('transactionPageSize'));
if ($transactionPageSize > 0 && $transactionPageSize < 1337) {
Preferences::set('transactionPageSize', $transactionPageSize);
} else {
@ -156,7 +153,7 @@ class PreferencesController extends Controller
}
// two factor auth
$twoFactorAuthEnabled = intval(Input::get('twoFactorAuthEnabled'));
$twoFactorAuthEnabled = intval($request->get('twoFactorAuthEnabled'));
$hasTwoFactorAuthSecret = !is_null(Preferences::get('twoFactorAuthSecret'));
// If we already have a secret, just set the two factor auth enabled to 1, and let the user continue with the existing secret.
@ -165,11 +162,26 @@ class PreferencesController extends Controller
}
// language:
$lang = Input::get('language');
$lang = $request->get('language');
if (in_array($lang, array_keys(config('firefly.languages')))) {
Preferences::set('language', $lang);
}
// optional fields for transactions:
$setOptions = $request->get('tj');
$optionalTj = [
'interest_date' => isset($setOptions['interest_date']),
'book_date' => isset($setOptions['book_date']),
'process_date' => isset($setOptions['process_date']),
'due_date' => isset($setOptions['due_date']),
'payment_date' => isset($setOptions['payment_date']),
'invoice_date' => isset($setOptions['invoice_date']),
'internal_reference' => isset($setOptions['internal_reference']),
'notes' => isset($setOptions['notes']),
'attachments' => isset($setOptions['attachments']),
];
Preferences::set('transaction_journal_optional_fields', $optionalTj);
Session::flash('success', strval(trans('firefly.saved_preferences')));
Preferences::mark();

View File

@ -215,8 +215,15 @@ class ReportController extends Controller
$reportType = 'audit';
$accountIds = join(',', $accounts->pluck('id')->toArray());
$hideable = ['buttons', 'icon', 'description', 'balance_before', 'amount', 'balance_after', 'date', 'book_date', 'process_date', 'interest_date',
'from', 'to', 'budget', 'category', 'bill', 'create_date', 'update_date',
$hideable = ['buttons', 'icon', 'description', 'balance_before', 'amount', 'balance_after', 'date',
'interest_date','book_date', 'process_date',
// three new optional fields.
'due_date', 'payment_date', 'invoice_date',
'from', 'to', 'budget', 'category', 'bill',
// more new optional fields
'internal_reference', 'notes',
'create_date', 'update_date',
];
$defaultShow = ['icon', 'description', 'balance_before', 'amount', 'balance_after', 'date', 'to'];

View File

@ -192,7 +192,7 @@ class MassController extends Controller
$destAccountName = $request->get('destination_account_name')[$journal->id] ?? '';
$budgetId = $journal->budgets->first() ? $journal->budgets->first()->id : 0;
$category = $journal->categories->first() ? $journal->categories->first()->name : '';
$category = $request->get('category')[$journal->id];
$tags = $journal->tags->pluck('tag')->toArray();
// build data array

View File

@ -67,6 +67,7 @@ class SplitController extends Controller
$budgets = ExpandedForm::makeSelectListWithEmpty($budgetRepository->getActiveBudgets());
$piggyBanks = ExpandedForm::makeSelectListWithEmpty($piggyRepository->getPiggyBanksWithAmount());
$subTitle = trans('form.add_new_' . $sessionData['what']);
$optionalFields = Preferences::get('transaction_journal_optional_fields', [])->data;
$subTitleIcon = 'fa-plus';
$preFilled = [
'what' => $sessionData['what'] ?? 'withdrawal',
@ -83,7 +84,7 @@ class SplitController extends Controller
return view(
'split.journals.create',
compact('journal', 'piggyBanks', 'subTitle', 'subTitleIcon', 'preFilled', 'assetAccounts', 'currencies', 'budgets', 'uploadSize')
compact('journal', 'piggyBanks', 'subTitle', 'optionalFields', 'subTitleIcon', 'preFilled', 'assetAccounts', 'currencies', 'budgets', 'uploadSize')
);
}
@ -101,6 +102,7 @@ class SplitController extends Controller
$uploadSize = min(Steam::phpBytes(ini_get('upload_max_filesize')), Steam::phpBytes(ini_get('post_max_size')));
$currencies = ExpandedForm::makeSelectList($currencyRepository->get());
$assetAccounts = ExpandedForm::makeSelectList($crud->getAccountsByType(['Default account', 'Asset account']));
$optionalFields = Preferences::get('transaction_journal_optional_fields', [])->data;
$budgets = ExpandedForm::makeSelectListWithEmpty($budgetRepository->getActiveBudgets());
$preFilled = $this->arrayFromJournal($request, $journal);
$subTitle = trans('breadcrumbs.edit_journal', ['description' => $journal->description]);
@ -118,7 +120,8 @@ class SplitController extends Controller
return view(
'split.journals.edit',
compact(
'subTitleIcon', 'currencies', 'preFilled', 'subTitle', 'amount', 'sourceAccounts', 'uploadSize', 'destinationAccounts', 'assetAccounts',
'subTitleIcon', 'currencies', 'optionalFields',
'preFilled', 'subTitle', 'amount', 'sourceAccounts', 'uploadSize', 'destinationAccounts', 'assetAccounts',
'budgets', 'journal'
)
);

View File

@ -44,6 +44,12 @@ class TransactionController extends Controller
parent::__construct();
View::share('title', trans('firefly.transactions'));
View::share('mainTitleIcon', 'fa-repeat');
$maxFileSize = Steam::phpBytes(ini_get('upload_max_filesize'));
$maxPostSize = Steam::phpBytes(ini_get('post_max_size'));
$uploadSize = min($maxFileSize, $maxPostSize);
View::share('uploadSize', $uploadSize);
}
/**
@ -65,6 +71,7 @@ class TransactionController extends Controller
$preFilled = Session::has('preFilled') ? session('preFilled') : [];
$subTitle = trans('form.add_new_' . $what);
$subTitleIcon = 'fa-plus';
$optionalFields = Preferences::get('transaction_journal_optional_fields', [])->data;
Session::put('preFilled', $preFilled);
@ -80,7 +87,7 @@ class TransactionController extends Controller
asort($piggies);
return view('transactions.create', compact('assetAccounts', 'subTitleIcon', 'uploadSize', 'budgets', 'what', 'piggies', 'subTitle'));
return view('transactions.create', compact('assetAccounts', 'subTitleIcon', 'uploadSize', 'budgets', 'what', 'piggies', 'subTitle', 'optionalFields'));
}
/**
@ -135,19 +142,23 @@ class TransactionController extends Controller
if ($count > 2) {
return redirect(route('split.journal.edit', [$journal->id]));
}
$budgetRepository = app('FireflyIII\Repositories\Budget\BudgetRepositoryInterface');
$piggyRepository = app('FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface');
$crud = app('FireflyIII\Crud\Account\AccountCrudInterface');
$assetAccounts = ExpandedForm::makeSelectList($crud->getAccountsByType(['Default account', 'Asset account']));
$budgetList = ExpandedForm::makeSelectListWithEmpty($budgetRepository->getActiveBudgets());
$piggyBankList = ExpandedForm::makeSelectListWithEmpty($piggyRepository->getPiggyBanks());
$maxFileSize = Steam::phpBytes(ini_get('upload_max_filesize'));
$maxPostSize = Steam::phpBytes(ini_get('post_max_size'));
$uploadSize = min($maxFileSize, $maxPostSize);
$what = strtolower(TransactionJournal::transactionTypeStr($journal));
$subTitle = trans('breadcrumbs.edit_journal', ['description' => $journal->description]);
// code to get list data:
$budgetRepository = app('FireflyIII\Repositories\Budget\BudgetRepositoryInterface');
$piggyRepository = app('FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface');
$crud = app('FireflyIII\Crud\Account\AccountCrudInterface');
$assetAccounts = ExpandedForm::makeSelectList($crud->getAccountsByType(['Default account', 'Asset account']));
$budgetList = ExpandedForm::makeSelectListWithEmpty($budgetRepository->getActiveBudgets());
$piggyBankList = ExpandedForm::makeSelectListWithEmpty($piggyRepository->getPiggyBanks());
// view related code
$subTitle = trans('breadcrumbs.edit_journal', ['description' => $journal->description]);
$what = strtolower(TransactionJournal::transactionTypeStr($journal));
// journal related code
$sourceAccounts = TransactionJournal::sourceAccountList($journal);
$destinationAccounts = TransactionJournal::destinationAccountList($journal);
$optionalFields = Preferences::get('transaction_journal_optional_fields', [])->data;
$preFilled = [
'date' => TransactionJournal::dateAsString($journal),
'interest_date' => TransactionJournal::dateAsString($journal, 'interest_date'),
@ -162,6 +173,13 @@ class TransactionController extends Controller
'destination_account_id' => $destinationAccounts->first()->id,
'destination_account_name' => $destinationAccounts->first()->name,
'amount' => TransactionJournal::amountPositive($journal),
// new custom fields:
'due_date' => TransactionJournal::dateAsString($journal, 'due_date'),
'payment_date' => TransactionJournal::dateAsString($journal, 'payment_date'),
'invoice_date' => TransactionJournal::dateAsString($journal, 'invoice_date'),
'interal_reference' => $journal->getMeta('internal_reference'),
'notes' => $journal->getMeta('notes'),
];
if ($journal->isWithdrawal() && $destinationAccounts->first()->accountType->type == AccountType::CASH) {
@ -183,9 +201,10 @@ class TransactionController extends Controller
}
Session::forget('transactions.edit.fromUpdate');
return view('transactions.edit', compact('journal', 'uploadSize', 'assetAccounts', 'what', 'budgetList', 'piggyBankList', 'subTitle'))->with(
'data', $preFilled
);
return view(
'transactions.edit',
compact('journal', 'optionalFields', 'assetAccounts', 'what', 'budgetList', 'piggyBankList', 'subTitle')
)->with('data', $preFilled);
}
/**

View File

@ -0,0 +1,44 @@
<?php
/**
* ConfigurationRequest.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
declare(strict_types = 1);
namespace FireflyIII\Http\Requests;
use Auth;
/**
* Class ConfigurationRequest
*
*
* @package FireflyIII\Http\Requests
*/
class ConfigurationRequest extends Request
{
/**
* @return bool
*/
public function authorize()
{
// Only allow logged in users and admins
return Auth::check() && Auth::user()->hasRole('owner');
}
/**
* @return array
*/
public function rules()
{
$rules = [
'single_user_mode' => 'between:0,1|numeric',
];
return $rules;
}
}

View File

@ -60,6 +60,14 @@ class JournalFormRequest extends Request
'category' => $this->get('category') ?? '',
'tags' => explode(',', $tags),
'piggy_bank_id' => $this->get('piggy_bank_id') ? intval($this->get('piggy_bank_id')) : 0,
// new custom fields here:
'due_date' => $this->get('due_date') ? new Carbon($this->get('due_date')) : null,
'payment_date' => $this->get('payment_date') ? new Carbon($this->get('payment_date')) : null,
'invoice_date' => $this->get('invoice_date') ? new Carbon($this->get('invoice_date')) : null,
'internal_reference' => $this->get('internal_reference'),
'notes' => $this->get('notes'),
];
}
@ -81,6 +89,12 @@ class JournalFormRequest extends Request
'category' => 'between:1,255',
'amount_currency_id_amount' => 'required|exists:transaction_currencies,id',
'piggy_bank_id' => 'numeric',
// new custom fields here:
'due_date' => 'date',
'payment_date' => 'date',
'internal_reference' => 'min:1,max:255',
'notes' => 'min:1,max:65536',
];
switch ($what) {

View File

@ -437,6 +437,7 @@ Route::group(
// FF configuration:
Route::get('/admin/configuration', ['uses' => 'Admin\ConfigurationController@index', 'as' => 'admin.configuration.index']);
Route::post('/admin/configuration', ['uses' => 'Admin\ConfigurationController@store', 'as' => 'admin.configuration.store']);
}
);

View File

@ -11,6 +11,7 @@ declare(strict_types = 1);
namespace FireflyIII\Import;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\ImportJob;
use FireflyIII\Models\Rule;
@ -112,7 +113,11 @@ class ImportStorage
$meta = TransactionJournalMeta::where('name', 'originalImportHash')->where('data', json_encode($hash))->first(['journal_meta.*']);
if (!is_null($meta)) {
return $meta->transactionjournal;
/** @var TransactionJournal $journal */
$journal = $meta->transactionjournal;
if (intval($journal->completed) === 1) {
return $journal;
}
}
return new TransactionJournal;
@ -151,7 +156,7 @@ class ImportStorage
$repository = app(TagRepositoryInterface::class, [$this->user]);
$data = [
'tag' => trans('firefly.import_with_key', ['key' => $this->job->key]),
'date' => null,
'date' => new Carbon,
'description' => null,
'latitude' => null,
'longitude' => null,
@ -376,8 +381,31 @@ class ImportStorage
'amount' => $amount,
];
$one = Transaction::create($sourceData);
$two = Transaction::create($destinationData);
$one = Transaction::create($sourceData);
$two = Transaction::create($destinationData);
$error = false;
if (is_null($one->id)) {
Log::error('Could not create transaction 1.', $one->getErrors()->all());
$error = true;
}
if (is_null($two->id)) {
Log::error('Could not create transaction 1.', $two->getErrors()->all());
$error = true;
}
// respond to error
if ($error === true) {
$errorText = sprintf('Cannot import row %d, because an error occured when storing data.', $index);
Log::error($errorText);
$extendedStatus = $this->job->extended_status;
$extendedStatus['errors'][] = $errorText;
$this->job->extended_status = $extendedStatus;
$this->job->save();
return new TransactionJournal;
}
Log::debug('Created transaction 1', ['id' => $one->id, 'account' => $one->account_id, 'account_name' => $accounts['source']->name]);
Log::debug('Created transaction 2', ['id' => $two->id, 'account' => $two->account_id, 'account_name' => $accounts['destination']->name]);

View File

@ -57,7 +57,7 @@ class Transaction extends Model
= [
'account_id' => 'required|exists:accounts,id',
'transaction_journal_id' => 'required|exists:transaction_journals,id',
'description' => 'between:1,255',
'description' => 'between:0,1024',
'amount' => 'required|numeric',
];

View File

@ -14,10 +14,13 @@ namespace FireflyIII\Models;
use Auth;
use Carbon\Carbon;
use Crypt;
use FireflyIII\Support\CacheProperties;
use FireflyIII\Support\Models\TransactionJournalSupport;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Log;
use Preferences;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Watson\Validating\ValidatingTrait;
@ -171,6 +174,18 @@ class TransactionJournal extends TransactionJournalSupport
return $this->belongsToMany('FireflyIII\Models\Category');
}
/**
* @param string $name
*
* @return bool
*/
public function deleteMeta(string $name):bool
{
$this->transactionJournalMeta()->where('name', $name)->delete();
return true;
}
/**
*
* @param $value
@ -188,19 +203,48 @@ class TransactionJournal extends TransactionJournalSupport
/**
*
* @param string $fieldName
* @param string $name
*
* @return string
*/
public function getMeta($fieldName)
public function getMeta(string $name)
{
foreach ($this->transactionjournalmeta as $meta) {
if ($meta->name == $fieldName) {
return $meta->data;
}
$value = null;
$cache = new CacheProperties;
$cache->addProperty('journal-meta');
$cache->addProperty($this->id);
$cache->addProperty($name);
if ($cache->has()) {
return $cache->get();
}
return '';
Log::debug(sprintf('Looking for journal #%d meta field "%s".', $this->id, $name));
$entry = $this->transactionJournalMeta()->where('name', $name)->first();
if (!is_null($entry)) {
$value = $entry->data;
// cache:
$cache->store($value);
}
// convert to Carbon if name is _date
if (!is_null($value) && substr($name, -5) === '_date') {
$value = new Carbon($value);
// cache:
$cache->store($value);
}
return $value;
}
/**
* @param string $name
*
* @return bool
*/
public function hasMeta(string $name): bool
{
return !is_null($this->getMeta($name));
}
/**
@ -354,6 +398,38 @@ class TransactionJournal extends TransactionJournalSupport
$this->attributes['encrypted'] = true;
}
/**
* @param string $name
* @param $value
*
* @return TransactionJournalMeta
*/
public function setMeta(string $name, $value): TransactionJournalMeta
{
if (is_null($value)) {
$this->deleteMeta($name);
return new TransactionJournalMeta();
}
if ($value instanceof Carbon) {
$value = $value->toW3cString();
}
Log::debug(sprintf('Going to set "%s" with value "%s"', $name, json_encode($value)));
$entry = $this->transactionJournalMeta()->where('name', $name)->first();
if (is_null($entry)) {
$entry = new TransactionJournalMeta();
$entry->transactionJournal()->associate($this);
$entry->name = $name;
}
$entry->data = $value;
$entry->save();
Preferences::mark();
return $entry;
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
@ -370,6 +446,14 @@ class TransactionJournal extends TransactionJournalSupport
return $this->belongsTo('FireflyIII\Models\TransactionCurrency');
}
/**
* @return HasMany
*/
public function transactionJournalMeta(): HasMany
{
return $this->hasMany('FireflyIII\Models\TransactionJournalMeta');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
@ -378,22 +462,6 @@ class TransactionJournal extends TransactionJournalSupport
return $this->belongsTo('FireflyIII\Models\TransactionType');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function transactiongroups()
{
return $this->belongsToMany('FireflyIII\Models\TransactionGroup');
}
/**
* @return HasMany
*/
public function transactionjournalmeta(): HasMany
{
return $this->hasMany('FireflyIII\Models\TransactionJournalMeta');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
@ -409,4 +477,5 @@ class TransactionJournal extends TransactionJournalSupport
{
return $this->belongsTo('FireflyIII\User');
}
}

View File

@ -89,16 +89,23 @@ class AccountRepository implements AccountRepositoryInterface
}
);
$query->whereIn('source.account_id', $accountIds);
$query->whereNull('source.deleted_at');
}
// remove group by
$query->getQuery()->getQuery()->groups = null;
// that should do it:
$sum = strval($query->sum('source.amount'));
$sum = bcmul($sum, '-1');
// get id's
$ids = $query->get(['transaction_journals.id'])->pluck('id')->toArray();
return $sum;
// that should do it:
$sum = $this->user->transactions()
->whereIn('transaction_journal_id', $ids)
->where('amount', '>', '0')
->whereNull('transactions.deleted_at')
->sum('amount');
return strval($sum);
}
@ -139,7 +146,9 @@ class AccountRepository implements AccountRepositoryInterface
}
// remove group by
$query->getQuery()->getQuery()->groups = null;
$ids = $query->get(['transaction_journals.id'])->pluck('id')->toArray();
// get id's
$ids = $query->get(['transaction_journals.id'])->pluck('id')->toArray();
// that should do it:
@ -185,6 +194,7 @@ class AccountRepository implements AccountRepositoryInterface
if (in_array($journal->source_account_id, $accountIds)) {
return true;
}
return false;
}
);
@ -370,6 +380,7 @@ class AccountRepository implements AccountRepositoryInterface
if (in_array($journal->destination_account_id, $accountIds)) {
return true;
}
return false;
}
);

View File

@ -41,6 +41,9 @@ class JournalRepository implements JournalRepositoryInterface
/** @var User */
private $user;
/** @var array */
private $validMetaFields = ['interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date', 'internal_reference', 'notes'];
/**
* JournalRepository constructor.
*
@ -344,8 +347,15 @@ class JournalRepository implements JournalRepositoryInterface
$this->saveTags($journal, $data['tags']);
}
return $journal;
foreach ($data as $key => $value) {
if (in_array($key, $this->validMetaFields)) {
$journal->setMeta($key, $value);
continue;
}
Log::debug(sprintf('Could not store meta field "%s" with value "%s" for journal #%d', json_encode($key), json_encode($value), $journal->id));
}
return $journal;
}
@ -370,14 +380,17 @@ class JournalRepository implements JournalRepositoryInterface
'description' => $data['description'],
'completed' => 0,
'date' => $data['date'],
'interest_date' => $data['interest_date'],
'book_date' => $data['book_date'],
'process_date' => $data['process_date'],
]
);
$journal->save();
return $journal;
$result = $journal->save();
if ($result) {
return $journal;
}
return new TransactionJournal();
}
/**
@ -392,10 +405,6 @@ class JournalRepository implements JournalRepositoryInterface
$journal->transaction_currency_id = $data['amount_currency_id_amount'];
$journal->description = $data['description'];
$journal->date = $data['date'];
$journal->interest_date = $data['interest_date'];
$journal->book_date = $data['book_date'];
$journal->process_date = $data['process_date'];
// unlink all categories, recreate them:
$journal->categories()->detach();
@ -439,6 +448,20 @@ class JournalRepository implements JournalRepositoryInterface
$this->updateTags($journal, $data['tags']);
}
// update meta fields:
$result = $journal->save();
if ($result) {
foreach ($data as $key => $value) {
if (in_array($key, $this->validMetaFields)) {
$journal->setMeta($key, $value);
continue;
}
Log::debug(sprintf('Could not store meta field "%s" with value "%s" for journal #%d', json_encode($key), json_encode($value), $journal->id));
}
return $journal;
}
return $journal;
}

View File

@ -79,6 +79,17 @@ class FireflyConfig
}
/**
* @param $name
* @param $value
*
* @return Configuration
*/
public function put($name, $value): Configuration
{
return $this->set($name, $value);
}
/**
* @param $name
* @param string $value

View File

@ -29,6 +29,7 @@ use Illuminate\Support\Collection;
*/
class TransactionJournalSupport extends Model
{
/**
* @param TransactionJournal $journal
*
@ -123,7 +124,22 @@ class TransactionJournalSupport extends Model
return $journal->date->format('Y-m-d');
}
if (!is_null($journal->$dateField) && $journal->$dateField instanceof Carbon) {
return $journal->$dateField->format('Y-m-d');
// make field NULL
$carbon = clone $journal->$dateField;
$journal->$dateField = null;
$journal->save();
// create meta entry
$journal->setMeta($dateField, $carbon);
// return that one instead.
return $carbon->format('Y-m-d');
}
$metaField = $journal->getMeta($dateField);
if (!is_null($metaField)) {
$carbon = new Carbon($metaField);
return $carbon->format('Y-m-d');
}
return '';
@ -288,6 +304,4 @@ class TransactionJournalSupport extends Model
return $typeStr;
}
}

View File

@ -24,6 +24,9 @@ use FireflyIII\Models\Transaction;
*/
class Steam
{
/**
*
* @param \FireflyIII\Models\Account $account

22
composer.lock generated
View File

@ -2676,16 +2676,16 @@
},
{
"name": "twig/twig",
"version": "v1.24.1",
"version": "v1.24.2",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "3566d311a92aae4deec6e48682dc5a4528c4a512"
"reference": "33093f6e310e6976baeac7b14f3a6ec02f2d79b7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3566d311a92aae4deec6e48682dc5a4528c4a512",
"reference": "3566d311a92aae4deec6e48682dc5a4528c4a512",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/33093f6e310e6976baeac7b14f3a6ec02f2d79b7",
"reference": "33093f6e310e6976baeac7b14f3a6ec02f2d79b7",
"shasum": ""
},
"require": {
@ -2733,20 +2733,20 @@
"keywords": [
"templating"
],
"time": "2016-05-30 09:11:59"
"time": "2016-09-01 17:50:53"
},
{
"name": "vlucas/phpdotenv",
"version": "v2.3.0",
"version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
"reference": "9ca5644c536654e9509b9d257f53c58630eb2a6a"
"reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/9ca5644c536654e9509b9d257f53c58630eb2a6a",
"reference": "9ca5644c536654e9509b9d257f53c58630eb2a6a",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c",
"reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c",
"shasum": ""
},
"require": {
@ -2758,7 +2758,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3-dev"
"dev-master": "2.4-dev"
}
},
"autoload": {
@ -2783,7 +2783,7 @@
"env",
"environment"
],
"time": "2016-06-14 14:14:52"
"time": "2016-09-01 10:05:43"
},
{
"name": "watson/validating",

View File

@ -4,7 +4,6 @@ declare(strict_types = 1);
return [
'allow_register' => true,
'defaults' => [
'guard' => 'web',
'passwords' => 'users',

View File

@ -3,8 +3,14 @@ declare(strict_types = 1);
return [
// default values for editable configuration:
'configuration' => [
'single_user_mode' => true,
],
'chart' => 'chartjs',
'version' => '3.10.2',
'version' => '3.10.3',
'csv_import_enabled' => true,
'maxUploadSize' => 5242880,
'allowedMimes' => ['image/png', 'image/jpeg', 'application/pdf'],
@ -90,6 +96,7 @@ return [
'Cash account' => 'cash',
],
'languages' => [
'de_DE' => ['name_locale' => 'Deutsch', 'name_english' => 'German', 'complete' => false],
'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' => 'Portuguese (Brazil)', 'complete' => true],

View File

@ -30,5 +30,6 @@ return [
'3.10' => 'Please find the full upgrade instructions here: https://github.com/JC5/firefly-iii/wiki/Upgrade-to-3.10',
'3.10.1' => 'Please find the full upgrade instructions here: https://github.com/JC5/firefly-iii/wiki/Upgrade-to-3.10',
'3.10.2' => 'Please find the full upgrade instructions here: https://github.com/JC5/firefly-iii/wiki/Upgrade-to-3.10',
'3.10.3' => 'Please find the full upgrade instructions here: https://github.com/JC5/firefly-iii/wiki/Upgrade-to-3.10',
],
];

View File

@ -81,9 +81,13 @@ $(document).ready(function () {
}
// also for multi input:
if ($('input[name="category[]"]').length > 0) {
if ($('input[name^="category["]').length > 0) {
$.getJSON('json/categories').done(function (data) {
$('input[name="category[]"]').typeahead({source: data});
$('input[name^="category["]').typeahead({source: data});
});
}
});

View File

@ -0,0 +1,39 @@
<?php
/**
* breadcrumbs.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
return [
'home' => 'Home',
'edit_currency' => 'Edit currency ":name"',
'delete_currency' => 'Delete currency ":name"',
'newPiggyBank' => 'Erstellen Sie ein neues Sparschwein',
'edit_piggyBank' => 'Bearbeite Sparschwein ":name"',
'preferences' => 'Einstellungen',
'profile' => 'Profil',
'changePassword' => 'Passwort ändern',
'bills' => 'Rechnungen',
'newBill' => 'Neue Rechnung',
'edit_bill' => 'Bearbeite Rechnung ":name"',
'delete_bill' => 'Lösche Rechnung ":name"',
'reports' => 'Berichte',
'searchResult' => 'Suche nach ":query"',
'withdrawal_list' => 'Ausgaben',
'deposit_list' => 'Umsatz, Einkommen und Einlagen',
'transfer_list' => 'Transfers',
'transfers_list' => 'Transfers',
'create_withdrawal' => 'Create new withdrawal',
'create_deposit' => 'Create new deposit',
'create_transfer' => 'Create new transfer',
'edit_journal' => 'Bearbeite Transaktion ":description"',
'delete_journal' => 'Lösche Transaktion ":description"',
'tags' => 'Tags',
'createTag' => 'Neuen Tag erstellen',
'edit_tag' => 'Bearbeite Tag ":tag"',
'delete_tag' => 'Lösche Tag ":tag"',
];

View File

@ -0,0 +1,21 @@
<?php
/**
* config.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
return [
'locale' => 'de, Deutsch, de_DE, de_DE.utf8',
'month' => '%B %Y',
'month_and_day' => '%e. %B %Y',
'date_time' => '%e %B %Y, @ %T',
'specific_day' => '%e. %B %Y',
'week_in_year' => 'Week %W, %Y',
'quarter_of_year' => '%B %Y',
'year' => '2015',
'half_year' => '%B %Y',
];

View File

@ -0,0 +1,79 @@
<?php
/**
* csv.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
declare(strict_types = 1);
return [
'import_configure_title' => 'Configure your import',
'import_configure_intro' => 'There are some options for your CSV import. Please indicate if your CSV file contains headers on the first column, and what the date format of your date-fields is. That might require some experimentation. The field delimiter is usually a ",", but could also be a ";". Check this carefully.',
'import_configure_form' => 'Formular',
'header_help' => 'Check this if the first row of your CSV file are the column titles',
'date_help' => 'Date time format in your CSV. Follow the format like <a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters">this page</a> indicates. The default value will parse dates that look like this: :dateExample.',
'delimiter_help' => 'Choose the field delimiter that is used in your input file. If not sure, comma is the safest option.',
'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.',
'upload_not_writeable' => 'The grey box contains a file path. It should be writeable. Please make sure it is.',
// roles
'column_roles_title' => 'Define column roles',
'column_roles_text' => '<p>Firefly III cannot guess what data each column contains. You must tell Firefly which kinds of data to expect. The example data can guide you into picking the correct type from the dropdown. If a column cannot be matched to a useful data type, please let me know <a href="https://github.com/JC5/firefly-iii/issues/new">by creating an issue</a>.</p><p>Some values in your CSV file, such as account names or categories, may already exist in your Firefly III database. If you select "map these values" Firefly will not attempt to search for matching values itself but allow you to match the CSV values against the values in your database. This allows you to fine-tune the import.</p>',
'column_roles_table' => 'Tabelle',
'column_name' => 'Name der Spalte',
'column_example' => 'Column example data',
'column_role' => 'Column data meaning',
'do_map_value' => 'Map these values',
'column' => 'Spalte',
'no_example_data' => 'No example data available',
'store_column_roles' => 'Continue import',
'do_not_map' => '(do not map)',
'map_title' => 'Connect import data to Firefly III data',
'map_text' => 'In the following tables, the left value shows you information found in your uploaded CSV file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
'field_value' => 'Field value',
'field_mapped_to' => 'Mapped to',
'store_column_mapping' => 'Store mapping',
// map things.
'column__ignore' => '(ignore this column)',
'column_account-iban' => 'Asset account (IBAN)',
'column_account-id' => 'Asset account ID (matching Firefly)',
'column_account-name' => 'Asset account (name)',
'column_amount' => 'Amount',
'column_amount-comma-separated' => 'Amount (comma as decimal separator)',
'column_bill-id' => 'Bill ID (matching Firefly)',
'column_bill-name' => 'Bill name',
'column_budget-id' => 'Budget ID (matching Firefly)',
'column_budget-name' => 'Budgetname',
'column_category-id' => 'Category ID (matching Firefly)',
'column_category-name' => 'Category name',
'column_currency-code' => 'Currency code (ISO 4217)',
'column_currency-id' => 'Currency ID (matching Firefly)',
'column_currency-name' => 'Currency name (matching Firefly)',
'column_currency-symbol' => 'Currency symbol (matching Firefly)',
'column_date-interest' => 'Interest calculation date',
'column_date-book' => 'Transaction booking date',
'column_date-process' => 'Transaction process date',
'column_date-transaction' => 'Datum',
'column_description' => 'Beschreibung',
'column_opposing-iban' => 'Opposing account (IBAN)',
'column_opposing-id' => 'Opposing account ID (matching Firefly)',
'column_external-id' => 'External ID',
'column_opposing-name' => 'Opposing account (name)',
'column_rabo-debet-credit' => 'Rabobank specific debet/credit indicator',
'column_ing-debet-credit' => 'ING specific debet/credit indicator',
'column_sepa-ct-id' => 'SEPA Credit Transfer end-to-end ID',
'column_sepa-ct-op' => 'SEPA Credit Transfer opposing account',
'column_sepa-db' => 'SEPA Direct Debet',
'column_tags-comma' => 'Tags (comma separated)',
'column_tags-space' => 'Tags (space separated)',
'column_account-number' => 'Asset account (account number)',
'column_opposing-number' => 'Opposing account (account number)',
];

View File

@ -0,0 +1,803 @@
<?php
/**
* firefly.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
return [
// general stuff:
'language_incomplete' => 'incomplete translation',
'close' => 'Schließen',
'actions' => 'Actions',
'edit' => 'Bearbeiten',
'delete' => 'Löschen',
'welcomeBack' => 'Was ist gerade los?',
'everything' => 'Alle',
'customRange' => 'Individueller Bereich',
'apply' => 'Übernehmen',
'cancel' => 'Abbrechen',
'from' => 'Von',
'to' => 'Bis',
'showEverything' => 'Alles anzeigen',
'never' => 'Nie',
'search_results_for' => 'Suchergebnisse für ":query"',
'bounced_error' => 'Die Nachricht an :email ist nicht zustellbar, sodass Sie keinen Zugang haben.',
'deleted_error' => 'Die Zugangsdaten stimmen nicht überein.',
'general_blocked_error' => 'Ihr Benutzerkonto wurde deaktiviert, sodass Sie sich nicht anmelden können.',
'expired_error' => 'Ihr Benutzerkonto ist abgelaufen und kann nicht mehr genutzt werden.',
'removed_amount' => ':amount enfernt',
'added_amount' => ':amount hinzugefügt',
'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' => 'Neues Budget',
'new_bill' => 'Neue Rechnung',
'block_account_logout' => 'You have been logged out. Blocked accounts cannot use this site. Did you register with a valid email address?',
'flash_success' => 'Success!',
'flash_info' => 'Nachricht',
'flash_warning' => 'Achtung!',
'flash_error' => 'Fehler!',
'flash_info_multiple' => 'There is one message|There are :count messages',
'flash_error_multiple' => 'There is one error|There are :count errors',
'net_worth' => 'Net worth',
'route_has_no_help' => 'There is no help for this route, or there is no help available in your language.',
'two_factor_welcome' => 'Hallo :user!',
'two_factor_enter_code' => 'To continue, please enter your two factor authentication code. Your application can generate it for you.',
'two_factor_code_here' => 'Code hier eingeben',
'two_factor_title' => 'Zwei-Faktor-Authentifizierung',
'authenticate' => 'Authentifizieren',
'two_factor_forgot_title' => 'Lost two factor authentication',
'two_factor_forgot' => 'I forgot my two-factor thing.',
'two_factor_lost_header' => 'Lost your two factor authentication?',
'two_factor_lost_intro' => 'Leider ist dieses etwas, dass sie nicht über die Weboberfläche zurücksetzen können. Sie haben zwei Möglichkeiten.',
'two_factor_lost_fix_self' => 'Wenn Sie Ihre eigene Instanz von Firefly III betreiben, überprüfen Sie die Logdatei unter <code>storage/logs</code> für weitere Anweisungen.',
'two_factor_lost_fix_owner' => 'Otherwise, email the site owner, <a href="mailto::site_owner">:site_owner</a> and ask them to reset your two factor authentication.',
'warning_much_data' => ':days days of data may take a while to load.',
'registered' => 'Sie haben sich erfolgreich registriert!',
'search' => 'Suche',
'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the <a href="/budgets">budgets</a>-page. Budgets can help you keep track of expenses.',
'source_accounts' => 'Source account(s)',
'destination_accounts' => 'Destination account(s)',
// repeat frequencies:
'repeat_freq_monthly' => 'monatlich',
'weekly' => 'wöchentlich',
'quarterly' => 'vierteljährlich',
'half-year' => 'halbjährlich',
'yearly' => 'jährlich',
// account confirmation:
'confirm_account_header' => 'Bitte bestätigen Sie Ihr Konto',
'confirm_account_intro' => 'Eine E-Mail wurde an die Adresse gesendet, welche bei der Registrierung angegeben wurde. Bitte lese die Mail für weitere Anweisungen. Wenn Sie die Mail nicht erhalten haben, kann Firefly Sie erneut senden.',
'confirm_account_resend_email' => 'Send me the confirmation message I need to activate my account.',
'account_is_confirmed' => 'Ihr Benutzerkonto wurde bestätigt!',
'invalid_activation_code' => 'Es scheint der genutzte Code ist ungültig oder ist abgelaufen.',
'confirm_account_is_resent_header' => 'Die Bestätigung wurde erneut gesendet',
'confirm_account_is_resent_text' => 'Die Bestätigungsmail wurde erneut gesendet. Wenn Sie die Bestätigungsmail weiterhin nicht erhalten wenden Sie sich bitte an den Seitenbetreiber unter <a href="mailto::owner">Seitenbetreiber></a> oder überprüfen Sie das Fehlerprotokoll.',
'confirm_account_is_resent_go_home' => 'Go to the index page of Firefly',
'confirm_account_not_resent_header' => 'Etwas ist schief gelaufen :(',
'confirm_account_not_resent_intro' => 'The confirmation message has been not resent. If you still did not receive the confirmation message, please contact the site owner at <a href="mailto::owner">:owner</a> instead. Possibly, you have tried to resend the activation message too often. You can have Firefly III try to resend the confirmation message every hour.',
'confirm_account_not_resent_go_home' => 'Go to the index page of Firefly',
// export data:
'import_and_export' => 'Import und Export',
'export_data' => 'Daten exportieren',
'export_data_intro' => 'For backup purposes, when migrating to another system or when migrating to another Firefly III installation.',
'export_format' => 'Export format',
'export_format_csv' => 'Comma separated values (CSV file)',
'export_format_mt940' => 'MT940 compatible format',
'export_included_accounts' => 'Export transactions from these accounts',
'include_config_help' => 'For easy re-import into Firefly III',
'include_old_uploads_help' => 'Firefly III does not throw away the original CSV files you have imported in the past. You can include them in your export.',
'do_export' => 'Export',
'export_status_never_started' => 'Der Export hat noch nicht begonnen',
'export_status_make_exporter' => 'Creating exporter thing...',
'export_status_collecting_journals' => 'Collecting your transactions...',
'export_status_collected_journals' => 'Collected your transactions!',
'export_status_converting_to_export_format' => 'Converting your transactions...',
'export_status_converted_to_export_format' => 'Converted your transactions!',
'export_status_creating_journal_file' => 'Creating the export file...',
'export_status_created_journal_file' => 'Created the export file!',
'export_status_collecting_attachments' => 'Collecting all your attachments...',
'export_status_collected_attachments' => 'Collected all your attachments!',
'export_status_collecting_old_uploads' => 'Collecting all your previous uploads...',
'export_status_collected_old_uploads' => 'Collected all your previous uploads!',
'export_status_creating_config_file' => 'Creating a configuration file...',
'export_status_created_config_file' => 'Created a configuration file!',
'export_status_creating_zip_file' => 'Creating a zip file...',
'export_status_created_zip_file' => 'Created a zip file!',
'export_status_finished' => 'Export has succesfully finished! Yay!',
'export_data_please_wait' => 'Bitte warten...',
'attachment_explanation' => 'The file called \':attachment_name\' (#:attachment_id) was originally uploaded to :type \':description\' (#:journal_id) dated :date for the amount of :amount.',
// rules
'rules' => 'Rules',
'rules_explanation' => 'Here you can manage rules. Rules are triggered when a transaction is created or updated. Then, if the transaction has certain properties (called "triggers") Firefly will execute the "actions". Combined, you can make Firefly respond in a certain way to new transactions.',
'rule_name' => 'Name of rule',
'rule_triggers' => 'Rule triggers when',
'rule_actions' => 'Rule will',
'new_rule' => 'New rule',
'new_rule_group' => 'New rule group',
'rule_priority_up' => 'Give rule more priority',
'rule_priority_down' => 'Give rule less priority',
'make_new_rule_group' => 'Make new rule group',
'store_new_rule_group' => 'Store new rule group',
'created_new_rule_group' => 'New rule group ":title" stored!',
'updated_rule_group' => 'Successfully updated rule group ":title".',
'edit_rule_group' => 'Edit rule group ":title"',
'delete_rule_group' => 'Delete rule group ":title"',
'deleted_rule_group' => 'Deleted rule group ":title"',
'update_rule_group' => 'Update rule group',
'no_rules_in_group' => 'There are no rules in this group',
'move_rule_group_up' => 'Move rule group up',
'move_rule_group_down' => 'Move rule group down',
'save_rules_by_moving' => 'Save these rule(s) by moving them to another rule group:',
'make_new_rule' => 'Make new rule in rule group ":title"',
'rule_help_stop_processing' => 'When you check this box, later rules in this group will not be executed.',
'rule_help_active' => 'Inactive rules will never fire.',
'stored_new_rule' => 'Stored new rule with title ":title"',
'deleted_rule' => 'Deleted rule with title ":title"',
'store_new_rule' => 'Store new rule',
'updated_rule' => 'Updated rule with title ":title"',
'default_rule_group_name' => 'Default rules',
'default_rule_group_description' => 'All your rules not in a particular group.',
'default_rule_name' => 'Your first default rule',
'default_rule_description' => 'This rule is an example. You can safely delete it.',
'default_rule_trigger_description' => 'The Man Who Sold the World',
'default_rule_trigger_from_account' => 'David Bowie',
'default_rule_action_prepend' => 'Bought the world from ',
'default_rule_action_set_category' => 'Large expenses',
'trigger' => 'Trigger',
'trigger_value' => 'Trigger on value',
'stop_processing_other_triggers' => 'Stop processing other triggers',
'add_rule_trigger' => 'Add new trigger',
'action' => 'Action',
'action_value' => 'Action value',
'stop_executing_other_actions' => 'Stop executing other actions',
'add_rule_action' => 'Add new action',
'edit_rule' => 'Edit rule ":title"',
'delete_rule' => 'Delete rule ":title"',
'update_rule' => 'Update rule',
'test_rule_triggers' => 'See matching transactions',
'warning_transaction_subset' => 'For performance reasons this list is limited to :max_num_transactions and may only show a subset of matching transactions',
'warning_no_matching_transactions' => 'No matching transactions found. Please note that for performance reasons, only the last :num_transactions transactions have been checked.',
'warning_no_valid_triggers' => 'No valid triggers provided.',
'execute_on_existing_transactions' => 'Execute for existing transactions',
'execute_on_existing_transactions_intro' => 'When a rule or group has been changed or added, you can execute it for existing transactions',
'execute_on_existing_transactions_short' => 'Existing transactions',
'executed_group_on_existing_transactions' => 'Executed group ":title" for existing transactions',
'execute_group_on_existing_transactions' => 'Execute group ":title" for existing transactions',
'include_transactions_from_accounts' => 'Include transactions from these accounts',
'execute' => 'Ausführen',
// actions and triggers
'rule_trigger_user_action' => 'User action is ":trigger_value"',
'rule_trigger_from_account_starts' => 'Source account starts with ":trigger_value"',
'rule_trigger_from_account_ends' => 'Source account ends with ":trigger_value"',
'rule_trigger_from_account_is' => 'Source account is ":trigger_value"',
'rule_trigger_from_account_contains' => 'Source account contains ":trigger_value"',
'rule_trigger_to_account_starts' => 'Destination account starts with ":trigger_value"',
'rule_trigger_to_account_ends' => 'Destination account ends with ":trigger_value"',
'rule_trigger_to_account_is' => 'Destination account is ":trigger_value"',
'rule_trigger_to_account_contains' => 'Destination account contains ":trigger_value"',
'rule_trigger_transaction_type' => 'Transaction is of type ":trigger_value"',
'rule_trigger_amount_less' => 'Amount is less than :trigger_value',
'rule_trigger_amount_exactly' => 'Amount is :trigger_value',
'rule_trigger_amount_more' => 'Amount is more than :trigger_value',
'rule_trigger_description_starts' => 'Description starts with ":trigger_value"',
'rule_trigger_description_ends' => 'Description ends with ":trigger_value"',
'rule_trigger_description_contains' => 'Description contains ":trigger_value"',
'rule_trigger_description_is' => 'Description is ":trigger_value"',
'rule_trigger_from_account_starts_choice' => 'Source account starts with..',
'rule_trigger_from_account_ends_choice' => 'Source account ends with..',
'rule_trigger_from_account_is_choice' => 'Source account is..',
'rule_trigger_from_account_contains_choice' => 'Source account contains..',
'rule_trigger_to_account_starts_choice' => 'Destination account starts with..',
'rule_trigger_to_account_ends_choice' => 'Destination account ends with..',
'rule_trigger_to_account_is_choice' => 'Destination account is..',
'rule_trigger_to_account_contains_choice' => 'Destination account contains..',
'rule_trigger_transaction_type_choice' => 'Transaction is of type..',
'rule_trigger_amount_less_choice' => 'Amount is less than..',
'rule_trigger_amount_exactly_choice' => 'Amount is..',
'rule_trigger_amount_more_choice' => 'Amount is more than..',
'rule_trigger_description_starts_choice' => 'Description starts with..',
'rule_trigger_description_ends_choice' => 'Description ends with..',
'rule_trigger_description_contains_choice' => 'Description contains..',
'rule_trigger_description_is_choice' => 'Description is..',
'rule_trigger_store_journal' => 'When a journal is created',
'rule_trigger_update_journal' => 'When a journal is updated',
'rule_action_set_category' => 'Set category to ":action_value"',
'rule_action_clear_category' => 'Clear category',
'rule_action_set_budget' => 'Set budget to ":action_value"',
'rule_action_clear_budget' => 'Clear budget',
'rule_action_add_tag' => 'Add tag ":action_value"',
'rule_action_remove_tag' => 'Remove tag ":action_value"',
'rule_action_remove_all_tags' => 'Remove all tags',
'rule_action_set_description' => 'Set description to ":action_value"',
'rule_action_append_description' => 'Append description with ":action_value"',
'rule_action_prepend_description' => 'Prepend description with ":action_value"',
'rule_action_set_category_choice' => 'Set category to..',
'rule_action_clear_category_choice' => 'Clear any category',
'rule_action_set_budget_choice' => 'Set budget to..',
'rule_action_clear_budget_choice' => 'Clear any budget',
'rule_action_add_tag_choice' => 'Add tag..',
'rule_action_remove_tag_choice' => 'Remove tag..',
'rule_action_remove_all_tags_choice' => 'Remove all tags',
'rule_action_set_description_choice' => 'Set description to..',
'rule_action_append_description_choice' => 'Append description with..',
'rule_action_prepend_description_choice' => 'Prepend description with..',
// 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_view_range' => 'View range',
'pref_view_range_help' => 'Some charts are automatically grouped in periods. What period would you prefer?',
'pref_1D' => 'Ein Tag',
'pref_1W' => 'Eine Woche',
'pref_1M' => 'Ein Monat',
'pref_3M' => 'Drei Monate (Quartal)',
'pref_6M' => 'Sechs Monate',
'pref_1Y' => 'Ein Jahr',
'pref_languages' => 'Sprachen',
'pref_languages_help' => 'Firefly III unterstützt mehrere Sprachen. Welche möchten Sie nutzen?',
'pref_custom_fiscal_year' => 'Fiscal year settings',
'pref_custom_fiscal_year_label' => 'Enabled',
'pref_custom_fiscal_year_help' => 'In countries that use a financial year other than January 1 to December 31, you can switch this on and specify start / end days of the fiscal year',
'pref_fiscal_year_start_label' => 'Fiscal year start date',
'pref_two_factor_auth' => '2-step verification',
'pref_two_factor_auth_help' => 'When you enable 2-step verification (also known as two-factor authentication), you add an extra layer of security to your account. You sign in with something you know (your password) and something you have (a verification code). Verification codes are generated by an application on your phone, such as Authy or Google Authenticator.',
'pref_enable_two_factor_auth' => 'Enable 2-step verification',
'pref_two_factor_auth_disabled' => '2-step verification code removed and disabled',
'pref_two_factor_auth_remove_it' => 'Don\'t forget to remove the account from your authentication app!',
'pref_two_factor_auth_code' => 'Verify code',
'pref_two_factor_auth_code_help' => 'Scan the QR code with an application on your phone such as Authy or Google Authenticator and enter the generated code.',
'pref_two_factor_auth_reset_code' => 'Reset verification code',
'pref_two_factor_auth_remove_code' => 'Remove verification code',
'pref_two_factor_auth_remove_will_disable' => '(this will also disable two-factor authentication)',
'pref_save_settings' => 'Save settings',
'saved_preferences' => 'Preferences saved!',
'transaction_page_size_title' => 'Page size',
'transaction_page_size_help' => 'Any list of transactions shows at most this many transactions',
'transaction_page_size_label' => 'Page size',
'between_dates' => '(:start and :end)',
'pref_optional_fields_transaction' => 'Optional fields for transactions',
'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.',
'optional_tj_date_fields' => 'Date fields',
'optional_tj_business_fields' => 'Business fields',
'optional_tj_attachment_fields' => 'Attachment fields',
'pref_optional_tj_interest_date' => 'Interest date',
'pref_optional_tj_book_date' => 'Book date',
'pref_optional_tj_process_date' => 'Processing date',
'pref_optional_tj_due_date' => 'Due date',
'pref_optional_tj_payment_date' => 'Payment date',
'pref_optional_tj_invoice_date' => 'Invoice date',
'pref_optional_tj_internal_reference' => 'Internal reference',
'pref_optional_tj_notes' => 'Notes',
'pref_optional_tj_attachments' => 'Attachments',
'optional_field_meta_dates' => 'Dates',
'optional_field_meta_business' => 'Business',
'optional_field_attachments' => 'Attachments',
'optional_field_meta_data' => 'Optional meta data',
// 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, <em>anything</em> 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"',
'attachment_updated' => 'Updated 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' => 'Transfers',
'title_transfers' => 'Transfers',
// create new stuff:
'create_new_withdrawal' => 'Create new withdrawal',
'create_new_deposit' => 'Create new deposit',
'create_new_transfer' => 'Create new transfer',
'create_new_asset' => 'Create new asset account',
'create_new_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',
'store_currency' => 'Store new currency',
'update_currency' => 'Update currency',
'new_default_currency' => ':name is now the default currency.',
'cannot_delete_currency' => 'Cannot delete :name because it is still in use.',
'deleted_currency' => 'Currency :name deleted',
'created_currency' => 'Currency :name created',
'updated_currency' => 'Currency :name updated',
'ask_site_owner' => 'Please ask :owner to add, remove or edit currencies.',
'currencies_intro' => 'Firefly III supports various currencies which you can set and enable here.',
'make_default_currency' => 'make default',
'default_currency' => 'default',
// 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.',
'stored_new_account_new_user' => 'Yay! Your new account has been stored.',
'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.',
// forms:
'mandatoryFields' => 'Mandatory fields',
'optionalFields' => 'Optional fields',
'options' => 'Options',
// budgets:
'create_new_budget' => 'Create a new budget',
'store_new_budget' => 'Store new budget',
'stored_new_budget' => 'Stored new budget ":name"',
'available_between' => 'Available between :start and :end',
'transactionsWithoutBudget' => 'Expenses without budget',
'transactions_no_budget' => 'Expenses without budget between :start and :end',
'spent_between' => 'Spent between :start and :end',
'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"',
'deleted_budget' => 'Deleted budget ":name"',
'edit_budget' => 'Edit budget ":name"',
'updated_budget' => 'Updated budget ":name"',
'update_amount' => 'Update amount',
'update_budget' => 'Update budget',
'update_budget_amount_range' => 'Update (expected) available amount between :start and :end',
// bills:
'matching_on' => 'Matching on',
'between_amounts' => 'between :low and :high.',
'repeats' => 'Repeats',
'connected_journals' => 'Connected transactions',
'auto_match_on' => 'Automatically matched by Firefly',
'auto_match_off' => 'Not automatically matched by Firefly',
'next_expected_match' => 'Next expected match',
'delete_bill' => 'Delete bill ":name"',
'deleted_bill' => 'Deleted bill ":name"',
'edit_bill' => 'Edit bill ":name"',
'more' => 'More',
'rescan_old' => 'Rescan old transactions',
'update_bill' => 'Update bill',
'updated_bill' => 'Updated bill ":name"',
'store_new_bill' => 'Store new bill',
'stored_new_bill' => 'Stored new bill ":name"',
'cannot_scan_inactive_bill' => 'Inactive bills cannot be scanned.',
'rescanned_bill' => 'Rescanned everything.',
'bill_date_little_relevance' => 'The only part of this date used by Firefly is the day. It is only useful when your bill arrives at exactly the same date every month. If the payment date of your bills varies, simply use the first of the month.',
'average_bill_amount_year' => 'Average bill amount (:year)',
'average_bill_amount_overall' => 'Average bill amount (overall)',
// 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',
'cash_accounts' => 'Cash accounts',
'Cash account' => 'Cash account',
'account_type' => 'Account type',
'save_transactions_by_moving' => 'Save these transaction(s) by moving them to another account:',
'stored_new_account' => 'New account ":name" stored!',
'updated_account' => 'Updated account ":name"',
'credit_card_options' => 'Credit card options',
// categories:
'new_category' => 'New category',
'create_new_category' => 'Create a new category',
'without_category' => 'Without a category',
'update_category' => 'Update category',
'updated_category' => 'Updated category ":name"',
'categories' => 'Categories',
'edit_category' => 'Edit category ":name"',
'no_category' => '(no category)',
'category' => 'Category',
'delete_category' => 'Delete category ":name"',
'deleted_category' => 'Deleted category ":name"',
'store_category' => 'Store new category',
'stored_category' => 'Stored new category ":name"',
'without_category_between' => 'Without category between :start and :end',
// transactions:
'update_withdrawal' => 'Update withdrawal',
'update_deposit' => 'Update deposit',
'update_transfer' => 'Update transfer',
'updated_withdrawal' => 'Updated withdrawal ":description"',
'updated_deposit' => 'Updated deposit ":description"',
'updated_transfer' => 'Updated transfer ":description"',
'delete_withdrawal' => 'Delete withdrawal ":description"',
'delete_deposit' => 'Delete deposit ":description"',
'delete_transfer' => 'Delete transfer ":description"',
'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"',
'deleted_deposit' => 'Successfully deleted deposit ":description"',
'deleted_transfer' => 'Successfully deleted transfer ":description"',
'stored_journal' => 'Successfully created new transaction ":description"',
'select_transactions' => 'Select transactions',
'stop_selection' => 'Stop selecting transactions',
'edit_selected' => 'Edit selected',
'delete_selected' => 'Delete selected',
'mass_delete_journals' => 'Delete a number of transactions',
'mass_edit_journals' => 'Edit a number of transactions',
'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.',
'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious.',
'mass_deleted_transactions_success' => 'Deleted :amount transaction(s).',
'mass_edited_transactions_success' => 'Updated :amount transaction(s)',
// new user:
'welcome' => 'Welcome to Firefly!',
// 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',
'divided' => 'divided',
'toDivide' => 'left to divide',
// menu and titles, should be recycled as often as possible:
'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' => 'Transfers',
'moneyManagement' => 'Money management',
'piggyBanks' => 'Piggy banks',
'bills' => 'Bills',
'withdrawal' => 'Withdrawal',
'deposit' => 'Deposit',
'account' => 'Account',
'transfer' => 'Transfer',
'Withdrawal' => 'Withdrawal',
'Deposit' => 'Deposit',
'Transfer' => 'Transfer',
'bill' => 'Bill',
'yes' => 'Yes',
'no' => 'No',
'amount' => 'Amount',
'overview' => 'Overview',
'saveOnAccount' => 'Save on account',
'unknown' => 'Unknown',
'daily' => 'Daily',
'monthly' => 'Monthly',
'profile' => 'Profile',
'errors' => 'Errors',
// reports:
'report_default' => 'Default financial report for :start until :end',
'report_audit' => 'Transaction history overview for :start until :end',
'quick_link_reports' => 'Quick links',
'quick_link_default_report' => 'Default financial report',
'quick_link_audit_report' => 'Transaction history overview',
'report_this_month_quick' => 'Current month, all accounts',
'report_this_year_quick' => 'Current year, all accounts',
'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts',
'report_all_time_quick' => 'All-time, all accounts',
'reports_can_bookmark' => 'Remember that reports can be bookmarked.',
'incomeVsExpenses' => 'Income vs. expenses',
'accountBalances' => 'Account balances',
'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',
'active' => 'Active',
'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_type_audit' => 'Transaction history overview (audit)',
'report_type_meta-history' => 'Categories, budgets and bills overview',
'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.',
'report_included_accounts' => 'Included accounts',
'report_date_range' => 'Date range',
'report_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',
'fiscal_year' => 'Fiscal year',
'income_entry' => 'Income from account ":name" between :start and :end',
'expense_entry' => 'Expenses to account ":name" between :start and :end',
'category_entry' => 'Expenses in category ":name" between :start and :end',
'budget_spent_amount' => 'Expenses in budget ":budget" between :start and :end',
'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end',
'no_audit_activity' => 'No activity was recorded on account <a href=":url" title=":account_name">:account_name</a> between :start and :end.',
'audit_end_balance' => 'Account balance of <a href=":url" title=":account_name">:account_name</a> at the end of :end was: :balance',
// charts:
'chart' => 'Chart',
'dayOfMonth' => 'Day of the month',
'month' => 'Month',
'budget' => 'Budget',
'spent' => 'Spent',
'earned' => 'Earned',
'overspent' => 'Overspent',
'left' => 'Left',
'no_budget' => '(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:
'add_money_to_piggy' => 'Add money to piggy bank ":name"',
'piggy_bank' => 'Piggy bank',
'new_piggy_bank' => 'Create new piggy bank',
'store_piggy_bank' => 'Store new piggy bank',
'stored_piggy_bank' => 'Store new piggy bank ":name"',
'account_status' => 'Account status',
'left_for_piggy_banks' => 'Left for piggy banks',
'sum_of_piggy_banks' => 'Sum of piggy banks',
'saved_so_far' => 'Saved so far',
'left_to_save' => 'Left to save',
'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"',
'updated_piggy_bank' => 'Updated 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"',
'cannot_add_amount_piggy' => 'Could not add :amount to ":name".',
'deleted_piggy_bank' => 'Deleted piggy bank ":name"',
'added_amount_to_piggy' => 'Added :amount to ":name"',
'removed_amount_from_piggy' => 'Removed :amount from ":name"',
'cannot_remove_amount_piggy' => 'Could not remove :amount from ":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' => 'Delete tag ":tag"',
'deleted_tag' => 'Deleted tag ":tag"',
'new_tag' => 'Make new tag',
'edit_tag' => 'Edit tag ":tag"',
'updated_tag' => 'Updated tag ":tag"',
'created_tag' => 'Tag ":tag" has been created!',
'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 <span class="label label-info">expensive</span>, <span class="label label-info">bill</span> or <span class="label label-info">for-party</span>. 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 <span class="label label-success"> Christmas dinner with friends</span> 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.',
// administration
'administration' => 'Administration',
'user_administration' => 'User administration',
'list_all_users' => 'All users',
'all_users' => 'All users',
'all_blocked_domains' => 'All blocked domains',
'blocked_domains' => 'Blocked domains',
'no_domains_banned' => 'No domains blocked',
'all_user_domains' => 'All user email address domains',
'all_domains_is_filtered' => 'This list does not include already blocked domains.',
'domain_now_blocked' => 'Domain :domain is now blocked',
'domain_now_unblocked' => 'Domain :domain is now unblocked',
'manual_block_domain' => 'Block a domain by hand',
'block_domain' => 'Block domain',
'no_domain_filled_in' => 'No domain filled in',
'domain_already_blocked' => 'Domain :domain is already blocked',
'domain_is_now_blocked' => 'Domain :domain is now blocked',
'instance_configuration' => 'Configuration',
'firefly_instance_configuration' => 'Configuration options for Firefly III',
'setting_single_user_mode' => 'Single user mode',
'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as wel, assuming they can reach it (when it is connected to the internet).',
'store_configuration' => 'Store configuration',
'hidden_fields_preferences' => 'Not all fields are visible right now. You must enable them in your <a href=":link">settings</a>.',
// split a transaction:
'transaction_meta_data' => 'Transaction meta-data',
'transaction_dates' => 'Transaction dates',
'splits' => 'Splits',
'split_title_withdrawal' => 'Split your new withdrawal',
'split_intro_one_withdrawal' => 'Firefly supports the "splitting" of a withdrawal.',
'split_intro_two_withdrawal' => 'It means that the amount of money you\'ve spent is divided between several destination expense accounts, budgets or categories.',
'split_intro_three_withdrawal' => 'For example: you could split your :total groceries so you pay :split_one from your "daily groceries" budget and :split_two from your "cigarettes" budget.',
'split_table_intro_withdrawal' => 'Split your withdrawal in as many things as you want. By default the transaction will not split, there is just one entry. Add as many splits as you want to, below. Remember that you should not deviate from your total amount. If you do, Firefly will warn you but not correct you.',
'store_splitted_withdrawal' => 'Store splitted withdrawal',
'update_splitted_withdrawal' => 'Update splitted withdrawal',
'split_title_deposit' => 'Split your new deposit',
'split_intro_one_deposit' => 'Firefly supports the "splitting" of a deposit.',
'split_intro_two_deposit' => 'It means that the amount of money you\'ve earned is divided between several source revenue accounts or categories.',
'split_intro_three_deposit' => 'For example: you could split your :total salary so you get :split_one as your base salary and :split_two as a reimbursment for expenses made.',
'split_table_intro_deposit' => 'Split your deposit in as many things as you want. By default the transaction will not split, there is just one entry. Add as many splits as you want to, below. Remember that you should not deviate from your total amount. If you do, Firefly will warn you but not correct you.',
'store_splitted_deposit' => 'Store splitted deposit',
'split_title_transfer' => 'Split your new transfer',
'split_intro_one_transfer' => 'Firefly supports the "splitting" of a transfer.',
'split_intro_two_transfer' => 'It means that the amount of money you\'re moving is divided between several categories or piggy banks.',
'split_intro_three_transfer' => 'For example: you could split your :total move so you get :split_one in one piggy bank and :split_two in another.',
'split_table_intro_transfer' => 'Split your transfer in as many things as you want. By default the transaction will not split, there is just one entry. Add as many splits as you want to, below. Remember that you should not deviate from your total amount. If you do, Firefly will warn you but not correct you.',
'store_splitted_transfer' => 'Store splitted transfer',
'add_another_split' => 'Add another split',
'split-transactions' => 'Split transactions',
'split-new-transaction' => 'Split a new transaction',
'do_split' => 'Do a split',
'split_this_withdrawal' => 'Split this withdrawal',
'split_this_deposit' => 'Split this deposit',
'split_this_transfer' => 'Split this transfer',
'cannot_edit_multiple_source' => 'You cannot edit splitted transaction #:id with description ":description" because it contains multiple source accounts.',
'cannot_edit_multiple_dest' => 'You cannot edit splitted transaction #:id with description ":description" because it contains multiple destination accounts.',
'no_edit_multiple_left' => 'You have selected no valid transactions to edit.',
// import
'configuration_file_help' => 'If you have previously imported data into Firefly III, you may have a configuration file, which will pre-set configuration values for you.',
'import_data_index' => 'Index',
'import_file_type_csv' => 'CSV (comma separated values)',
'import_file_type_help' => 'Select the type of file you will upload',
'import_start' => 'Start the import',
'configure_import' => 'Further configure your import',
'import_finish_configuration' => 'Finish configuration',
'settings_for_import' => 'Settings',
'import_status' => 'Import status',
'import_status_text' => 'The import is currently running, or will start momentarily.',
'import_complete' => 'Import configuration complete!',
'import_complete_text' => 'The import is ready to start. All the configuration you needed to do has been done. Please download the configuration file. It will help you with the import should it not go as planned. To actually run the import, you can either execute the following command in your console, or run the web-based import. Depending on your configuration, the console import will give you more feedback.',
'import_download_config' => 'Download configuration',
'import_start_import' => 'Start import',
'import_intro_beta' => 'The import function of Firefly III is in beta. Many users of Firefly III have tried many different files. Although each individual compontent of this import routine works (really), the combination might break. If your file cannot be imported by Firefly, please read <a href="https://github.com/JC5/firefly-iii/wiki/Submit-issues-with-sensitive-data-in-them">this wiki page</a> so I can fix the problem you have run into.',
'import_data' => 'Import data',
'import_data_full' => 'Import data into Firefly III',
'import' => 'Import',
'import_intro_text' => 'Welcome to the Firefly III data import routine. At the moment, this routine can help you import files into Firefly. To do so, you must download or export transactions from other systems or software, and upload them here. The next steps will let you help Firefly III determin what the content is of your file, and how to handle it. Please select a file, and read all instructions carefully.',
'import_file_help' => 'Select your file',
'import_status_settings_complete' => 'The import is ready to start.',
'import_status_import_complete' => 'The import has completed.',
'import_status_import_running' => 'The import is currently running. Please be patient.',
'import_status_header' => 'Import status and progress',
'import_status_errors' => 'Import errors',
'import_status_report' => 'Import report',
'import_finished' => 'Import has finished',
'import_error_single' => 'An error has occured during the import.',
'import_error_multi' => 'Some errors occured during the import.',
'import_error_fatal' => 'There was an error during the import routine. Please check the log files. The error seems to be:',
'import_error_timeout' => 'The import seems to have timed out. If this error persists, please import your data using the console command.',
'import_double' => 'Row #:row: This row has been imported before, and is stored in <a href=":link">:description</a>.',
'import_finished_all' => 'The import has finished. Please check out the results below.',
'import_with_key' => 'Import with key \':key\'',
'import_finished_report' => 'The import has finished. Please note any errors in the block above this line. All transactions imported during this particular session have been tagged, and you can check them out below. ',
'import_finished_link' => 'The transactions imported can be found in tag <a href=":link" class="label label-success" style="font-size:100%;font-weight:normal;">:tag</a>.',
];

View File

@ -0,0 +1,154 @@
<?php
/**
* form.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
return [
// new user:
'bank_name' => 'Name der Bank',
'bank_balance' => 'Kontostand',
'savings_balance' => 'Savings balance',
'credit_card_limit' => 'Kreditkartenlimit',
'automatch' => 'Match automatically',
'skip' => 'Überspringen',
'name' => 'Name',
'active' => 'Aktiv',
'amount_min' => 'Mindestbetrag',
'amount_max' => 'Höchstbetrag',
'match' => 'Matches on',
'repeat_freq' => 'Repeats',
'journal_currency_id' => 'Währung',
'journal_amount' => 'Amount',
'journal_asset_source_account' => 'Asset account (source)',
'journal_source_account_name' => 'Revenue account (source)',
'journal_source_account_id' => 'Asset account (source)',
'account_from_id' => 'From account',
'account_to_id' => 'To account',
'journal_destination_account_id' => 'Asset account (destination)',
'asset_destination_account' => 'Asset account (destination)',
'asset_source_account' => 'Asset account (source)',
'journal_description' => 'Description',
'split_journal' => 'Split this transaction',
'split_journal_explanation' => 'Split this transaction in multiple parts',
'currency' => 'Währung',
'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' => 'Sparschwein',
'returnHere' => 'Return here',
'returnHereExplanation' => 'After storing, return here to create another one.',
'returnHereUpdateExplanation' => 'After updating, return here.',
'description' => 'Beschreibung',
'expense_account' => 'Expense account',
'revenue_account' => 'Revenue account',
'amount' => 'Amount',
'date' => 'Date',
'interest_date' => 'Interest date',
'book_date' => 'Buchungsdatum',
'process_date' => 'Processing date',
'category' => 'Kategorie',
'tags' => 'Tags',
'deletePermanently' => 'Dauerhaft löschen',
'cancel' => 'Abbrechen',
'targetdate' => 'Target date',
'tag' => 'Tag',
'under' => 'Under',
'symbol' => 'Zeichen',
'code' => 'Code',
'iban' => 'IBAN',
'accountNumber' => 'Account number',
'has_headers' => 'Headers',
'date_format' => 'Date format',
'specifix' => 'Bank- or file specific fixes',
'attachments[]' => 'Anhänge',
'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' => '(kein Sparschwein)',
'title' => 'Titel',
'notes' => 'Notizen',
'filename' => 'Dateiname',
'mime' => 'MIME-Typ',
'size' => 'Größe',
'trigger' => 'Trigger',
'stop_processing' => 'Stop processing',
'start_date' => 'Start of range',
'end_date' => 'End of range',
'export_start_range' => 'Start of export range',
'export_end_range' => 'End of export range',
'export_format' => 'Dateiformat',
'include_attachments' => 'Include uploaded attachments',
'include_config' => 'Include configuration file',
'include_old_uploads' => 'Include imported data',
'accounts' => 'Export transactions from these accounts',
'delete_account' => 'Delete account ":name"',
'delete_bill' => 'Lösche Rechnung ":name"',
'delete_budget' => 'Lösche Budget ":name"',
'delete_category' => 'Lösche Kategorie ":name"',
'delete_currency' => 'Lösche Währung ":name"',
'delete_journal' => 'Delete transaction with description ":description"',
'delete_attachment' => 'Lösche Anhang ":name"',
'delete_rule' => 'Delete rule ":title"',
'delete_rule_group' => 'Delete rule group ":title"',
'attachment_areYouSure' => 'Sind Sie sicher, dass Sie den Anhang ":name" löschen möchten?',
'account_areYouSure' => 'Sind Sie sicher, dass Sie das Konto ":name" löschen möchten?',
'bill_areYouSure' => 'Sind Sie sicher, dass Sie die Rechnung ":name" löschen möchten?',
'rule_areYouSure' => 'Are you sure you want to delete the rule titled ":title"?',
'ruleGroup_areYouSure' => 'Are you sure you want to delete the rule group titled ":title"?',
'budget_areYouSure' => 'Sind Sie sicher, dass Sie das Budget ":name" löschen möchten?',
'category_areYouSure' => 'Sind Sie sicher, dass Sie die Kategorie ":name" löschen möchten?',
'currency_areYouSure' => 'Sind Sie sicher, dass Sie die Währung ":name" löschen möchten?',
'piggyBank_areYouSure' => 'Sind Sie sicher, dass Sie das Sparschwein ":name" löschen möchten?',
'journal_areYouSure' => 'Are you sure you want to delete the transaction described ":description"?',
'mass_journal_are_you_sure' => 'Are you sure you want to delete these transactions?',
'tag_areYouSure' => 'Sind Sie sicher, dass Sie den Tag ":name" löschen möchten?',
'permDeleteWarning' => 'Das Löschen von Dingen in Firefly ist dauerhaft und kann nicht rückgängig gemacht werden.',
'mass_make_selection' => 'Sie können das Löschen von Elementen verhinden, indem Sie die Checkbox entfernen.',
'delete_all_permanently' => 'Ausgewähltes dauerhaft löschen',
'update_all_journals' => 'Diese Transaktionen aktualisieren',
'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_rules' => 'The only rule connected to this rule group will be deleted as well.|All :count rules connected to this rule group 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.',
// admin
'domain' => 'Domain',
'single_user_mode' => 'Single user mode',
// import
'import_file' => 'Datei importieren',
'configuration_file' => 'Konfigurationsdatei',
'import_file_type' => 'Import file type',
'csv_comma' => 'Ein Komma (,)',
'csv_semicolon' => 'Ein Semikolon (;)',
'csv_tab' => 'Ein Tab (unsichtbar)',
'csv_delimiter' => 'CSV field delimiter',
'csv_import_account' => 'Default import account',
'csv_config' => 'CSV import configuration',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'internal_reference' => 'Internal reference',
];

View File

@ -0,0 +1,85 @@
<?php
/**
* help.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
return [
// tour!
'main-content-title' => 'Willkommen bei 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' => 'Alle Ihre Konten',
'account-menu-text' => 'Hier finden Sie alle Konten, die Sie erstellt haben.',
'budget-menu-title' => 'Budgets',
'budget-menu-text' => 'Use this page to organise your finances and limit spending.',
'report-menu-title' => 'Berichte',
'report-menu-text' => 'Check this out when you want a solid overview of your finances.',
'transaction-menu-title' => 'Transaktionen',
'transaction-menu-text' => 'Alle Transaktionen, die Sie erstellt haben, finden Sie hier.',
'option-menu-title' => 'Optionen',
'option-menu-text' => 'Dies ist ziemlich selbsterklärend.',
'main-content-end-title' => 'Ende!',
'main-content-end-text' => 'Denken Sie daran, dass jede Seite ein kleines Fragezeichen in der oberen rechten Ecke hat. Klicken Sie darauf um Hilfe zur aktuellen Seite zu erhalten.',
'index' => 'index',
'home' => 'home',
'accounts-index' => 'konten.index',
'accounts-create' => 'konten.erstellen',
'accounts-edit' => 'konten.bearbeiten',
'accounts-delete' => 'konten.löschen',
'accounts-show' => 'können.zeigen',
'attachments-edit' => 'anhänge.bearbeiten',
'attachments-delete' => 'anhänge.löschen',
'attachments-show' => 'anhänge.zeigen',
'attachments-preview' => 'anhänge.vorschau',
'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',
'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' => 'suchen',
'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',
];

View File

@ -0,0 +1,71 @@
<?php
/**
* list.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
return [
'buttons' => 'Buttons',
'icon' => 'Icon',
'create_date' => 'Erstellt am',
'update_date' => 'Aktualisiert am',
'balance_before' => 'Balance before',
'balance_after' => 'Balance after',
'name' => 'Name',
'role' => 'Role',
'currentBalance' => 'Aktueller Kontostand',
'active' => 'Is active?',
'lastActivity' => 'Letzte Aktivität',
'balanceDiff' => 'Differenz des Kontostandes zwischen :start und :end',
'matchedOn' => 'Matched on',
'matchesOn' => 'Matched on',
'account_type' => 'Account type',
'new_balance' => 'New balance',
'account' => 'Account',
'matchingAmount' => 'Amount',
'lastMatch' => 'Last match',
'split_number' => 'Split #',
'destination' => 'Destination',
'source' => 'Source',
'expectedMatch' => 'Expected match',
'automatch' => 'Auto match?',
'repeat_freq' => 'Repeats',
'description' => 'Description',
'amount' => 'Amount',
'date' => 'Datum',
'interest_date' => 'Interest date',
'book_date' => 'Book date',
'process_date' => 'Processing date',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'interal_reference' => 'Internal reference',
'notes' => 'Notes',
'from' => 'From',
'piggy_bank' => 'Sparschwein',
'to' => 'To',
'budget' => 'Budget',
'category' => 'Kategorie',
'bill' => 'Rechnung',
'withdrawal' => 'Withdrawal',
'deposit' => 'Einlage',
'transfer' => 'Transfer',
'type' => 'Type',
'completed' => 'Completed',
'iban' => 'IBAN',
'paid_current_period' => 'Paid this period',
'email' => 'E-Mail',
'registered_at' => 'Registered at',
'is_activated' => 'Is activated',
'is_blocked' => 'Is blocked',
'is_admin' => 'Is admin',
'has_two_factor' => 'Has 2FA',
'confirmed_from' => 'Confirmed from',
'registered_from' => 'Registered from',
'blocked_code' => 'Block code',
'domain' => 'Domain',
'registration_attempts' => 'Registration attempts',
];

View File

@ -0,0 +1,13 @@
<?php
/**
* pagination.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
return [
'previous' => '&laquo; Vorherige',
'next' => 'Nächste &raquo;',
];

View File

@ -0,0 +1,17 @@
<?php
/**
* passwords.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
return [
'password' => 'Passwörter müssen mindestens 6 Zeichen lang sein und übereinstimmen.',
'user' => 'Wir können keinen Benutzer mit dieser E-Mail Adresse finden.',
'token' => 'Der Token zum Zurücksetzen des Passwortes ist ungültig.',
'sent' => 'Wir haben Ihnen einen Link zum Zurücksetzen des Passworts zugesendet!',
'reset' => 'Ihr Passwort wurde zurückgesetzt!',
'blocked' => 'Netter Versuch.',
];

View File

@ -0,0 +1,80 @@
<?php
/**
* validation.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
return [
'iban' => 'Dies ist keine gültige IBAN.',
'unique_account_number_for_user' => 'It looks like this account number is already in use.',
'rule_trigger_value' => 'This value is invalid for the selected trigger.',
'rule_action_value' => 'This value is invalid for the selected action.',
'invalid_domain' => 'Aufgrund von Sicherheitsbeschränkungen ist eine Registrierung von dieser Domain nicht zugelassen.',
'file_already_attached' => 'Die hochgeladene Datei ":name" ist diesem Objekt bereits angehängt.',
'file_attached' => 'Datei ":name" erfolgreich hochgeladen.',
'file_invalid_mime' => 'Die Datei ":name" ist vom Typ ":mime", welcher nicht zum Upload zugelassen ist.',
'file_too_large' => 'Die Datei ":name" ist zu groß.',
'belongs_to_user' => 'Der Wert von :attribute ist nicht bekannt',
'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.',
'unique_object_for_user' => 'This name is already in use',
'unique_account_for_user' => 'This account name 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.',
'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.',
'string' => 'The :attribute must be a string.',
'url' => 'The :attribute format is invalid.',
'timezone' => 'The :attribute must be a valid zone.',
'2fa_code' => 'The :attribute field is invalid.',
];

View File

@ -10,10 +10,8 @@
return [
'home' => 'Home',
'cash_accounts' => 'Cash accounts',
'edit_account' => 'Edit account ":name"',
'edit_currency' => 'Edit currencies ":name"',
'delete_currency' => 'Delete currencies ":name"',
'edit_currency' => 'Edit currency ":name"',
'delete_currency' => 'Delete currency ":name"',
'newPiggyBank' => 'Create a new piggy bank',
'edit_piggyBank' => 'Edit piggy bank ":name"',
'preferences' => 'Preferences',
@ -24,11 +22,6 @@ return [
'edit_bill' => 'Edit bill ":name"',
'delete_bill' => 'Delete bill ":name"',
'reports' => 'Reports',
'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',
'searchResult' => 'Search for ":query"',
'withdrawal_list' => 'Expenses',
'deposit_list' => 'Revenue, income and deposits',

View File

@ -17,7 +17,6 @@ return [
'header_help' => 'Check this if the first row of your CSV file are the column titles',
'date_help' => 'Date time format in your CSV. Follow the format like <a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters">this page</a> indicates. The default value will parse dates that look like this: :dateExample.',
'delimiter_help' => 'Choose the field delimiter that is used in your input file. If not sure, comma is the safest option.',
'config_file_help' => 'Select your CSV import configuration here. If you do not know what this is, ignore it. It will be explained later.',
'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.',
'upload_not_writeable' => 'The grey box contains a file path. It should be writeable. Please make sure it is.',

View File

@ -9,10 +9,8 @@
return [
// general stuff:
'language_incomplete' => 'This language is not yet fully translated',
'test' => 'You have selected English.',
'language_incomplete' => 'incomplete translation',
'close' => 'Close',
'pleaseHold' => 'Please hold...',
'actions' => 'Actions',
'edit' => 'Edit',
'delete' => 'Delete',
@ -23,8 +21,6 @@ return [
'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"',
@ -32,7 +28,6 @@ return [
'deleted_error' => 'These credentials do not match our records.',
'general_blocked_error' => 'Your account has been disabled, so you cannot login.',
'expired_error' => 'Your account has expired, and can no longer be used.',
'unbalanced_error' => 'Your transactions are unbalanced. This means a withdrawal, deposit or transfer was not stored properly. Please check your accounts and transactions for errors (unbalanced amount :amount).',
'removed_amount' => 'Removed :amount',
'added_amount' => 'Added :amount',
'asset_account_role_help' => 'Any extra options resulting from your choice can be set later.',
@ -250,8 +245,6 @@ return [
// 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',
@ -281,8 +274,26 @@ return [
'transaction_page_size_title' => 'Page size',
'transaction_page_size_help' => 'Any list of transactions shows at most this many transactions',
'transaction_page_size_label' => 'Page size',
'budget_maximum' => 'Budget maximum',
'between_dates' => '(:start and :end)',
'pref_optional_fields_transaction' => 'Optional fields for transactions',
'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.',
'optional_tj_date_fields' => 'Date fields',
'optional_tj_business_fields' => 'Business fields',
'optional_tj_attachment_fields' => 'Attachment fields',
'pref_optional_tj_interest_date' => 'Interest date',
'pref_optional_tj_book_date' => 'Book date',
'pref_optional_tj_process_date' => 'Processing date',
'pref_optional_tj_due_date' => 'Due date',
'pref_optional_tj_payment_date' => 'Payment date',
'pref_optional_tj_invoice_date' => 'Invoice date',
'pref_optional_tj_internal_reference' => 'Internal reference',
'pref_optional_tj_notes' => 'Notes',
'pref_optional_tj_attachments' => 'Attachments',
'optional_field_meta_dates' => 'Dates',
'optional_field_meta_business' => 'Business',
'optional_field_attachments' => 'Attachments',
'optional_field_meta_data' => 'Optional meta data',
// profile:
'change_your_password' => 'Change your password',
@ -338,11 +349,10 @@ return [
// currencies:
'create_currency' => 'Create a new currency',
'edit_currency' => 'Edit currency ":name"',
'store_currency' => 'Store new currency',
'update_currency' => 'Update currency',
'new_default_currency' => ':name is now the default currency.',
'cannot_delete_currency' => 'Cannot delete :name because there are still transactions attached to it!',
'cannot_delete_currency' => 'Cannot delete :name because it is still in use.',
'deleted_currency' => 'Currency :name deleted',
'created_currency' => 'Currency :name created',
'updated_currency' => 'Currency :name updated',
@ -364,16 +374,13 @@ return [
'mandatoryFields' => 'Mandatory fields',
'optionalFields' => 'Optional fields',
'options' => 'Options',
'something' => 'Something!',
// budgets:
'create_new_budget' => 'Create a new budget',
'store_new_budget' => 'Store new budget',
'stored_new_budget' => 'Stored new budget ":name"',
'availableIn' => 'Available in :date',
'available_between' => 'Available between :start and :end',
'transactionsWithoutBudget' => 'Expenses without budget',
'transactionsWithoutBudgetDate' => 'Expenses without budget in :date',
'transactions_no_budget' => 'Expenses without budget between :start and :end',
'spent_between' => 'Spent between :start and :end',
'createBudget' => 'New budget',
@ -439,9 +446,6 @@ return [
'revenue_accounts' => 'Revenue accounts',
'cash_accounts' => 'Cash accounts',
'Cash account' => 'Cash account',
'accountExtraHelp_asset' => '',
'accountExtraHelp_expense' => '',
'accountExtraHelp_revenue' => '',
'account_type' => 'Account type',
'save_transactions_by_moving' => 'Save these transaction(s) by moving them to another account:',
'stored_new_account' => 'New account ":name" stored!',
@ -492,9 +496,6 @@ return [
// 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',
@ -509,12 +510,10 @@ return [
'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',
@ -537,7 +536,6 @@ return [
'moneyManagement' => 'Money management',
'piggyBanks' => 'Piggy banks',
'bills' => 'Bills',
'createNew' => 'Create new',
'withdrawal' => 'Withdrawal',
'deposit' => 'Deposit',
'account' => 'Account',
@ -549,7 +547,6 @@ return [
'yes' => 'Yes',
'no' => 'No',
'amount' => 'Amount',
'newBalance' => 'New balance',
'overview' => 'Overview',
'saveOnAccount' => 'Save on account',
'unknown' => 'Unknown',
@ -725,6 +722,10 @@ return [
'domain_is_now_blocked' => 'Domain :domain is now blocked',
'instance_configuration' => 'Configuration',
'firefly_instance_configuration' => 'Configuration options for Firefly III',
'setting_single_user_mode' => 'Single user mode',
'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as wel, assuming they can reach it (when it is connected to the internet).',
'store_configuration' => 'Store configuration',
'hidden_fields_preferences' => 'Not all fields are visible right now. You must enable them in your <a href=":link">settings</a>.',
// split a transaction:
'transaction_meta_data' => 'Transaction meta-data',
@ -797,4 +798,6 @@ return [
'import_with_key' => 'Import with key \':key\'',
'import_finished_report' => 'The import has finished. Please note any errors in the block above this line. All transactions imported during this particular session have been tagged, and you can check them out below. ',
'import_finished_link' => 'The transactions imported can be found in tag <a href=":link" class="label label-success" style="font-size:100%;font-weight:normal;">:tag</a>.',
];

View File

@ -133,6 +133,7 @@ return [
// admin
'domain' => 'Domain',
'single_user_mode' => 'Single user mode',
// import
'import_file' => 'Import file',
@ -146,4 +147,8 @@ return [
'csv_config' => 'CSV import configuration',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'internal_reference' => 'Internal reference',
];

View File

@ -39,6 +39,11 @@ return [
'interest_date' => 'Interest date',
'book_date' => 'Book date',
'process_date' => 'Processing date',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'interal_reference' => 'Internal reference',
'notes' => 'Notes',
'from' => 'From',
'piggy_bank' => 'Piggy bank',
'to' => 'To',

View File

@ -10,10 +10,8 @@
return [
'home' => 'Accueil',
'cash_accounts' => 'Comptes de trésorerie',
'edit_account' => 'Editer le compte : ":name"',
'edit_currency' => 'Editer la devise : ";name"',
'delete_currency' => 'Supprimer la devise ":name"',
'edit_currency' => 'Edit currency ":name"',
'delete_currency' => 'Delete currency ":name"',
'newPiggyBank' => 'Créer une nouvelle tirelire',
'edit_piggyBank' => 'Modifier la tirelire ":name"',
'preferences' => 'Préférences',
@ -24,11 +22,6 @@ return [
'edit_bill' => 'Editer la facture : ":name"',
'delete_bill' => 'Supprimer la facture ":name"',
'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',
'searchResult' => 'Resultat de recherche pour ":query"',
'withdrawal_list' => 'Dépenses',
'deposit_list' => 'Revenue, Salaire et depots ',

View File

@ -17,7 +17,6 @@ return [
'header_help' => 'Check this if the first row of your CSV file are the column titles',
'date_help' => 'Date time format in your CSV. Follow the format like <a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters">this page</a> indicates. The default value will parse dates that look like this: :dateExample.',
'delimiter_help' => 'Choose the field delimiter that is used in your input file. If not sure, comma is the safest option.',
'config_file_help' => 'Select your CSV import configuration here. If you do not know what this is, ignore it. It will be explained later.',
'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.',
'upload_not_writeable' => 'The grey box contains a file path. It should be writeable. Please make sure it is.',

View File

@ -9,10 +9,8 @@
return [
// general stuff:
'language_incomplete' => 'Cette langue n\'est pas encore complètement traduite',
'test' => 'Vous avez choisi l\'anglais.',
'language_incomplete' => 'incomplete translation',
'close' => 'Fermer',
'pleaseHold' => 'Veuillez patienter...',
'actions' => 'Actions',
'edit' => 'Modifier',
'delete' => 'Supprimer',
@ -23,8 +21,6 @@ return [
'cancel' => 'Annuler',
'from' => 'Depuis',
'to' => 'A',
'total_sum' => 'Montant total ',
'period_sum' => 'Somme pour la période',
'showEverything' => 'Tout Afficher',
'never' => 'Jamais',
'search_results_for' => 'Résultats de recherche pour ":query"',
@ -32,7 +28,6 @@ return [
'deleted_error' => 'Ces informations d\'identification ne sont pas présentes dans nos données.',
'general_blocked_error' => 'Votre compte a été désactivé, vous ne pouvez plus vous connecter.',
'expired_error' => 'Votre compte a expiré et ne peut plus être utilisé.',
'unbalanced_error' => 'Vos transactions sont mal équilibrées. Cela signifie qu\'un retrait, un dépôt ou un transfert na pas été enregistré correctement. Vérifier vos comptes et opérations pour trouver des erreurs (montant mal équilibré: montant).',
'removed_amount' => 'Supprimé :amount',
'added_amount' => 'Ajouté :amount',
'asset_account_role_help' => 'Toutes options supplémentaires résultant de votre choix peut être réglée plus tard.',
@ -250,8 +245,6 @@ return [
// preferences
'pref_home_screen_accounts' => 'Comptes de lécran daccueil',
'pref_home_screen_accounts_help' => 'Quel compte devrait être affiché sur l\'écran daccueil?',
'pref_budget_settings' => 'Paramètres de budget',
'pref_budget_settings_help' => 'Quel est le montant maximum dargent qu\'une enveloppe budgétaire peut contenir ?',
'pref_view_range' => 'Voir l\'étendue',
'pref_view_range_help' => 'Certains graphiques sont automatiquement groupés par périodes. Quelle période préférez-vous ?',
'pref_1D' => 'Un jour',
@ -281,8 +274,26 @@ return [
'transaction_page_size_title' => 'Taille de la page',
'transaction_page_size_help' => 'Any list of transactions shows at most this many transactions',
'transaction_page_size_label' => 'Taille de la page',
'budget_maximum' => 'Budget maximum',
'between_dates' => '(:start et :end)',
'pref_optional_fields_transaction' => 'Optional fields for transactions',
'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.',
'optional_tj_date_fields' => 'Date fields',
'optional_tj_business_fields' => 'Business fields',
'optional_tj_attachment_fields' => 'Attachment fields',
'pref_optional_tj_interest_date' => 'Interest date',
'pref_optional_tj_book_date' => 'Book date',
'pref_optional_tj_process_date' => 'Processing date',
'pref_optional_tj_due_date' => 'Due date',
'pref_optional_tj_payment_date' => 'Payment date',
'pref_optional_tj_invoice_date' => 'Invoice date',
'pref_optional_tj_internal_reference' => 'Internal reference',
'pref_optional_tj_notes' => 'Notes',
'pref_optional_tj_attachments' => 'Attachments',
'optional_field_meta_dates' => 'Dates',
'optional_field_meta_business' => 'Business',
'optional_field_attachments' => 'Attachments',
'optional_field_meta_data' => 'Optional meta data',
// profile:
'change_your_password' => 'Modifier votre mot de passe',
@ -338,11 +349,10 @@ return [
// currencies:
'create_currency' => 'Créer une nouvelle devise',
'edit_currency' => 'Modifier la devise ":name"',
'store_currency' => 'Créer une nouvelle devise',
'update_currency' => 'Mise à jour de la balance',
'new_default_currency' => ':name is now the default currency.',
'cannot_delete_currency' => 'Cannot delete :name because there are still transactions attached to it!',
'cannot_delete_currency' => 'Cannot delete :name because it is still in use.',
'deleted_currency' => 'Devise ":name" supprimée',
'created_currency' => 'Devise ":name" créée',
'updated_currency' => 'Devise ":name" mise à jour',
@ -364,16 +374,13 @@ return [
'mandatoryFields' => 'Champs obligatoires',
'optionalFields' => 'Champs optionnels',
'options' => 'Options',
'something' => 'Quelque chose !',
// budgets:
'create_new_budget' => 'Créer un nouveau budget',
'store_new_budget' => 'Créer un nouveau budget',
'stored_new_budget' => 'Nouveau budget ":name" créé',
'availableIn' => 'Disponible depuis',
'available_between' => 'Available between :start and :end',
'transactionsWithoutBudget' => 'Dépenses non budgétisées',
'transactionsWithoutBudgetDate' => 'Dépenses non budgétisées en date du :date',
'transactions_no_budget' => 'Dépenses non budgetisées entre le :start et le :end',
'spent_between' => 'Dépensé entre le :start et le :end',
'createBudget' => 'Nouveau budget',
@ -439,9 +446,6 @@ return [
'revenue_accounts' => 'Comptes de recettes',
'cash_accounts' => 'Comptes de trésorerie',
'Cash account' => 'Compte de trésorerie',
'accountExtraHelp_asset' => '',
'accountExtraHelp_expense' => '',
'accountExtraHelp_revenue' => '',
'account_type' => 'Type de compte',
'save_transactions_by_moving' => 'Enregistrer ces opération(s) en les déplaçant vers un autre compte :',
'stored_new_account' => 'Nouveau compte ":name" créé !',
@ -492,9 +496,6 @@ return [
// new user:
'welcome' => 'Bienvenue sur Firefly !',
'createNewAsset' => 'Créer un nouveau compte dactif pour commencer. ' .
'Cela vous permettra de créer des opérations et de commencer votre gestion financière',
'createNewAssetButton' => 'Créer un nouveau compte dactif',
// home page:
'yourAccounts' => 'Vos comptes',
@ -509,12 +510,10 @@ return [
'moneyOut' => 'Argent sortant',
'billsToPay' => 'Factures à payer',
'billsPaid' => 'Factures payées',
'viewDetails' => 'Voir les détails',
'divided' => 'divisé',
'toDivide' => 'Restant à dépenser',
// menu and titles, should be recycled as often as possible:
'toggleNavigation' => 'Basculer la navigation',
'currency' => 'Devise',
'preferences' => 'Préférences',
'logout' => 'Se déconnecter',
@ -537,7 +536,6 @@ return [
'moneyManagement' => 'Gérer les comptes',
'piggyBanks' => 'Tirelires',
'bills' => 'Factures',
'createNew' => 'Créer un nouveau',
'withdrawal' => 'Retrait',
'deposit' => 'Dépôt',
'account' => 'Compte',
@ -549,7 +547,6 @@ return [
'yes' => 'Oui',
'no' => 'Non',
'amount' => 'Montant',
'newBalance' => 'Nouveau solde',
'overview' => 'Vue globale',
'saveOnAccount' => 'Sauvegarder le compte',
'unknown' => 'Inconnu',
@ -725,6 +722,10 @@ return [
'domain_is_now_blocked' => 'Domain :domain is now blocked',
'instance_configuration' => 'Configuration',
'firefly_instance_configuration' => 'Configuration options for Firefly III',
'setting_single_user_mode' => 'Single user mode',
'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as wel, assuming they can reach it (when it is connected to the internet).',
'store_configuration' => 'Store configuration',
'hidden_fields_preferences' => 'Not all fields are visible right now. You must enable them in your <a href=":link">settings</a>.',
// split a transaction:
'transaction_meta_data' => 'Transaction meta-data',
@ -797,4 +798,6 @@ return [
'import_with_key' => 'Import with key \':key\'',
'import_finished_report' => 'The import has finished. Please note any errors in the block above this line. All transactions imported during this particular session have been tagged, and you can check them out below. ',
'import_finished_link' => 'The transactions imported can be found in tag <a href=":link" class="label label-success" style="font-size:100%;font-weight:normal;">:tag</a>.',
];

View File

@ -133,6 +133,7 @@ return [
// admin
'domain' => 'Domain',
'single_user_mode' => 'Single user mode',
// import
'import_file' => 'Import file',
@ -146,4 +147,8 @@ return [
'csv_config' => 'Configuration d\'importation CSV',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'internal_reference' => 'Internal reference',
];

View File

@ -39,6 +39,11 @@ return [
'interest_date' => 'Date des intérêts',
'book_date' => 'Book date',
'process_date' => 'Date de traitement',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'interal_reference' => 'Internal reference',
'notes' => 'Notes',
'from' => 'Depuis',
'piggy_bank' => 'Tirelire',
'to' => 'À',

View File

@ -10,8 +10,6 @@
return [
'home' => 'Home',
'cash_accounts' => 'Contant geldrekeningen',
'edit_account' => 'Wijzig rekening ":name"',
'edit_currency' => 'Wijzig valuta ":name"',
'delete_currency' => 'Verwijder valuta ":name"',
'newPiggyBank' => 'Nieuw spaarpotje',
@ -24,11 +22,6 @@ return [
'edit_bill' => 'Wijzig contract ":name"',
'delete_bill' => 'Verwijder contract ":name"',
'reports' => 'Overzichten',
'monthly_report' => 'Maandoverzicht :date',
'monthly_report_shared' => 'Maandoverzicht :date (inclusief gedeelde rekeningen)',
'yearly_report' => 'Jaaroverzicht :date',
'yearly_report_shared' => 'Jaaroverzicht :date (inclusief gedeelde rekeningen)',
'budget_report' => 'Budgetoverzicht :date',
'searchResult' => 'Zoeken naar ":query"',
'withdrawal_list' => 'Uitgaven',
'deposit_list' => 'Inkomsten',

View File

@ -17,7 +17,6 @@ return [
'header_help' => 'Vink hier als de eerste rij kolomtitels bevat',
'date_help' => 'Datum/tijd formaat in jouw CSV bestand. Volg het formaat zoals ze het <a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters">op deze pagina</a> uitleggen. Het standaardformaat ziet er zo uit: :dateExample.',
'delimiter_help' => 'Kies het veldscheidingsteken dat in jouw bestand wordt gebruikt. Als je het niet zeker weet, is de komma de beste optie.',
'config_file_help' => 'Voer hier je configuratiebestand in. Als je deze niet hebt, geen zorgen. Latere stappen leggen dit uit.',
'import_account_help' => 'Als jouw CSV bestand geen referenties bevat naar jouw rekening(en), geef dan hier aan om welke rekening het gaat.',
'upload_not_writeable' => 'Het grijze vlak bevat een bestandspad. Dit pad moet schrijfbaar zijn.',

View File

@ -9,10 +9,8 @@
return [
// general stuff:
'language_incomplete' => 'Deze taal is nog niet helemaal af',
'test' => 'Nederlands geselecteerd!',
'language_incomplete' => 'onvolledige vertaling',
'close' => 'Sluiten',
'pleaseHold' => 'Momentje...',
'actions' => 'Acties',
'edit' => 'Wijzig',
'delete' => 'Verwijder',
@ -23,8 +21,6 @@ return [
'cancel' => 'Annuleren',
'from' => 'Van',
'to' => 'Tot',
'total_sum' => 'Totale som',
'period_sum' => 'Som van periode',
'showEverything' => 'Laat alles zien',
'never' => 'Nooit',
'search_results_for' => 'Zoekresultaten voor ":query"',
@ -32,7 +28,6 @@ return [
'deleted_error' => 'Deze gegevens zijn niet correct.',
'general_blocked_error' => 'Je account is uitgeschakeld, je kan helaas niet inloggen.',
'expired_error' => 'Je account is verlopen en kan niet meer worden gebruikt.',
'unbalanced_error' => 'Je transacties zijn uit balans. Eén of meerdere overschrijvingen, uitgaves of inkomsten zijn niet goed opgeslagen. Controleer je rekeningen en transacties (je bent :amount uit balans).',
'removed_amount' => ':amount weggehaald',
'added_amount' => ':amount toegevoegd',
'asset_account_role_help' => 'Voorkeuren die voortkomen uit je keuze hier kan je later aangeven.',
@ -250,8 +245,6 @@ return [
// preferences
'pref_home_screen_accounts' => 'Voorpaginarekeningen',
'pref_home_screen_accounts_help' => 'Welke betaalrekeningen wil je op de voorpagina zien?',
'pref_budget_settings' => 'Budgetinstellingen',
'pref_budget_settings_help' => 'Wat is het maximale bedrag dat je voor een budget kan instellen?',
'pref_view_range' => 'Bereik',
'pref_view_range_help' => 'Sommige pagina\'s springen naar een standaard bereik. Welk bereik heeft jouw voorkeur?',
'pref_1D' => 'Eén dag',
@ -281,8 +274,26 @@ return [
'transaction_page_size_title' => 'Paginalengte',
'transaction_page_size_help' => 'Elke lijst met transacties er op is zo lang',
'transaction_page_size_label' => 'Paginalengte',
'budget_maximum' => 'Maximale budgetgrootte',
'between_dates' => '(:start en :end)',
'pref_optional_fields_transaction' => 'Optionele velden voor transacties',
'pref_optional_fields_transaction_help' => 'Standaard staan niet alle velden aan (vanwege het overzicht). Hier kan je zulke extra velden alsnog aanzetten, als je denkt dat ze handig zijn. Als je een veld uitzet, maar deze heeft wel degelijk een waarde, dan is-ie altijd zichtbaar, wat je ook doet.',
'optional_tj_date_fields' => 'Datumvelden',
'optional_tj_business_fields' => 'Zakelijke velden',
'optional_tj_attachment_fields' => 'Bijlagen',
'pref_optional_tj_interest_date' => 'Rentedatum',
'pref_optional_tj_book_date' => 'Boekdatum',
'pref_optional_tj_process_date' => 'Verwerkingsdatum',
'pref_optional_tj_due_date' => 'Vervaldatum',
'pref_optional_tj_payment_date' => 'Betalingsdatum',
'pref_optional_tj_invoice_date' => 'Factuurdatum',
'pref_optional_tj_internal_reference' => 'Interne verwijzing',
'pref_optional_tj_notes' => 'Notities',
'pref_optional_tj_attachments' => 'Bijlagen',
'optional_field_meta_dates' => 'Data',
'optional_field_meta_business' => 'Zakelijk',
'optional_field_attachments' => 'Bijlagen',
'optional_field_meta_data' => 'Optionele meta-gegevens',
// profile:
'change_your_password' => 'Verander je wachtwoord',
@ -338,11 +349,10 @@ return [
// currencies:
'create_currency' => 'Voeg nieuwe valuta toe',
'edit_currency' => 'Wijzig valuta ":name"',
'store_currency' => 'Sla nieuwe valuta op',
'update_currency' => 'Wijzig valuta',
'new_default_currency' => ':name is nu de standaard valuta.',
'cannot_delete_currency' => 'Kan :name niet verwijderen omdat er nog transacties van zijn!',
'cannot_delete_currency' => 'Kan ":name" niet verwijderen, want deze is in gebruik.',
'deleted_currency' => 'Valuta :name verwijderd',
'created_currency' => 'Nieuwe valuta :name opgeslagen',
'updated_currency' => 'Valuta :name bijgewerkt',
@ -364,16 +374,13 @@ return [
'mandatoryFields' => 'Verplichte velden',
'optionalFields' => 'Optionele velden',
'options' => 'Opties',
'something' => 'Iets!',
// budgets:
'create_new_budget' => 'Maak een nieuw budget',
'store_new_budget' => 'Sla nieuw budget op',
'stored_new_budget' => 'Nieuw budget ":name" opgeslagen',
'availableIn' => 'Beschikbaar in :date',
'available_between' => 'Beschikbaar tussen :start en :end',
'transactionsWithoutBudget' => 'Uitgaven zonder budget',
'transactionsWithoutBudgetDate' => 'Uitgaven zonder budget in :date',
'transactions_no_budget' => 'Uitgaven zonder budget tussen :start en :end',
'spent_between' => 'Uitgegeven tussen :start en :end',
'createBudget' => 'Maak nieuw budget',
@ -439,9 +446,6 @@ return [
'revenue_accounts' => 'Debiteuren',
'cash_accounts' => 'Contant geldrekeningen',
'Cash account' => 'Contant geldrekening',
'accountExtraHelp_asset' => '',
'accountExtraHelp_expense' => '',
'accountExtraHelp_revenue' => '',
'account_type' => 'Rekeningtype',
'save_transactions_by_moving' => 'Bewaar deze transacties door ze aan een andere rekening te koppelen:',
'stored_new_account' => 'Nieuwe rekening ":name" opgeslagen!',
@ -492,9 +496,6 @@ return [
// new user:
'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',
@ -509,12 +510,10 @@ return [
'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',
@ -537,7 +536,6 @@ return [
'moneyManagement' => 'Geldbeheer',
'piggyBanks' => 'Spaarpotjes',
'bills' => 'Contracten',
'createNew' => 'Nieuw',
'withdrawal' => 'Uitgave',
'deposit' => 'Inkomsten',
'account' => 'Rekening',
@ -549,7 +547,6 @@ return [
'yes' => 'Ja',
'no' => 'Nee',
'amount' => 'Bedrag',
'newBalance' => 'Nieuw saldo',
'overview' => 'Overzicht',
'saveOnAccount' => 'Sparen op rekening',
'unknown' => 'Onbekend',
@ -725,6 +722,10 @@ return [
'domain_is_now_blocked' => 'Domein :domain is nu geblokkeerd',
'instance_configuration' => 'Instellingen',
'firefly_instance_configuration' => 'Instellingen voor Firefly III',
'setting_single_user_mode' => 'Enkele gebruiker-modus',
'setting_single_user_mode_explain' => 'Standaard accepteert Firefly III maar één (1) gebruiker: jijzelf. Dit is een veiligheidsmaatregel, zodat anderen niet zomaar jouw installatie kunnen gebruiken, tenzij je dit aanzet. Toekomstige registraties zijn nu geblokkeerd. Als je dit vinkje uitzet kunnen anderen jouw installatie ook gebruiken, gegeven dat ze er bij kunnen (je installatie hangt aan het internet).',
'store_configuration' => 'Configuratie opslaan',
'hidden_fields_preferences' => 'Niet alle velden zijn zichtbaar. Zet ze aan in je <a href=":link">instellingen</a>.',
// split a transaction:
'transaction_meta_data' => 'Transactie meta-data',
@ -797,4 +798,6 @@ return [
'import_with_key' => 'Import met code \':key\'',
'import_finished_report' => 'Het importeren is voltooid. Kijk naar eventuele fouten in het blok hierboven. Alle geimporteerde transacties hebben een tag, en die kan je hieronder bekijken. ',
'import_finished_link' => 'De geimporteerde transacties kan je vinden onder tag <a href=":link" class="label label-success" style="font-size:100%;font-weight:normal;">:tag</a>.',
];

View File

@ -133,6 +133,7 @@ return [
// admin
'domain' => 'Domein',
'single_user_mode' => 'Enkele gebruiker-modus',
// import
'import_file' => 'Importbestand',
@ -146,4 +147,8 @@ return [
'csv_config' => 'Configuratiebestand',
'due_date' => 'Vervaldatum',
'payment_date' => 'Betalingsdatum',
'invoice_date' => 'Factuurdatum',
'internal_reference' => 'Interne verwijzing',
];

View File

@ -39,6 +39,11 @@ return [
'interest_date' => 'Rentedatum',
'book_date' => 'Boekdatum',
'process_date' => 'Verwerkingsdatum',
'due_date' => 'Vervaldatum',
'payment_date' => 'Betalingsdatum',
'invoice_date' => 'Factuurdatum',
'interal_reference' => 'Interne verwijzing',
'notes' => 'Notities',
'from' => 'Van',
'piggy_bank' => 'Spaarpotje',
'to' => 'Naar',

View File

@ -10,10 +10,8 @@
return [
'home' => 'Início',
'cash_accounts' => 'Contas Correntes',
'edit_account' => 'Editar conta ":name"',
'edit_currency' => 'Editar moedas ":name"',
'delete_currency' => 'Apagar moedas ":name"',
'edit_currency' => 'Edit currency ":name"',
'delete_currency' => 'Delete currency ":name"',
'newPiggyBank' => 'Criar um novo cofrinho',
'edit_piggyBank' => 'Editar cofrinho ":name"',
'preferences' => 'Preferências',
@ -24,11 +22,6 @@ return [
'edit_bill' => 'Editar fatura ":name"',
'delete_bill' => 'Apagar fatura ":name"',
'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',
'searchResult' => 'Pesquisa por ":query"',
'withdrawal_list' => 'Despesas',
'deposit_list' => 'Receitas, renda e depósitos',

View File

@ -17,7 +17,6 @@ return [
'header_help' => 'Verifique se a primeira linha do seu arquivo CSV está com os títulos de coluna',
'date_help' => 'Date time format in your CSV. Follow the format like <a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters">this page</a> indicates. The default value will parse dates that look like this: :dateExample.',
'delimiter_help' => 'Choose the field delimiter that is used in your input file. If not sure, comma is the safest option.',
'config_file_help' => 'Selecione a configuração de importação CSV aqui. Se você não sabe o que é isso, ignore. Será explicado mais tarde.',
'import_account_help' => 'Se seu arquivo CSV NÃO contém informações sobre sua(s) conta(s) ativa(s), use este combobox para selecionar para qual conta pertencem as transações no CSV.',
'upload_not_writeable' => 'Na caixa cinza contém um caminho de arquivo. Deve ser possível gravar nele. Por favor, certifique-se de que é.',

View File

@ -9,10 +9,8 @@
return [
// general stuff:
'language_incomplete' => 'Este idioma não está totalmente traduzido',
'test' => 'Você selecionou Inglês',
'language_incomplete' => 'incomplete translation',
'close' => 'Fechar',
'pleaseHold' => 'Por favor espere...',
'actions' => 'Ações',
'edit' => 'Editar',
'delete' => 'Apagar',
@ -23,8 +21,6 @@ return [
'cancel' => 'Cancelar',
'from' => 'De',
'to' => 'Até',
'total_sum' => 'Soma Total',
'period_sum' => 'Soma por período',
'showEverything' => 'Mostrar tudo',
'never' => 'Nunca',
'search_results_for' => 'Pesquisar resultados por ":query"',
@ -32,7 +28,6 @@ return [
'deleted_error' => 'Estas credenciais não correspondem aos nossos registros.',
'general_blocked_error' => 'Sua conta foi desativada, você não pode entrar.',
'expired_error' => 'Sua conta expirou e não pode mais ser usada.',
'unbalanced_error' => 'Suas operações estão desequilibrados. Isto significa uma retirada, depósito ou transferência não foi armazenado corretamente. Por favor verifique suas contas e transações por erros (quantidade desequilibrada :amount).',
'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.',
@ -250,8 +245,6 @@ return [
// 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',
@ -281,8 +274,26 @@ return [
'transaction_page_size_title' => 'Tamanho da página',
'transaction_page_size_help' => 'Qualquer lista de transações mostra, no máximo, muitas transações',
'transaction_page_size_label' => 'Tamanho da página',
'budget_maximum' => 'Máximo de orçamento',
'between_dates' => '(:start e :end)',
'pref_optional_fields_transaction' => 'Optional fields for transactions',
'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.',
'optional_tj_date_fields' => 'Date fields',
'optional_tj_business_fields' => 'Business fields',
'optional_tj_attachment_fields' => 'Attachment fields',
'pref_optional_tj_interest_date' => 'Interest date',
'pref_optional_tj_book_date' => 'Book date',
'pref_optional_tj_process_date' => 'Processing date',
'pref_optional_tj_due_date' => 'Due date',
'pref_optional_tj_payment_date' => 'Payment date',
'pref_optional_tj_invoice_date' => 'Invoice date',
'pref_optional_tj_internal_reference' => 'Internal reference',
'pref_optional_tj_notes' => 'Notes',
'pref_optional_tj_attachments' => 'Attachments',
'optional_field_meta_dates' => 'Dates',
'optional_field_meta_business' => 'Business',
'optional_field_attachments' => 'Attachments',
'optional_field_meta_data' => 'Optional meta data',
// profile:
'change_your_password' => 'Alterar sua senha',
@ -338,11 +349,10 @@ return [
// currencies:
'create_currency' => 'Criar uma nova moeda',
'edit_currency' => 'Editar moeda ":name"',
'store_currency' => 'Armazenar nova moeda',
'update_currency' => 'Atualizar moeda',
'new_default_currency' => 'Agora :name é a moeda padrão.',
'cannot_delete_currency' => 'Não é possível excluir :name porque ainda existem transações anexadas a ela!',
'cannot_delete_currency' => 'Cannot delete :name because it is still in use.',
'deleted_currency' => 'Moeda :name excluída',
'created_currency' => 'Moeda :name criada',
'updated_currency' => 'Moeda :name atualizada',
@ -364,16 +374,13 @@ return [
'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',
'stored_new_budget' => 'Novo orçamento armazenado ":name"',
'availableIn' => 'Disponível em :date',
'available_between' => 'Disponível entre :start e :end',
'transactionsWithoutBudget' => 'Despesas sem orçamentos',
'transactionsWithoutBudgetDate' => 'Despesas sem orçamentos em :date',
'transactions_no_budget' => 'Despesas sem orçamento entre :start e :end',
'spent_between' => 'Gasto entre :start e :end',
'createBudget' => 'Novo orçamento',
@ -439,9 +446,6 @@ return [
'revenue_accounts' => 'Contas de receitas',
'cash_accounts' => 'Contas Correntes',
'Cash account' => 'Conta Corrente',
'accountExtraHelp_asset' => '',
'accountExtraHelp_expense' => '',
'accountExtraHelp_revenue' => '',
'account_type' => 'Tipo de conta',
'save_transactions_by_moving' => 'Salve essas transações, movendo-os para outra conta:',
'stored_new_account' => 'Nova conta ":name" armazenado!',
@ -492,9 +496,6 @@ return [
// new user:
'welcome' => 'Bem Vindo ao Firefly!',
'createNewAsset' => 'Criar uma conta de ativo para começar. ' .
'Isso permitirá que você crie transações e inicie a sua gestão financeira',
'createNewAssetButton' => 'Criar nova conta de ativo',
// home page:
'yourAccounts' => 'Suas contas',
@ -509,12 +510,10 @@ return [
'moneyOut' => 'Dinheiro sai',
'billsToPay' => 'Faturas a pagar',
'billsPaid' => 'Faturas pagas',
'viewDetails' => 'Ver Detalhes',
'divided' => 'dividida',
'toDivide' => 'esquerda para dividir',
// menu and titles, should be recycled as often as possible:
'toggleNavigation' => 'Ativar/desativar navegação',
'currency' => 'Moeda',
'preferences' => 'Preferências',
'logout' => 'Desconectar',
@ -537,7 +536,6 @@ return [
'moneyManagement' => 'Gerenciamento de Dinheiro',
'piggyBanks' => 'Cofrinhos',
'bills' => 'Faturas',
'createNew' => 'Criar nova(o)',
'withdrawal' => 'Retirada',
'deposit' => 'Depósito',
'account' => 'Conta',
@ -549,7 +547,6 @@ return [
'yes' => 'Sim',
'no' => 'Não',
'amount' => 'Valor',
'newBalance' => 'Novo saldo',
'overview' => 'Visão Geral',
'saveOnAccount' => 'Salvar na conta',
'unknown' => 'Desconhecido',
@ -725,6 +722,10 @@ return [
'domain_is_now_blocked' => 'Domínio :domain está bloqueado',
'instance_configuration' => 'Configuration',
'firefly_instance_configuration' => 'Configuration options for Firefly III',
'setting_single_user_mode' => 'Single user mode',
'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as wel, assuming they can reach it (when it is connected to the internet).',
'store_configuration' => 'Store configuration',
'hidden_fields_preferences' => 'Not all fields are visible right now. You must enable them in your <a href=":link">settings</a>.',
// split a transaction:
'transaction_meta_data' => 'Dados de transação',
@ -797,4 +798,6 @@ return [
'import_with_key' => 'Import with key \':key\'',
'import_finished_report' => 'The import has finished. Please note any errors in the block above this line. All transactions imported during this particular session have been tagged, and you can check them out below. ',
'import_finished_link' => 'The transactions imported can be found in tag <a href=":link" class="label label-success" style="font-size:100%;font-weight:normal;">:tag</a>.',
];

View File

@ -133,6 +133,7 @@ return [
// admin
'domain' => 'Domínio',
'single_user_mode' => 'Single user mode',
// import
'import_file' => 'Importar arquivo',
@ -146,4 +147,8 @@ return [
'csv_config' => 'Importar CSV de configuração',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'internal_reference' => 'Internal reference',
];

View File

@ -39,6 +39,11 @@ return [
'interest_date' => 'Data de interesse',
'book_date' => 'Data reserva',
'process_date' => 'Data de processamento',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'interal_reference' => 'Internal reference',
'notes' => 'Notes',
'from' => 'De',
'piggy_bank' => 'Cofrinho',
'to' => 'Até',

View File

@ -10,10 +10,8 @@
return [
'home' => 'Home',
'cash_accounts' => 'Cash accounts',
'edit_account' => 'Edit account ":name"',
'edit_currency' => 'Edit currencies ":name"',
'delete_currency' => 'Delete currencies ":name"',
'edit_currency' => 'Edit currency ":name"',
'delete_currency' => 'Delete currency ":name"',
'newPiggyBank' => 'Create a new piggy bank',
'edit_piggyBank' => 'Edit piggy bank ":name"',
'preferences' => 'Preferences',
@ -24,11 +22,6 @@ return [
'edit_bill' => 'Edit bill ":name"',
'delete_bill' => 'Delete bill ":name"',
'reports' => 'Reports',
'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',
'searchResult' => 'Search for ":query"',
'withdrawal_list' => 'Expenses',
'deposit_list' => 'Revenue, income and deposits',

View File

@ -17,7 +17,6 @@ return [
'header_help' => 'Check this if the first row of your CSV file are the column titles',
'date_help' => 'Date time format in your CSV. Follow the format like <a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters">this page</a> indicates. The default value will parse dates that look like this: :dateExample.',
'delimiter_help' => 'Choose the field delimiter that is used in your input file. If not sure, comma is the safest option.',
'config_file_help' => 'Select your CSV import configuration here. If you do not know what this is, ignore it. It will be explained later.',
'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.',
'upload_not_writeable' => 'The grey box contains a file path. It should be writeable. Please make sure it is.',

View File

@ -9,10 +9,8 @@
return [
// general stuff:
'language_incomplete' => 'This language is not yet fully translated',
'test' => 'You have selected English.',
'language_incomplete' => 'incomplete translation',
'close' => 'Close',
'pleaseHold' => 'Please hold...',
'actions' => 'Actions',
'edit' => 'Edit',
'delete' => 'Delete',
@ -23,8 +21,6 @@ return [
'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"',
@ -32,7 +28,6 @@ return [
'deleted_error' => 'These credentials do not match our records.',
'general_blocked_error' => 'Your account has been disabled, so you cannot login.',
'expired_error' => 'Your account has expired, and can no longer be used.',
'unbalanced_error' => 'Your transactions are unbalanced. This means a withdrawal, deposit or transfer was not stored properly. Please check your accounts and transactions for errors (unbalanced amount :amount).',
'removed_amount' => 'Removed :amount',
'added_amount' => 'Added :amount',
'asset_account_role_help' => 'Any extra options resulting from your choice can be set later.',
@ -250,8 +245,6 @@ return [
// 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',
@ -281,8 +274,26 @@ return [
'transaction_page_size_title' => 'Page size',
'transaction_page_size_help' => 'Any list of transactions shows at most this many transactions',
'transaction_page_size_label' => 'Page size',
'budget_maximum' => 'Budget maximum',
'between_dates' => '(:start and :end)',
'pref_optional_fields_transaction' => 'Optional fields for transactions',
'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.',
'optional_tj_date_fields' => 'Date fields',
'optional_tj_business_fields' => 'Business fields',
'optional_tj_attachment_fields' => 'Attachment fields',
'pref_optional_tj_interest_date' => 'Interest date',
'pref_optional_tj_book_date' => 'Book date',
'pref_optional_tj_process_date' => 'Processing date',
'pref_optional_tj_due_date' => 'Due date',
'pref_optional_tj_payment_date' => 'Payment date',
'pref_optional_tj_invoice_date' => 'Invoice date',
'pref_optional_tj_internal_reference' => 'Internal reference',
'pref_optional_tj_notes' => 'Notes',
'pref_optional_tj_attachments' => 'Attachments',
'optional_field_meta_dates' => 'Dates',
'optional_field_meta_business' => 'Business',
'optional_field_attachments' => 'Attachments',
'optional_field_meta_data' => 'Optional meta data',
// profile:
'change_your_password' => 'Change your password',
@ -338,11 +349,10 @@ return [
// currencies:
'create_currency' => 'Create a new currency',
'edit_currency' => 'Edit currency ":name"',
'store_currency' => 'Store new currency',
'update_currency' => 'Update currency',
'new_default_currency' => ':name is now the default currency.',
'cannot_delete_currency' => 'Cannot delete :name because there are still transactions attached to it!',
'cannot_delete_currency' => 'Cannot delete :name because it is still in use.',
'deleted_currency' => 'Currency :name deleted',
'created_currency' => 'Currency :name created',
'updated_currency' => 'Currency :name updated',
@ -364,16 +374,13 @@ return [
'mandatoryFields' => 'Mandatory fields',
'optionalFields' => 'Optional fields',
'options' => 'Options',
'something' => 'Something!',
// budgets:
'create_new_budget' => 'Create a new budget',
'store_new_budget' => 'Store new budget',
'stored_new_budget' => 'Stored new budget ":name"',
'availableIn' => 'Available in :date',
'available_between' => 'Available between :start and :end',
'transactionsWithoutBudget' => 'Expenses without budget',
'transactionsWithoutBudgetDate' => 'Expenses without budget in :date',
'transactions_no_budget' => 'Expenses without budget between :start and :end',
'spent_between' => 'Spent between :start and :end',
'createBudget' => 'New budget',
@ -439,9 +446,6 @@ return [
'revenue_accounts' => 'Revenue accounts',
'cash_accounts' => 'Cash accounts',
'Cash account' => 'Cash account',
'accountExtraHelp_asset' => '',
'accountExtraHelp_expense' => '',
'accountExtraHelp_revenue' => '',
'account_type' => 'Account type',
'save_transactions_by_moving' => 'Save these transaction(s) by moving them to another account:',
'stored_new_account' => 'New account ":name" stored!',
@ -492,9 +496,6 @@ return [
// 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',
@ -509,12 +510,10 @@ return [
'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',
@ -537,7 +536,6 @@ return [
'moneyManagement' => 'Money management',
'piggyBanks' => 'Piggy banks',
'bills' => 'Bills',
'createNew' => 'Create new',
'withdrawal' => 'Withdrawal',
'deposit' => 'Deposit',
'account' => 'Account',
@ -549,7 +547,6 @@ return [
'yes' => 'Yes',
'no' => 'No',
'amount' => 'Amount',
'newBalance' => 'New balance',
'overview' => 'Overview',
'saveOnAccount' => 'Save on account',
'unknown' => 'Unknown',
@ -725,6 +722,10 @@ return [
'domain_is_now_blocked' => 'Domain :domain is now blocked',
'instance_configuration' => 'Configuration',
'firefly_instance_configuration' => 'Configuration options for Firefly III',
'setting_single_user_mode' => 'Single user mode',
'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as wel, assuming they can reach it (when it is connected to the internet).',
'store_configuration' => 'Store configuration',
'hidden_fields_preferences' => 'Not all fields are visible right now. You must enable them in your <a href=":link">settings</a>.',
// split a transaction:
'transaction_meta_data' => 'Transaction meta-data',
@ -797,4 +798,6 @@ return [
'import_with_key' => 'Import with key \':key\'',
'import_finished_report' => 'The import has finished. Please note any errors in the block above this line. All transactions imported during this particular session have been tagged, and you can check them out below. ',
'import_finished_link' => 'The transactions imported can be found in tag <a href=":link" class="label label-success" style="font-size:100%;font-weight:normal;">:tag</a>.',
];

View File

@ -133,6 +133,7 @@ return [
// admin
'domain' => 'Domain',
'single_user_mode' => 'Single user mode',
// import
'import_file' => 'Import file',
@ -146,4 +147,8 @@ return [
'csv_config' => 'CSV import configuration',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'internal_reference' => 'Internal reference',
];

View File

@ -39,6 +39,11 @@ return [
'interest_date' => 'Interest date',
'book_date' => 'Book date',
'process_date' => 'Processing date',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'interal_reference' => 'Internal reference',
'notes' => 'Notes',
'from' => 'From',
'piggy_bank' => 'Piggy bank',
'to' => 'To',

View File

@ -10,10 +10,8 @@
return [
'home' => '首頁',
'cash_accounts' => '現金帳戶',
'edit_account' => '編輯帳戶 ":name"',
'edit_currency' => '編輯貨幣 ":name"',
'delete_currency' => '刪除貨幣 ":name"',
'edit_currency' => 'Edit currency ":name"',
'delete_currency' => 'Delete currency ":name"',
'newPiggyBank' => '創建一個新的存錢筒',
'edit_piggyBank' => '編輯存錢筒 ":name"',
'preferences' => '設定',
@ -24,16 +22,11 @@ return [
'edit_bill' => '編輯賬單 ":name"',
'delete_bill' => '刪除賬單 ":name"',
'reports' => '報表',
'monthly_report' => '月度報告: :date',
'monthly_report_shared' => '月度報告︰ :date (包括共有賬號)',
'yearly_report' => '年度報告: :date',
'yearly_report_shared' => '年度報告︰ :date (包括共有賬號)',
'budget_report' => '預算報告: :date',
'searchResult' => '搜尋 ":query"',
'withdrawal_list' => '支出',
'deposit_list' => 'Revenue, income and deposits',
'transfer_list' => 'Transfers',
'transfers_list' => 'Transfers',
'transfer_list' => '轉帳',
'transfers_list' => '轉帳',
'create_withdrawal' => 'Create new withdrawal',
'create_deposit' => 'Create new deposit',
'create_transfer' => 'Create new transfer',

View File

@ -17,7 +17,6 @@ return [
'header_help' => 'CSV 檔的第一行是標題',
'date_help' => 'CSV 內的日期格式。請跟從<a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters">這頁</a>內的格式來填寫。 系統預設能夠解析像這樣的日期: :dateExample 。',
'delimiter_help' => '請選擇你的檔案中所使用的欄位分隔符號。如果不肯定的話,逗號是最安全的選項。',
'config_file_help' => '請在這裡選擇你的 CSV 導入設定。如果你不知道這是什麼,請不要填寫。隨後會有説明指導。',
'import_account_help' => '如果你的 CSV 檔中沒有包含資產帳戶的資料,請選擇相關聯的帳戶。',
'upload_not_writeable' => '不能寫入檔案。灰色框內包含檔案的路徑,伺服器需要寫入該檔案的權限。請調整伺服器權限設定後再試。',
@ -26,24 +25,24 @@ return [
'column_roles_text' => '<p>Firefly III cannot guess what data each column contains. You must tell Firefly which kinds of data to expect. The example data can guide you into picking the correct type from the dropdown. If a column cannot be matched to a useful data type, please let me know <a href="https://github.com/JC5/firefly-iii/issues/new">by creating an issue</a>.</p><p>Some values in your CSV file, such as account names or categories, may already exist in your Firefly III database. If you select "map these values" Firefly will not attempt to search for matching values itself but allow you to match the CSV values against the values in your database. This allows you to fine-tune the import.</p>',
'column_roles_table' => '表格',
'column_name' => 'Name of column',
'column_example' => 'Column example data',
'column_example' => '欄的示例資料',
'column_role' => '欄內資料的含義',
'do_map_value' => '對應這些值',
'column' => '欄',
'no_example_data' => '沒有可用的示例資料',
'store_column_roles' => '繼續匯入',
'do_not_map' => '(do not map)',
'do_not_map' => '(不要映射)',
'map_title' => '連接匯入資料到 Firefly III',
'map_text' => 'In the following tables, the left value shows you information found in your uploaded CSV file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
'field_value' => 'Field value',
'field_mapped_to' => 'Mapped to',
'field_value' => '欄位值',
'field_mapped_to' => '映射到',
'store_column_mapping' => 'Store mapping',
// map things.
'column__ignore' => '(ignore this column)',
'column__ignore' => '(忽略此欄)',
'column_account-iban' => 'Asset account (IBAN)',
'column_account-id' => 'Asset account ID (matching Firefly)',
'column_account-name' => '資產帳戶 (名稱)',
@ -54,7 +53,7 @@ return [
'column_budget-id' => '預算 ID (與 Firefly 匹配)',
'column_budget-name' => '預算名稱',
'column_category-id' => '類別 ID (與 Firefly 匹配)',
'column_category-name' => 'Category name',
'column_category-name' => '類別名稱',
'column_currency-code' => 'Currency code (ISO 4217)',
'column_currency-id' => 'Currency ID (matching Firefly)',
'column_currency-name' => 'Currency name (matching Firefly)',

View File

@ -9,10 +9,8 @@
return [
// general stuff:
'language_incomplete' => '本語言尚沒有完整的翻譯',
'test' => '你已選擇中文。',
'language_incomplete' => 'incomplete translation',
'close' => '關閉',
'pleaseHold' => '請稍候...',
'actions' => '操作',
'edit' => '編輯',
'delete' => '刪除',
@ -22,9 +20,7 @@ return [
'apply' => '套用',
'cancel' => '取消',
'from' => '從',
'to' => 'To',
'total_sum' => '總計',
'period_sum' => '服務內的總和',
'to' => '到',
'showEverything' => '全部顯示',
'never' => '從來沒有',
'search_results_for' => '":query" 的搜尋結果',
@ -32,7 +28,6 @@ return [
'deleted_error' => '帳號或密碼錯誤。',
'general_blocked_error' => '您的帳戶已被禁用,所以您不能登錄。',
'expired_error' => 'Your account has expired, and can no longer be used.',
'unbalanced_error' => '你的交易記錄並不平衡。這代表一些提款、 存款或轉帳未有正確地儲存。請檢查您的帳戶和交易有沒有錯誤 (不平衡的量 :amount)。',
'removed_amount' => 'Removed :amount',
'added_amount' => 'Added :amount',
'asset_account_role_help' => 'Any extra options resulting from your choice can be set later.',
@ -250,8 +245,6 @@ return [
// 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',
@ -281,8 +274,26 @@ return [
'transaction_page_size_title' => 'Page size',
'transaction_page_size_help' => 'Any list of transactions shows at most this many transactions',
'transaction_page_size_label' => 'Page size',
'budget_maximum' => 'Budget maximum',
'between_dates' => '(:start and :end)',
'pref_optional_fields_transaction' => 'Optional fields for transactions',
'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.',
'optional_tj_date_fields' => 'Date fields',
'optional_tj_business_fields' => 'Business fields',
'optional_tj_attachment_fields' => 'Attachment fields',
'pref_optional_tj_interest_date' => 'Interest date',
'pref_optional_tj_book_date' => 'Book date',
'pref_optional_tj_process_date' => 'Processing date',
'pref_optional_tj_due_date' => 'Due date',
'pref_optional_tj_payment_date' => 'Payment date',
'pref_optional_tj_invoice_date' => 'Invoice date',
'pref_optional_tj_internal_reference' => 'Internal reference',
'pref_optional_tj_notes' => 'Notes',
'pref_optional_tj_attachments' => 'Attachments',
'optional_field_meta_dates' => 'Dates',
'optional_field_meta_business' => 'Business',
'optional_field_attachments' => 'Attachments',
'optional_field_meta_data' => 'Optional meta data',
// profile:
'change_your_password' => 'Change your password',
@ -338,11 +349,10 @@ return [
// currencies:
'create_currency' => 'Create a new currency',
'edit_currency' => 'Edit currency ":name"',
'store_currency' => 'Store new currency',
'update_currency' => 'Update currency',
'new_default_currency' => ':name is now the default currency.',
'cannot_delete_currency' => 'Cannot delete :name because there are still transactions attached to it!',
'cannot_delete_currency' => 'Cannot delete :name because it is still in use.',
'deleted_currency' => 'Currency :name deleted',
'created_currency' => 'Currency :name created',
'updated_currency' => 'Currency :name updated',
@ -364,16 +374,13 @@ return [
'mandatoryFields' => 'Mandatory fields',
'optionalFields' => 'Optional fields',
'options' => 'Options',
'something' => 'Something!',
// budgets:
'create_new_budget' => 'Create a new budget',
'store_new_budget' => 'Store new budget',
'stored_new_budget' => 'Stored new budget ":name"',
'availableIn' => 'Available in :date',
'available_between' => 'Available between :start and :end',
'transactionsWithoutBudget' => 'Expenses without budget',
'transactionsWithoutBudgetDate' => 'Expenses without budget in :date',
'transactions_no_budget' => 'Expenses without budget between :start and :end',
'spent_between' => 'Spent between :start and :end',
'createBudget' => 'New budget',
@ -439,9 +446,6 @@ return [
'revenue_accounts' => 'Revenue accounts',
'cash_accounts' => 'Cash accounts',
'Cash account' => 'Cash account',
'accountExtraHelp_asset' => '',
'accountExtraHelp_expense' => '',
'accountExtraHelp_revenue' => '',
'account_type' => 'Account type',
'save_transactions_by_moving' => 'Save these transaction(s) by moving them to another account:',
'stored_new_account' => 'New account ":name" stored!',
@ -492,9 +496,6 @@ return [
// 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',
@ -509,12 +510,10 @@ return [
'moneyOut' => 'Money out',
'billsToPay' => '待付賬單',
'billsPaid' => '已付賬單',
'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',
@ -537,7 +536,6 @@ return [
'moneyManagement' => 'Money management',
'piggyBanks' => 'Piggy banks',
'bills' => '賬單',
'createNew' => 'Create new',
'withdrawal' => 'Withdrawal',
'deposit' => 'Deposit',
'account' => 'Account',
@ -549,7 +547,6 @@ return [
'yes' => 'Yes',
'no' => 'No',
'amount' => 'Amount',
'newBalance' => '新餘額',
'overview' => 'Overview',
'saveOnAccount' => 'Save on account',
'unknown' => 'Unknown',
@ -725,6 +722,10 @@ return [
'domain_is_now_blocked' => 'Domain :domain is now blocked',
'instance_configuration' => 'Configuration',
'firefly_instance_configuration' => 'Configuration options for Firefly III',
'setting_single_user_mode' => 'Single user mode',
'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as wel, assuming they can reach it (when it is connected to the internet).',
'store_configuration' => 'Store configuration',
'hidden_fields_preferences' => 'Not all fields are visible right now. You must enable them in your <a href=":link">settings</a>.',
// split a transaction:
'transaction_meta_data' => 'Transaction meta-data',
@ -797,4 +798,6 @@ return [
'import_with_key' => 'Import with key \':key\'',
'import_finished_report' => 'The import has finished. Please note any errors in the block above this line. All transactions imported during this particular session have been tagged, and you can check them out below. ',
'import_finished_link' => 'The transactions imported can be found in tag <a href=":link" class="label label-success" style="font-size:100%;font-weight:normal;">:tag</a>.',
];

View File

@ -23,7 +23,7 @@ return [
'match' => '匹配於',
'repeat_freq' => '循環週期',
'journal_currency_id' => '貨幣',
'journal_amount' => 'Amount',
'journal_amount' => '金額',
'journal_asset_source_account' => '資產帳戶 (源頭)',
'journal_source_account_name' => '收入帳戶 (源頭)',
'journal_source_account_id' => '資產帳戶 (源頭)',
@ -31,11 +31,11 @@ return [
'account_to_id' => '到帳戶',
'journal_destination_account_id' => '資產帳戶 (目標)',
'asset_destination_account' => '資產帳戶 (目標)',
'asset_source_account' => 'Asset account (source)',
'journal_description' => 'Description',
'split_journal' => 'Split this transaction',
'asset_source_account' => '資產帳戶 (來源)',
'journal_description' => '描述',
'split_journal' => '拆分此交易',
'split_journal_explanation' => 'Split this transaction in multiple parts',
'currency' => 'Currency',
'currency' => '貨幣',
'account_id' => 'Asset account',
'budget_id' => 'Budget',
'openingBalance' => '開戶金額',
@ -133,6 +133,7 @@ return [
// admin
'domain' => 'Domain',
'single_user_mode' => 'Single user mode',
// import
'import_file' => 'Import file',
@ -146,4 +147,8 @@ return [
'csv_config' => 'CSV import configuration',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'internal_reference' => 'Internal reference',
];

View File

@ -23,7 +23,7 @@ return [
'transaction-menu-title' => '交易',
'transaction-menu-text' => '你可以在這裡找到所有交易記錄。',
'option-menu-title' => '設定',
'option-menu-text' => 'This is pretty self-explanatory.',
'option-menu-text' => '相當不言而喻吧。',
'main-content-end-title' => '完',
'main-content-end-text' => '每一頁在右上方有一個小問號。按一下它可以取得與頁面相關説明。',
'index' => '首頁',

View File

@ -21,7 +21,7 @@ return [
'lastActivity' => '最後的活動',
'balanceDiff' => ':start 和 :end 之間的餘額差',
'matchedOn' => '匹配於',
'matchesOn' => 'Matched on',
'matchesOn' => '匹配於',
'account_type' => '帳戶類型',
'new_balance' => '新餘額',
'account' => '帳戶',
@ -29,16 +29,21 @@ return [
'lastMatch' => '最後出現',
'split_number' => '拆分編號 #',
'destination' => '到',
'source' => 'Source',
'source' => '來源',
'expectedMatch' => 'Expected match',
'automatch' => 'Auto match?',
'repeat_freq' => 'Repeats',
'automatch' => '自動匹配?',
'repeat_freq' => '重複',
'description' => 'Description',
'amount' => 'Amount',
'date' => 'Date',
'interest_date' => '付息日',
'book_date' => 'Book date',
'process_date' => '處理日期',
'due_date' => 'Due date',
'payment_date' => 'Payment date',
'invoice_date' => 'Invoice date',
'interal_reference' => 'Internal reference',
'notes' => 'Notes',
'from' => '從',
'piggy_bank' => '存錢筒',
'to' => '至',

View File

@ -21,7 +21,7 @@ return [
'accepted' => ':attribute 必須被接受。',
'active_url' => ':attribute 不是有效的URL。',
'after' => ':attribute 必須是一個在 :date 之後的日期。',
'alpha' => 'The :attribute may only contain letters.',
'alpha' => ':attribute 只允許包含字母。',
'alpha_dash' => ':attribute 只允許數字,字母,和下劃線。',
'alpha_num' => ':attribute 只允許包含數字和字母。',
'array' => ':attribute 必須是一個陣列。',
@ -29,10 +29,10 @@ return [
'before' => ':attribute 必須是一個在 :date 之前的日期。',
'unique_object_for_user' => '這個名稱已被使用。',
'unique_account_for_user' => '這個帳號名稱已被使用。',
'between.numeric' => 'The :attribute must be between :min and :max.',
'between.numeric' => ':attribute 必須在 :min 和 :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.',
'between.string' => ':attribute 包含的字符數量必須在 :min 到 :max 之間。',
'between.array' => ':attribute 的數目必須在 :min 到 :max 之間。',
'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.',
'date' => 'The :attribute is not a valid date.',

View File

@ -4,17 +4,50 @@
{{ Breadcrumbs.renderIfExists }}
{% endblock %}
{% block content %}
<div class="row">
<!-- configuration setting block -->
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
<div class="box box-default">
<div class="box-header with-border">
<h3 class="box-title">{{ 'setting'|_ }}</h3>
</div>
<div class="box-body">
Bla bla bla
<form action="{{ route('admin.configuration.store') }}" method="post" id="store" class="form-horizontal">
<div class="row">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<!-- single user mode -->
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
<div class="box box-default">
<div class="box-header with-border">
<h3 class="box-title">{{ 'setting_single_user_mode'|_ }}</h3>
</div>
<div class="box-body">
<p class="text-info">
{{ 'setting_single_user_mode_explain'|_ }}
</p>
{{ ExpandedForm.checkbox('single_user_mode','1', singleUserMode) }}
</div>
</div>
</div>
<!-- configuration setting block -->
<!--
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
<div class="box box-default">
<div class="box-header with-border">
<h3 class="box-title">{{ 'setting'|_ }}</h3>
</div>
<div class="box-body">
Bla bla bla
</div>
</div>
</div>
-->
</div>
</div>
<div class="row">
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
<button type="submit" class="btn btn-success">
{{ ('store_configuration')|_ }}
</button>
</div>
</div>
</form>
{% endblock %}

View File

@ -47,7 +47,7 @@
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
{{ ('update_attachment')|_ }}
{{ 'update_attachment'|_ }}
</button>
</div>
</div>

View File

@ -53,7 +53,7 @@
<!-- /.col -->
</div>
</form>
{% if Config.get('auth.allow_register') %}
{% if allowRegistration %}
<a href="{{ URL.to('/register') }}" class="text-center">Register a new account</a><br>
{% endif %}
<a href="{{ URL.to('/password/reset') }}">I forgot my password</a>

View File

@ -125,7 +125,7 @@
<input type="hidden" name="balance_currency_id" value="1"/>
<input class="form-control budgetAmount" data-original="{{ budget.currentRep.amount|number_format(0,'','') }}"
data-id="{{ budget.id }}" value="{{ budget.currentRep.amount|number_format(0,'','') }}" autocomplete="off"
step="1" min="0" max="{{ budgetMaximum }}" name="amount" type="number">
step="1" min="0" name="amount" type="number">
</div>
<!--
<div class="small">

View File

@ -1,7 +1,13 @@
<div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<label for="{{ options.id }}" class="
{% if options.small %}
col-sm-8
{% else %}
col-sm-4
{% endif %}
control-label">{{ label }}</label>
<div class="col-sm-8">
<div class="{% if options.small %}col-sm-4{% else %}col-sm-8{% endif %}">
<div class="checkbox">
<label>
{{ Form.checkbox(name, value, options.checked, options) }}

View File

@ -60,11 +60,12 @@
<script type="text/javascript">
// some useful translations.
var langImportSingleError = '{{ 'import_error_single'|_ }}';
var langImportMultiError = '{{ 'import_error_multi'|_ }}';
var langImportFatalError = '{{ 'import_error_fatal'|_ }}';
var langImportTimeOutError = '{{ 'import_error_timeout'|_ }}';
var langImportFinished = '{{ 'import_finished_all'|_ }}';
var langImportSingleError = '{{ 'import_error_single'|_|escape }}';
var langImportMultiError = '{{ 'import_error_multi'|_|escape }}';
var langImportFatalError = '{{ 'import_error_fatal'|_|escape }}';
var langImportTimeOutError = '{{ 'import_error_timeout'|_|escape }}';
var langImportFinished = '{{ 'import_finished_all'|_|escape }}';
var jobKey = '{{ job.key }}';
var jobImportUrl = '{{ route('import.json', [job.key]) }}';

View File

@ -91,7 +91,7 @@
<!-- search form -->
<form action="{{ route('search') }}" method="get" class="sidebar-form">
<div class="input-group">
<input type="text" name="q" class="form-control" placeholder="Search..." value="{{ query }}"/>
<input type="text" name="q" class="form-control" placeholder="{{ 'searchPlaceholder'|_ }}" value="{{ query }}"/>
<span class="input-group-btn">
<button type='submit' name='search' id='search-btn' class="btn btn-flat"><i class="fa fa-search"></i></button>
</span>

View File

@ -48,7 +48,7 @@
</tr>
<tr>
<td>{{ 'left_to_save'|_ }}</td>
<td>{{ piggyBank.targetamount - currentRelevantRepAmount(piggyBank)|formatAmount }}</td>
<td>{{ (piggyBank.targetamount - currentRelevantRepAmount(piggyBank))|formatAmount }}</td>
</tr>
<tr>
<td>{{ 'start_date'|_ }}</td>

View File

@ -34,17 +34,6 @@
{% endfor %}
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'pref_budget_settings'|_ }}</h3>
</div>
<div class="box-body">
<p class="text-info">
{{ 'pref_budget_settings_help'|_ }}
</p>
{{ ExpandedForm.amount('budgetMaximum',budgetMaximum,{'label' : 'budget_maximum'|_}) }}
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'pref_custom_fiscal_year'|_ }}</h3>
@ -59,6 +48,39 @@
</div>
</div>
<!-- transaction preferences -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'pref_optional_fields_transaction'|_ }}</h3>
</div>
<div class="box-body">
<p class="text-info">
{{ 'pref_optional_fields_transaction_help'|_ }}
</p>
<h4>{{ 'optional_tj_date_fields'|_ }}</h4>
{{ ExpandedForm.checkbox('tj[interest_date]','1', tjOptionalFields.interest_date,{ 'label' : 'pref_optional_tj_interest_date'|_ }) }}
{{ ExpandedForm.checkbox('tj[book_date]','1', tjOptionalFields.book_date,{ 'label' : 'pref_optional_tj_book_date'|_ }) }}
{{ ExpandedForm.checkbox('tj[process_date]','1', tjOptionalFields.process_date,{ 'label' : 'pref_optional_tj_process_date'|_ }) }}
{{ ExpandedForm.checkbox('tj[due_date]','1', tjOptionalFields.due_date,{ 'label' : 'pref_optional_tj_due_date'|_ }) }}
{{ ExpandedForm.checkbox('tj[payment_date]','1', tjOptionalFields.payment_date,{ 'label' : 'pref_optional_tj_payment_date'|_ }) }}
{{ ExpandedForm.checkbox('tj[invoice_date]','1', tjOptionalFields.invoice_date,{ 'label' : 'pref_optional_tj_invoice_date'|_ }) }}
<h4>{{ 'optional_tj_business_fields'|_ }}</h4>
{{ ExpandedForm.checkbox('tj[internal_reference]','1', tjOptionalFields.internal_reference,{ 'label' : 'pref_optional_tj_internal_reference'|_ }) }}
{{ ExpandedForm.checkbox('tj[notes]','1', tjOptionalFields.notes,{ 'label' : 'pref_optional_tj_notes'|_ }) }}
<h4>{{ 'optional_tj_attachment_fields'|_ }}</h4>
{{ ExpandedForm.checkbox('tj[attachments]','1', tjOptionalFields.attachments,{ 'label' : 'pref_optional_tj_attachments'|_ }) }}
</div>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="box">

View File

@ -16,6 +16,11 @@
<th class="hide-process_date">{{ trans('list.process_date') }}</th>
<th class="hide-interest_date">{{ trans('list.interest_date') }}</th>
<!-- new optional fields (3x) -->
<th class="hide-interest_date">{{ trans('list.due_date') }}</th>
<th class="hide-payment_date">{{ trans('list.payment_date') }}</th>
<th class="hide-invoice_date">{{ trans('list.invoice_date') }}</th>
<th class="hide-from">{{ trans('list.from') }}</th>
<th class="hide-to">{{ trans('list.to') }}</th>
@ -23,6 +28,10 @@
<th class="hide-category"><i class="fa fa-bar-chart fa-fw" title="{{ trans('list.category') }}"></i></th>
<th class="hide-bill">{{ trans('list.bill') }}</th>
<!-- more optional fields (2x) -->
<th class="hide-internal_reference">{{ trans('list.internal_reference') }}</th>
<th class="hide-notes">{{ trans('list.notes') }}</th>
<th class="hide-create_date">{{ trans('list.create_date') }}</th>
<th class="hide-update_date">{{ trans('list.update_date') }}</th>
@ -45,24 +54,46 @@
<td class="hide-balance_after">{{ journal.after|formatAmount }}</td>
<td class="hide-date">{{ journal.date.formatLocalized(monthAndDayFormat) }}</td>
<td class="hide-book_date">{{ journal.book_date.formatLocalized(monthAndDayFormat) }}</td>
<td class="hide-process_date">{{ journal.process_date.formatLocalized(monthAndDayFormat) }}</td>
<td class="hide-interest_date">{{ journal.interest_date.formatLocalized(monthAndDayFormat) }}</td>
<td class="hide-from">
{% if journal.source_account_type == 'Cash account' %}
<span class="text-success">(cash)</span>
{% else %}
<a href="{{ route('accounts.show',journal.source_account_id) }}">{{ journal.source_account_name }}</a>
<td class="hide-book_date">
{% if journal.hasMeta('book_date') %}
{{ journal.getMeta('book_date').formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td class="hide-to">
{% if journal.destination_account_type == 'Cash account' %}
<span class="text-success">(cash)</span>
{% else %}
<a href="{{ route('accounts.show',journal.destination_account_id) }}">{{ journal.destination_account_name }}</a>
<td class="hide-process_date">
{% if journal.hasMeta('process_date') %}
{{ journal.getMeta('process_date').formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td class="hide-interest_date">
{% if journal.hasMeta('interest_date') %}
{{ journal.getMeta('interest_date').formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<!-- new optional fields (3x) -->
<td class="hide-due_date">
{% if journal.hasMeta('due_date') %}
{{ journal.getMeta('due_date').formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td class="hide-payment_date">
{% if journal.hasMeta('payment_date') %}
{{ journal.getMeta('payment_date').formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td class="hide-invoice_date">
{% if journal.hasMeta('invoice_date') %}
{{ journal.getMeta('invoice_date').formatLocalized(monthAndDayFormat) }}
{% endif %}
</td>
<td class="hide-from">
{{ sourceAccount(journal)|raw }}
</td>
<td class="hide-to">
{{ destinationAccount(journal)|raw }}
</td>
<td class="hide-budget">
{{ journalBudgets(journal)|raw }}
@ -77,6 +108,18 @@
<td class="hide-bill">&nbsp;</td>
{% endif %}
<!-- new optional fields (2x) -->
<td class="hide-internal_reference">
{% if journal.hasMeta('internal_reference') %}
{{ journal.getMeta('internal_reference') }}
{% endif %}
</td>
<td class="hide-notes">
{% if journal.hasMeta('notes') %}
{{ journal.getMeta('notes')|nl2br }}
{% endif %}
</td>
<td class="hide-create_date">
{{ journal.created_at.formatLocalized(dateTimeFormat) }}
</td>

View File

@ -44,7 +44,7 @@
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'transaction_meta_data'|_ }}</h3>
<h3 class="box-title">{{ 'transaction_data'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('journal_description', journal.description) }}
@ -72,16 +72,45 @@
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'transaction_dates'|_ }}</h3>
<h3 class="box-title">{{ 'transaction_meta_data'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.date('date', journal.date) }}
{{ ExpandedForm.date('interest_date', journal.interest_date) }}
{% if optionalFields.interest_date or journal.interest_date %}
<!-- INTEREST DATE -->
{{ ExpandedForm.date('interest_date', journal.interest_date) }}
{% endif %}
{{ ExpandedForm.date('book_date', journal.book_date) }}
{% if optionalFields.book_date or journal.book_date %}
<!-- BOOK DATE -->
{{ ExpandedForm.date('book_date', journal.book_date) }}
{% endif %}
{{ ExpandedForm.date('process_date', journal.process_date) }}
{% if optionalFields.process_date or journal.process_date %}
<!-- PROCESSING DATE -->
{{ ExpandedForm.date('process_date', journal.process_date) }}
{% endif %}
{% if optionalFields.due_date or journal.due_date %}
<!-- DUE DATE -->
{{ ExpandedForm.date('due_date', journal.due_date) }}
{% endif %}
{% if optionalFields.payment_date or journal.payment_date %}
<!-- PAYMENT DATE -->
{{ ExpandedForm.date('payment_date', journal.payment_date) }}
{% endif %}
{% if optionalFields.internal_reference or journal.internal_reference %}
<!-- REFERENCE -->
{{ ExpandedForm.text('internal_reference', journal.internal_reference) }}
{% endif %}
{% if optionalFields.notes or journal.notes %}
<!-- NOTES -->
{{ ExpandedForm.textarea('notes', journal.notes) }}
{% endif %}
</div>
</div>
@ -194,18 +223,22 @@
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
<!-- ATTACHMENTS -->
{{ ExpandedForm.file('attachments[]', {'multiple': 'multiple','helpText': trans('firefly.upload_max_file_size', {'size': uploadSize|filesize}) }) }}
{% if optionalFields.attachments %}
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
<!-- ATTACHMENTS -->
{{ ExpandedForm.file('attachments[]', {'multiple': 'multiple','helpText': trans('firefly.upload_max_file_size', {'size': uploadSize|filesize}) }) }}
</div>
</div>
</div>
</div>
{% endif %}
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<!-- panel for options -->
<div class="box">

View File

@ -33,7 +33,7 @@
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'transaction_meta_data'|_ }}</h3>
<h3 class="box-title">{{ 'transaction_data'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.text('journal_description', journal.description) }}
@ -61,16 +61,45 @@
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'transaction_dates'|_ }}</h3>
<h3 class="box-title">{{ 'transaction_meta_data'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.date('date', journal.date) }}
{{ ExpandedForm.date('interest_date', journal.interest_date) }}
{% if optionalFields.interest_date or journal.interest_date %}
<!-- INTEREST DATE -->
{{ ExpandedForm.date('interest_date', journal.interest_date) }}
{% endif %}
{{ ExpandedForm.date('book_date', journal.book_date) }}
{% if optionalFields.book_date or journal.book_date %}
<!-- BOOK DATE -->
{{ ExpandedForm.date('book_date', journal.book_date) }}
{% endif %}
{{ ExpandedForm.date('process_date', journal.process_date) }}
{% if optionalFields.process_date or journal.process_date %}
<!-- PROCESSING DATE -->
{{ ExpandedForm.date('process_date', journal.process_date) }}
{% endif %}
{% if optionalFields.due_date or journal.due_date %}
<!-- DUE DATE -->
{{ ExpandedForm.date('due_date', journal.due_date) }}
{% endif %}
{% if optionalFields.payment_date or journal.payment_date %}
<!-- PAYMENT DATE -->
{{ ExpandedForm.date('payment_date', journal.payment_date) }}
{% endif %}
{% if optionalFields.internal_reference or journal.internal_reference %}
<!-- REFERENCE -->
{{ ExpandedForm.text('internal_reference', journal.internal_reference) }}
{% endif %}
{% if optionalFields.notes or journal.notes %}
<!-- NOTES -->
{{ ExpandedForm.textarea('notes', journal.notes) }}
{% endif %}
</div>
</div>
@ -171,18 +200,19 @@
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
<!-- ATTACHMENTS -->
{{ ExpandedForm.file('attachments[]', {'multiple': 'multiple','helpText': trans('firefly.upload_max_file_size', {'size': uploadSize|filesize}) }) }}
{% if optionalFields.attachments %}
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div>
<div class="box-body">
<!-- ATTACHMENTS -->
{{ ExpandedForm.file('attachments[]', {'multiple': 'multiple','helpText': trans('firefly.upload_max_file_size', {'size': uploadSize|filesize}) }) }}
</div>
</div>
</div>
</div>
{% endif %}
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<!-- panel for options -->
<div class="box">

View File

@ -51,12 +51,17 @@
<!-- ALWAYS SHOW DATE -->
{{ ExpandedForm.date('date', phpdate('Y-m-d')) }}
</div>
<div class="box-footer">
<button type="submit" id="transaction-btn" class="btn btn-success pull-right">
{{ trans('form.store_new_'~what) }}
</button>
</div>
</div>
</div>
<div class="col-lg-6 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
<h3 class="box-title">{{ 'optional_field_meta_data'|_ }}</h3>
</div>
<div class="box-body">
<!-- BUDGET ONLY WHEN CREATING A WITHDRAWAL -->
@ -66,32 +71,114 @@
{{ ExpandedForm.select('budget_id',budgets,0, {helpText: trans('firefly.no_budget_pointer')}) }}
{% endif %}
<!-- CATEGORY ALWAYS -->
{{ ExpandedForm.text('category') }}
<!-- INTEREST DATE -->
{{ ExpandedForm.date('interest_date') }}
<!-- BOOK DATE -->
{{ ExpandedForm.date('book_date') }}
<!-- PROCESSING DATE -->
{{ ExpandedForm.date('process_date') }}
<!-- TAGS -->
{{ ExpandedForm.text('tags') }}
<!-- RELATE THIS TRANSFER TO A PIGGY BANK -->
{{ ExpandedForm.select('piggy_bank_id',piggies) }}
<!-- ATTACHMENTS -->
{{ ExpandedForm.file('attachments[]', {'multiple': 'multiple','helpText': trans('firefly.upload_max_file_size', {'size': uploadSize|filesize}) }) }}
</div>
</div>
<!-- explain if necessary -->
{% if
not optionalFields.interest_date or
not optionalFields.book_date or
not optionalFields.process_date or
not optionalFields.due_date or
not optionalFields.payment_date or
not optionalFields.invoice_date or
not optionalFields.internal_reference or
not optionalFields.notes or
not optionalFields.attachments
%}
<p class="text-center text-success"><i class="fa fa-info-circle" aria-hidden="true"></i> <em>{{ trans('firefly.hidden_fields_preferences', {link: route('preferences')})|raw }}</em></p>
{% endif %}
<!-- box for dates -->
{% if
optionalFields.interest_date or optionalFields.book_date or optionalFields.process_date
or optionalFields.due_date or optionalFields.payment_date
or optionalFields.invoice_date
%}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optional_field_meta_dates'|_ }}</h3>
</div>
<div class="box-body">
{% if optionalFields.interest_date %}
<!-- INTEREST DATE -->
{{ ExpandedForm.date('interest_date') }}
{% endif %}
{% if optionalFields.book_date %}
<!-- BOOK DATE -->
{{ ExpandedForm.date('book_date') }}
{% endif %}
{% if optionalFields.process_date %}
<!-- PROCESSING DATE -->
{{ ExpandedForm.date('process_date') }}
{% endif %}
{% if optionalFields.due_date %}
<!-- DUE DATE -->
{{ ExpandedForm.date('due_date') }}
{% endif %}
{% if optionalFields.payment_date %}
<!-- PAYMENT DATE -->
{{ ExpandedForm.date('payment_date') }}
{% endif %}
{% if optionalFields.invoice_date %}
<!-- INVOICE DATE -->
{{ ExpandedForm.date('invoice_date') }}
{% endif %}
</div>
</div>
{% endif %}
<!-- box for business fields -->
{% if optionalFields.internal_reference or optionalFields.notes %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optional_field_meta_business'|_ }}</h3>
</div>
<div class="box-body">
{% if optionalFields.internal_reference %}
<!-- REFERENCE -->
{{ ExpandedForm.text('internal_reference') }}
{% endif %}
{% if optionalFields.notes %}
<!-- NOTES -->
{{ ExpandedForm.textarea('notes') }}
{% endif %}
</div>
</div>
{% endif %}
<!-- box for attachments -->
{% if optionalFields.attachments %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optional_field_attachments'|_ }}</h3>
</div>
<div class="box-body">
{% if optionalFields.attachments %}
<!-- ATTACHMENTS -->
{{ ExpandedForm.file('attachments[]', {'multiple': 'multiple','helpText': trans('firefly.upload_max_file_size', {'size': uploadSize|filesize}) }) }}
{% endif %}
</div>
</div>
{% endif %}
<!-- panel for options -->
<div class="box">
<div class="box-header with-border">

View File

@ -80,14 +80,6 @@
<!-- CATEGORY ALWAYS -->
{{ ExpandedForm.text('category',data['category']) }}
<!-- INTEREST DATE -->
{{ ExpandedForm.date('interest_date',data['interest_date']) }}
<!-- BOOK DATE -->
{{ ExpandedForm.date('book_date',data['book_date']) }}
<!-- PROCESSING DATE -->
{{ ExpandedForm.date('process_date',data['process_date']) }}
<!-- TAGS -->
{{ ExpandedForm.text('tags') }}
@ -101,7 +93,121 @@
</div>
</div>
<!-- end of panel for options-->
<!-- explain if necessary -->
{% if
not optionalFields.interest_date or
not optionalFields.book_date or
not optionalFields.process_date or
not optionalFields.due_date or
not optionalFields.payment_date or
not optionalFields.internal_reference or
not optionalFields.invoice_date or
not optionalFields.notes or
not optionalFields.attachments %}
<p class="text-center text-success"><i class="fa fa-info-circle" aria-hidden="true"></i>
<em>{{ trans('firefly.hidden_fields_preferences', {link: route('preferences')})|raw }}</em></p>
{% endif %}
<!-- box for dates -->
{% if
optionalFields.interest_date or
optionalFields.book_date or
optionalFields.process_date or
optionalFields.due_date or
optionalFields.payment_date or
optionalFields.invoice_date or
data.interest_date or
data.book_date or
data.process_date or
data.due_date or
data.payment_date
%}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optional_field_meta_dates'|_ }}</h3>
</div>
<div class="box-body">
{% if optionalFields.interest_date or data['interest_date'] %}
<!-- INTEREST DATE -->
{{ ExpandedForm.date('interest_date',data['interest_date']) }}
{% endif %}
{% if optionalFields.book_date or data['book_date'] %}
<!-- BOOK DATE -->
{{ ExpandedForm.date('book_date',data['book_date']) }}
{% endif %}
{% if optionalFields.process_date or data['process_date'] %}
<!-- PROCESSING DATE -->
{{ ExpandedForm.date('process_date',data['process_date']) }}
{% endif %}
{% if optionalFields.due_date or data['due_date'] %}
<!-- DUE DATE -->
{{ ExpandedForm.date('due_date',data['due_date']) }}
{% endif %}
{% if optionalFields.payment_date or data['payment_date'] %}
<!-- PAYMENT DATE -->
{{ ExpandedForm.date('payment_date',data['payment_date']) }}
{% endif %}
{% if optionalFields.invoice_date or data['invoice_date'] %}
<!-- INVOICE DATE -->
{{ ExpandedForm.date('invoice_date',data['invoice_date']) }}
{% endif %}
</div>
</div>
{% endif %}
<!-- box for business fields -->
{% if
optionalFields.internal_reference or
optionalFields.notes or
data['interal_reference'] or
data['notes']
%}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optional_field_meta_business'|_ }}</h3>
</div>
<div class="box-body">
{% if optionalFields.internal_reference or data['interal_reference'] %}
<!-- REFERENCE -->
{{ ExpandedForm.text('internal_reference', data['interal_reference']) }}
{% endif %}
{% if optionalFields.notes or data['notes'] %}
<!-- NOTES -->
{{ ExpandedForm.textarea('notes', data['notes']) }}
{% endif %}
</div>
</div>
{% endif %}
<!-- box for attachments -->
{% if optionalFields.attachments %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'optional_field_attachments'|_ }}</h3>
</div>
<div class="box-body">
{% if optionalFields.attachments %}
<!-- ATTACHMENTS -->
{{ ExpandedForm.file('attachments[]', {'multiple': 'multiple','helpText': trans('firefly.upload_max_file_size', {'size': uploadSize|filesize}) }) }}
{% endif %}
</div>
</div>
{% endif %}
<!-- panel for options -->
<div class="box">

View File

@ -20,12 +20,14 @@
</p>
<table class="table table-striped table-condensed">
<tr>
<th style="width: 5%;">&nbsp;</th>
<th style="width: 20%;">{{ trans('list.description') }}</th>
<th style="width: 15%;">{{ trans('list.amount') }}</th>
<th style="width: 20%;">{{ trans('list.date') }}</th>
<th style="width: 20%;">{{ trans('list.from') }}</th>
<th style="width: 20%;">{{ trans('list.to') }}</th>
<tr>
<th class="">&nbsp;</th>
<th class="col-lg-4 col-md-4 col-sm-4">{{ trans('list.description') }}</th>
<th class="col-lg-1 col-md-1 col-sm-1">{{ trans('list.amount') }}</th>
<th class="col-lg-1 col-md-1 col-sm-1">{{ trans('list.date') }}</th>
<th class="col-lg-2 col-md-2 col-sm-2">{{ trans('list.from') }}</th>
<th class="col-lg-2 col-md-2 col-sm-2">{{ trans('list.to') }}</th>
<th class="col-lg-2 col-md-2 col-sm-2">{{ trans('list.category') }}</th>
</tr>
{% for journal in journals %}
{% if journal.transaction_count == 2 %}
@ -76,7 +78,10 @@
{{ Form.input('text', 'destination_account_name['~journal.id~']', journal.destination_account_name, {'class': 'form-control', 'placeholder': trans('form.expense_account')}) }}
{% endif %}
</td>
<!-- category -->
<td>
{{ Form.input('text', 'category['~journal.id~']', journal.categories[0].name, {'class': 'form-control', 'placeholder': trans('form.category')}) }}
</td>
</tr>
{% endif %}

View File

@ -21,22 +21,45 @@
<td>{{ trans('list.date') }}</td>
<td>{{ journal.date.formatLocalized(monthAndDayFormat) }}</td>
</tr>
{% if journal.interest_date %}
{% if journal.getMeta('interest_date') %}
<tr>
<td>{{ trans('list.interest_date') }}</td>
<td>{{ journal.interest_date.formatLocalized(monthAndDayFormat) }}</td>
<td>{{ journal.getMeta('interest_date').formatLocalized(monthAndDayFormat) }}</td>
</tr>
{% endif %}
{% if journal.book_date %}
{% if journal.getMeta('book_date') %}
<tr>
<td>{{ trans('list.book_date') }}</td>
<td>{{ journal.book_date.formatLocalized(monthAndDayFormat) }}</td>
<td>{{ journal.getMeta('book_date').formatLocalized(monthAndDayFormat) }}</td>
</tr>
{% endif %}
{% if journal.process_date %}
{% if journal.getMeta('process_date') %}
<tr>
<td>{{ trans('list.process_date') }}</td>
<td>{{ journal.process_date.formatLocalized(monthAndDayFormat) }}</td>
<td>{{ journal.getMeta('process_date').formatLocalized(monthAndDayFormat) }}</td>
</tr>
{% endif %}
{% if journal.getMeta('due_date') %}
<tr>
<td>{{ trans('list.due_date') }}</td>
<td>{{ journal.getMeta('due_date').formatLocalized(monthAndDayFormat) }}</td>
</tr>
{% endif %}
{% if journal.getMeta('payment_date') %}
<tr>
<td>{{ trans('list.payment_date') }}</td>
<td>{{ journal.getMeta('payment_date').formatLocalized(monthAndDayFormat) }}</td>
</tr>
{% endif %}
{% if journal.getMeta('invoice_date') %}
<tr>
<td>{{ trans('list.invoice_date') }}</td>
<td>{{ journal.getMeta('invoice_date').formatLocalized(monthAndDayFormat) }}</td>
</tr>
{% endif %}
@ -94,6 +117,21 @@
</td>
</tr>
{% endif %}
{% if journal.getMeta('internal_reference') %}
<tr>
<td>{{ trans('list.interal_reference') }}</td>
<td>{{ journal.getMeta('internal_reference') }}</td>
</tr>
{% endif %}
{% if journal.getMeta('notes') %}
<tr>
<td>{{ trans('list.notes') }}</td>
<td>{{ journal.getMeta('notes')|nl2br }}</td>
</tr>
{% endif %}
</table>
</div>
<div class="box-footer">