mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-02-25 08:54:52 +01:00
Compare commits
50 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
38d50a78f4 | ||
|
|
0d947f9ba6 | ||
|
|
99c85a56bb | ||
|
|
ab1c074f27 | ||
|
|
abf3a148cc | ||
|
|
2733c92da5 | ||
|
|
9bfbe54ed5 | ||
|
|
5b27dea07c | ||
|
|
791e1000a3 | ||
|
|
7301d9f475 | ||
|
|
47a44e96f8 | ||
|
|
7d247eb737 | ||
|
|
373616e7bb | ||
|
|
bf3c11d582 | ||
|
|
b4b1c10db9 | ||
|
|
5ca531f47d | ||
|
|
07673cb528 | ||
|
|
67c6d81897 | ||
|
|
3c85da46b0 | ||
|
|
d263936be7 | ||
|
|
1524063d5a | ||
|
|
c3a403b8f0 | ||
|
|
1c1018adae | ||
|
|
350d5adf25 | ||
|
|
7e4defb9cc | ||
|
|
7121e4bc09 | ||
|
|
4540e48fe5 | ||
|
|
d06b51421f | ||
|
|
e096912e41 | ||
|
|
f0ad6e16fe | ||
|
|
734a302fa7 | ||
|
|
89b1b7bcb7 | ||
|
|
37b40f89bb | ||
|
|
0c63552d1b | ||
|
|
7db517e848 | ||
|
|
7e3ed6cf94 | ||
|
|
e10a88c00e | ||
|
|
b912a33b93 | ||
|
|
d9fb3627cc | ||
|
|
78ffa68ba4 | ||
|
|
37f4ead058 | ||
|
|
61630fca5b | ||
|
|
910d4c84a3 | ||
|
|
be1f29d8c1 | ||
|
|
9784d840cc | ||
|
|
db5ce13ff3 | ||
|
|
a2b943d949 | ||
|
|
d8098b4486 | ||
|
|
f8cff6623f | ||
|
|
65c61f76ff |
@@ -379,7 +379,7 @@ DEBUG_TOOLBAR_PANELS = [
|
||||
"debug_toolbar.panels.signals.SignalsPanel",
|
||||
"debug_toolbar.panels.redirects.RedirectsPanel",
|
||||
"debug_toolbar.panels.profiling.ProfilingPanel",
|
||||
"cachalot.panels.CachalotPanel",
|
||||
# "cachalot.panels.CachalotPanel",
|
||||
]
|
||||
INTERNAL_IPS = [
|
||||
"127.0.0.1",
|
||||
|
||||
@@ -139,7 +139,6 @@ class DynamicModelMultipleChoiceField(forms.ModelMultipleChoiceField):
|
||||
instance.save()
|
||||
return instance
|
||||
except Exception as e:
|
||||
print(e)
|
||||
raise ValidationError(_("Error creating new instance"))
|
||||
|
||||
def clean(self, value):
|
||||
|
||||
@@ -18,11 +18,13 @@ def get_format(format_type=None, lang=None, use_l10n=None):
|
||||
return "."
|
||||
elif number_format == "CD":
|
||||
return ","
|
||||
elif number_format == "SD" or number_format == "SC":
|
||||
return " "
|
||||
elif format_type == "DECIMAL_SEPARATOR":
|
||||
number_format = getattr(user_settings, "number_format", None)
|
||||
if number_format == "DC":
|
||||
if number_format == "DC" or number_format == "SC":
|
||||
return ","
|
||||
elif number_format == "CD":
|
||||
elif number_format == "CD" or number_format == "SD":
|
||||
return "."
|
||||
elif format_type == "SHORT_DATE_FORMAT":
|
||||
date_format = getattr(user_settings, "date_format", None)
|
||||
|
||||
@@ -91,6 +91,12 @@ def month_year_picker(request):
|
||||
for date in all_months
|
||||
]
|
||||
|
||||
today_url = (
|
||||
reverse(url, kwargs={"month": current_date.month, "year": current_date.year})
|
||||
if url
|
||||
else ""
|
||||
)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"common/fragments/month_year_picker.html",
|
||||
@@ -98,6 +104,7 @@ def month_year_picker(request):
|
||||
"month_year_data": result,
|
||||
"current_month": current_month,
|
||||
"current_year": current_year,
|
||||
"today_url": today_url,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@@ -4,13 +4,7 @@ from datetime import timedelta
|
||||
from django.db.models import QuerySet
|
||||
from django.utils import timezone
|
||||
|
||||
from apps.currencies.exchange_rates.providers import (
|
||||
SynthFinanceProvider,
|
||||
SynthFinanceStockProvider,
|
||||
CoinGeckoFreeProvider,
|
||||
CoinGeckoProProvider,
|
||||
TransitiveRateProvider,
|
||||
)
|
||||
import apps.currencies.exchange_rates.providers as providers
|
||||
from apps.currencies.models import ExchangeRateService, ExchangeRate, Currency
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -18,11 +12,12 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
# Map service types to provider classes
|
||||
PROVIDER_MAPPING = {
|
||||
"synth_finance": SynthFinanceProvider,
|
||||
"synth_finance_stock": SynthFinanceStockProvider,
|
||||
"coingecko_free": CoinGeckoFreeProvider,
|
||||
"coingecko_pro": CoinGeckoProProvider,
|
||||
"transitive": TransitiveRateProvider,
|
||||
"coingecko_free": providers.CoinGeckoFreeProvider,
|
||||
"coingecko_pro": providers.CoinGeckoProProvider,
|
||||
"transitive": providers.TransitiveRateProvider,
|
||||
"frankfurter": providers.FrankfurterProvider,
|
||||
"twelvedata": providers.TwelveDataProvider,
|
||||
"twelvedatamarkets": providers.TwelveDataMarketsProvider,
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -13,70 +13,6 @@ from apps.currencies.exchange_rates.base import ExchangeRateProvider
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SynthFinanceProvider(ExchangeRateProvider):
|
||||
"""Implementation for Synth Finance API (synthfinance.com)"""
|
||||
|
||||
BASE_URL = "https://api.synthfinance.com/rates/live"
|
||||
rates_inverted = False # SynthFinance returns non-inverted rates
|
||||
|
||||
def __init__(self, api_key: str = None):
|
||||
super().__init__(api_key)
|
||||
self.session = requests.Session()
|
||||
self.session.headers.update({"Authorization": f"Bearer {self.api_key}"})
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
results = []
|
||||
currency_groups = {}
|
||||
for currency in target_currencies:
|
||||
if currency.exchange_currency in exchange_currencies:
|
||||
group = currency_groups.setdefault(currency.exchange_currency.code, [])
|
||||
group.append(currency)
|
||||
|
||||
for base_currency, currencies in currency_groups.items():
|
||||
try:
|
||||
to_currencies = ",".join(
|
||||
currency.code
|
||||
for currency in currencies
|
||||
if currency.code != base_currency
|
||||
)
|
||||
response = self.session.get(
|
||||
f"{self.BASE_URL}",
|
||||
params={"from": base_currency, "to": to_currencies},
|
||||
)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
rates = data["data"]["rates"]
|
||||
|
||||
for currency in currencies:
|
||||
if currency.code == base_currency:
|
||||
rate = Decimal("1")
|
||||
else:
|
||||
rate = Decimal(str(rates[currency.code]))
|
||||
# Return the rate as is, without inversion
|
||||
results.append((currency.exchange_currency, currency, rate))
|
||||
|
||||
credits_used = data["meta"]["credits_used"]
|
||||
credits_remaining = data["meta"]["credits_remaining"]
|
||||
logger.info(
|
||||
f"Synth Finance API call: {credits_used} credits used, {credits_remaining} remaining"
|
||||
)
|
||||
except requests.RequestException as e:
|
||||
logger.error(
|
||||
f"Error fetching rates from Synth Finance API for base {base_currency}: {e}"
|
||||
)
|
||||
except KeyError as e:
|
||||
logger.error(
|
||||
f"Unexpected response structure from Synth Finance API for base {base_currency}: {e}"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Unexpected error processing Synth Finance data for base {base_currency}: {e}"
|
||||
)
|
||||
return results
|
||||
|
||||
|
||||
class CoinGeckoFreeProvider(ExchangeRateProvider):
|
||||
"""Implementation for CoinGecko Free API"""
|
||||
|
||||
@@ -152,71 +88,6 @@ class CoinGeckoProProvider(CoinGeckoFreeProvider):
|
||||
self.session.headers.update({"x-cg-pro-api-key": api_key})
|
||||
|
||||
|
||||
class SynthFinanceStockProvider(ExchangeRateProvider):
|
||||
"""Implementation for Synth Finance API Real-Time Prices endpoint (synthfinance.com)"""
|
||||
|
||||
BASE_URL = "https://api.synthfinance.com/tickers"
|
||||
rates_inverted = True
|
||||
|
||||
def __init__(self, api_key: str = None):
|
||||
super().__init__(api_key)
|
||||
self.session = requests.Session()
|
||||
self.session.headers.update(
|
||||
{"Authorization": f"Bearer {self.api_key}", "accept": "application/json"}
|
||||
)
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
results = []
|
||||
|
||||
for currency in target_currencies:
|
||||
if currency.exchange_currency not in exchange_currencies:
|
||||
continue
|
||||
|
||||
try:
|
||||
# Same currency has rate of 1
|
||||
if currency.code == currency.exchange_currency.code:
|
||||
rate = Decimal("1")
|
||||
results.append((currency.exchange_currency, currency, rate))
|
||||
continue
|
||||
|
||||
# Fetch real-time price for this ticker
|
||||
response = self.session.get(
|
||||
f"{self.BASE_URL}/{currency.code}/real-time"
|
||||
)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
|
||||
# Use fair market value as the rate
|
||||
rate = Decimal(data["data"]["fair_market_value"])
|
||||
results.append((currency.exchange_currency, currency, rate))
|
||||
|
||||
# Log API usage
|
||||
credits_used = data["meta"]["credits_used"]
|
||||
credits_remaining = data["meta"]["credits_remaining"]
|
||||
logger.info(
|
||||
f"Synth Finance API call for {currency.code}: {credits_used} credits used, {credits_remaining} remaining"
|
||||
)
|
||||
except requests.RequestException as e:
|
||||
logger.error(
|
||||
f"Error fetching rate from Synth Finance API for ticker {currency.code}: {e}",
|
||||
exc_info=True,
|
||||
)
|
||||
except KeyError as e:
|
||||
logger.error(
|
||||
f"Unexpected response structure from Synth Finance API for ticker {currency.code}: {e}",
|
||||
exc_info=True,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Unexpected error processing Synth Finance data for ticker {currency.code}: {e}",
|
||||
exc_info=True,
|
||||
)
|
||||
|
||||
return results
|
||||
|
||||
|
||||
class TransitiveRateProvider(ExchangeRateProvider):
|
||||
"""Calculates exchange rates through paths of existing rates"""
|
||||
|
||||
@@ -306,3 +177,329 @@ class TransitiveRateProvider(ExchangeRateProvider):
|
||||
queue.append((neighbor, path + [neighbor], current_rate * rate))
|
||||
|
||||
return None, None
|
||||
|
||||
|
||||
class FrankfurterProvider(ExchangeRateProvider):
|
||||
"""Implementation for the Frankfurter API (frankfurter.dev)"""
|
||||
|
||||
BASE_URL = "https://api.frankfurter.dev/v1/latest"
|
||||
rates_inverted = (
|
||||
False # Frankfurter returns non-inverted rates (e.g., 1 EUR = 1.1 USD)
|
||||
)
|
||||
|
||||
def __init__(self, api_key: str = None):
|
||||
"""
|
||||
Initializes the provider. The Frankfurter API does not require an API key,
|
||||
so the api_key parameter is ignored.
|
||||
"""
|
||||
super().__init__(api_key)
|
||||
self.session = requests.Session()
|
||||
|
||||
@classmethod
|
||||
def requires_api_key(cls) -> bool:
|
||||
return False
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
results = []
|
||||
currency_groups = {}
|
||||
# Group target currencies by their exchange (base) currency to minimize API calls
|
||||
for currency in target_currencies:
|
||||
if currency.exchange_currency in exchange_currencies:
|
||||
group = currency_groups.setdefault(currency.exchange_currency.code, [])
|
||||
group.append(currency)
|
||||
|
||||
# Make one API call for each base currency
|
||||
for base_currency, currencies in currency_groups.items():
|
||||
try:
|
||||
# Create a comma-separated list of target currency codes
|
||||
to_currencies = ",".join(
|
||||
currency.code
|
||||
for currency in currencies
|
||||
if currency.code != base_currency
|
||||
)
|
||||
|
||||
# If there are no target currencies other than the base, skip the API call
|
||||
if not to_currencies:
|
||||
# Handle the case where the only request is for the base rate (e.g., USD to USD)
|
||||
for currency in currencies:
|
||||
if currency.code == base_currency:
|
||||
results.append(
|
||||
(currency.exchange_currency, currency, Decimal("1"))
|
||||
)
|
||||
continue
|
||||
|
||||
response = self.session.get(
|
||||
self.BASE_URL,
|
||||
params={"base": base_currency, "symbols": to_currencies},
|
||||
)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
rates = data["rates"]
|
||||
|
||||
# Process the returned rates
|
||||
for currency in currencies:
|
||||
if currency.code == base_currency:
|
||||
# The rate for the base currency to itself is always 1
|
||||
rate = Decimal("1")
|
||||
else:
|
||||
rate = Decimal(str(rates[currency.code]))
|
||||
|
||||
results.append((currency.exchange_currency, currency, rate))
|
||||
|
||||
except requests.RequestException as e:
|
||||
logger.error(
|
||||
f"Error fetching rates from Frankfurter API for base {base_currency}: {e}"
|
||||
)
|
||||
except KeyError as e:
|
||||
logger.error(
|
||||
f"Unexpected response structure from Frankfurter API for base {base_currency}: {e}"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Unexpected error processing Frankfurter data for base {base_currency}: {e}"
|
||||
)
|
||||
return results
|
||||
|
||||
|
||||
class TwelveDataProvider(ExchangeRateProvider):
|
||||
"""Implementation for the Twelve Data API (twelvedata.com)"""
|
||||
|
||||
BASE_URL = "https://api.twelvedata.com/exchange_rate"
|
||||
rates_inverted = (
|
||||
False # The API returns direct rates, e.g., for EUR/USD it's 1 EUR = X USD
|
||||
)
|
||||
|
||||
def __init__(self, api_key: str):
|
||||
"""
|
||||
Initializes the provider with an API key and a requests session.
|
||||
"""
|
||||
super().__init__(api_key)
|
||||
self.session = requests.Session()
|
||||
|
||||
@classmethod
|
||||
def requires_api_key(cls) -> bool:
|
||||
"""This provider requires an API key."""
|
||||
return True
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
"""
|
||||
Fetches exchange rates from the Twelve Data API for the given currency pairs.
|
||||
|
||||
This provider makes one API call for each requested currency pair.
|
||||
"""
|
||||
results = []
|
||||
|
||||
for target_currency in target_currencies:
|
||||
# Ensure the target currency's exchange currency is one we're interested in
|
||||
if target_currency.exchange_currency not in exchange_currencies:
|
||||
continue
|
||||
|
||||
base_currency = target_currency.exchange_currency
|
||||
|
||||
# The exchange rate for the same currency is always 1
|
||||
if base_currency.code == target_currency.code:
|
||||
rate = Decimal("1")
|
||||
results.append((base_currency, target_currency, rate))
|
||||
continue
|
||||
|
||||
# Construct the symbol in the format "BASE/TARGET", e.g., "EUR/USD"
|
||||
symbol = f"{base_currency.code}/{target_currency.code}"
|
||||
|
||||
try:
|
||||
params = {
|
||||
"symbol": symbol,
|
||||
"apikey": self.api_key,
|
||||
}
|
||||
|
||||
response = self.session.get(self.BASE_URL, params=params)
|
||||
response.raise_for_status() # Raise an HTTPError for bad responses (4xx or 5xx)
|
||||
|
||||
data = response.json()
|
||||
|
||||
# The API may return an error message in a JSON object
|
||||
if "rate" not in data:
|
||||
error_message = data.get("message", "Rate not found in response.")
|
||||
logger.error(
|
||||
f"Could not fetch rate for {symbol} from Twelve Data: {error_message}"
|
||||
)
|
||||
continue
|
||||
|
||||
# Convert the rate to a Decimal for precision
|
||||
rate = Decimal(str(data["rate"]))
|
||||
results.append((base_currency, target_currency, rate))
|
||||
|
||||
logger.info(f"Successfully fetched rate for {symbol} from Twelve Data.")
|
||||
|
||||
time.sleep(
|
||||
60
|
||||
) # We sleep every pair as to not step over TwelveData's minute limit
|
||||
|
||||
except requests.RequestException as e:
|
||||
logger.error(
|
||||
f"Error fetching rate from Twelve Data API for symbol {symbol}: {e}"
|
||||
)
|
||||
except KeyError as e:
|
||||
logger.error(
|
||||
f"Unexpected response structure from Twelve Data API for symbol {symbol}: Missing key {e}"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"An unexpected error occurred while processing Twelve Data for {symbol}: {e}"
|
||||
)
|
||||
|
||||
return results
|
||||
|
||||
|
||||
class TwelveDataMarketsProvider(ExchangeRateProvider):
|
||||
"""
|
||||
Provides prices for market instruments (stocks, ETFs, etc.) using the Twelve Data API.
|
||||
|
||||
This provider performs a multi-step process:
|
||||
1. Parses instrument codes which can be symbols, FIGI, CUSIP, or ISIN.
|
||||
2. For CUSIPs, it defaults the currency to USD. For all others, it searches
|
||||
for the instrument to determine its native trading currency.
|
||||
3. Fetches the latest price for the instrument in its native currency.
|
||||
4. Converts the price to the requested target exchange currency.
|
||||
"""
|
||||
|
||||
SYMBOL_SEARCH_URL = "https://api.twelvedata.com/symbol_search"
|
||||
PRICE_URL = "https://api.twelvedata.com/price"
|
||||
EXCHANGE_RATE_URL = "https://api.twelvedata.com/exchange_rate"
|
||||
|
||||
rates_inverted = True
|
||||
|
||||
def __init__(self, api_key: str):
|
||||
super().__init__(api_key)
|
||||
self.session = requests.Session()
|
||||
|
||||
@classmethod
|
||||
def requires_api_key(cls) -> bool:
|
||||
return True
|
||||
|
||||
def _parse_code(self, raw_code: str) -> Tuple[str, str]:
|
||||
"""Parses the raw code to determine its type and value."""
|
||||
if raw_code.startswith("figi:"):
|
||||
return "figi", raw_code.removeprefix("figi:")
|
||||
if raw_code.startswith("cusip:"):
|
||||
return "cusip", raw_code.removeprefix("cusip:")
|
||||
if raw_code.startswith("isin:"):
|
||||
return "isin", raw_code.removeprefix("isin:")
|
||||
return "symbol", raw_code
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
results = []
|
||||
|
||||
for asset in target_currencies:
|
||||
if asset.exchange_currency not in exchange_currencies:
|
||||
continue
|
||||
|
||||
code_type, code_value = self._parse_code(asset.code)
|
||||
original_currency_code = None
|
||||
|
||||
try:
|
||||
# Determine the instrument's native currency
|
||||
if code_type == "cusip":
|
||||
# CUSIP codes always default to USD
|
||||
original_currency_code = "USD"
|
||||
logger.info(f"Defaulting CUSIP {code_value} to USD currency.")
|
||||
else:
|
||||
# For all other types, find currency via symbol search
|
||||
search_params = {"symbol": code_value, "apikey": "demo"}
|
||||
search_res = self.session.get(
|
||||
self.SYMBOL_SEARCH_URL, params=search_params
|
||||
)
|
||||
search_res.raise_for_status()
|
||||
search_data = search_res.json()
|
||||
|
||||
if not search_data.get("data"):
|
||||
logger.warning(
|
||||
f"TwelveDataMarkets: Symbol search for '{code_value}' returned no results."
|
||||
)
|
||||
continue
|
||||
|
||||
instrument_data = search_data["data"][0]
|
||||
original_currency_code = instrument_data.get("currency")
|
||||
|
||||
if not original_currency_code:
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: Could not determine original currency for '{code_value}'."
|
||||
)
|
||||
continue
|
||||
|
||||
# Get the instrument's price in its native currency
|
||||
price_params = {code_type: code_value, "apikey": self.api_key}
|
||||
price_res = self.session.get(self.PRICE_URL, params=price_params)
|
||||
price_res.raise_for_status()
|
||||
price_data = price_res.json()
|
||||
|
||||
if "price" not in price_data:
|
||||
error_message = price_data.get(
|
||||
"message", "Price key not found in response"
|
||||
)
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: Could not get price for {code_type} '{code_value}': {error_message}"
|
||||
)
|
||||
continue
|
||||
|
||||
price_in_original_currency = Decimal(price_data["price"])
|
||||
|
||||
# Convert price to the target exchange currency
|
||||
target_exchange_currency = asset.exchange_currency
|
||||
|
||||
if (
|
||||
original_currency_code.upper()
|
||||
== target_exchange_currency.code.upper()
|
||||
):
|
||||
final_price = price_in_original_currency
|
||||
else:
|
||||
rate_symbol = (
|
||||
f"{original_currency_code}/{target_exchange_currency.code}"
|
||||
)
|
||||
rate_params = {"symbol": rate_symbol, "apikey": self.api_key}
|
||||
rate_res = self.session.get(
|
||||
self.EXCHANGE_RATE_URL, params=rate_params
|
||||
)
|
||||
rate_res.raise_for_status()
|
||||
rate_data = rate_res.json()
|
||||
|
||||
if "rate" not in rate_data:
|
||||
error_message = rate_data.get(
|
||||
"message", "Rate key not found in response"
|
||||
)
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: Could not get conversion rate for '{rate_symbol}': {error_message}"
|
||||
)
|
||||
continue
|
||||
|
||||
conversion_rate = Decimal(str(rate_data["rate"]))
|
||||
final_price = price_in_original_currency * conversion_rate
|
||||
|
||||
results.append((target_exchange_currency, asset, final_price))
|
||||
logger.info(
|
||||
f"Successfully processed price for {asset.code} as {final_price} {target_exchange_currency.code}"
|
||||
)
|
||||
|
||||
time.sleep(
|
||||
60
|
||||
) # We sleep every pair as to not step over TwelveData's minute limit
|
||||
|
||||
except requests.RequestException as e:
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: API request failed for {code_value}: {e}"
|
||||
)
|
||||
except (KeyError, IndexError) as e:
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: Error processing API response for {code_value}: {e}"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: An unexpected error occurred for {code_value}: {e}"
|
||||
)
|
||||
|
||||
return results
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-16 22:18
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0016_alter_exchangerate_automatic'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exchangerateservice',
|
||||
name='service_type',
|
||||
field=models.CharField(choices=[('synth_finance', 'Synth Finance'), ('synth_finance_stock', 'Synth Finance Stock'), ('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter')], max_length=255, verbose_name='Service Type'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-17 03:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0017_alter_exchangerateservice_service_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exchangerateservice',
|
||||
name='service_type',
|
||||
field=models.CharField(choices=[('synth_finance', 'Synth Finance'), ('synth_finance_stock', 'Synth Finance Stock'), ('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter'), ('twelvedata', 'TwelveData')], max_length=255, verbose_name='Service Type'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-17 06:01
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0018_alter_exchangerateservice_service_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exchangerateservice',
|
||||
name='service_type',
|
||||
field=models.CharField(choices=[('synth_finance', 'Synth Finance'), ('synth_finance_stock', 'Synth Finance Stock'), ('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter'), ('twelvedata', 'TwelveData'), ('twelvedatamarkets', 'TwelveData Markets')], max_length=255, verbose_name='Service Type'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,51 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-17 06:25
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
# The new value we are migrating to
|
||||
NEW_SERVICE_TYPE = "frankfurter"
|
||||
# The old values we are deprecating
|
||||
OLD_SERVICE_TYPE_TO_UPDATE = "synth_finance"
|
||||
OLD_SERVICE_TYPE_TO_DELETE = "synth_finance_stock"
|
||||
|
||||
|
||||
def forwards_func(apps, schema_editor):
|
||||
"""
|
||||
Forward migration:
|
||||
- Deletes all ExchangeRateService instances with service_type 'synth_finance_stock'.
|
||||
- Updates all ExchangeRateService instances with service_type 'synth_finance' to 'frankfurter'.
|
||||
"""
|
||||
ExchangeRateService = apps.get_model("currencies", "ExchangeRateService")
|
||||
db_alias = schema_editor.connection.alias
|
||||
|
||||
# 1. Delete the SYNTH_FINANCE_STOCK entries
|
||||
ExchangeRateService.objects.using(db_alias).filter(
|
||||
service_type=OLD_SERVICE_TYPE_TO_DELETE
|
||||
).delete()
|
||||
|
||||
# 2. Update the SYNTH_FINANCE entries to FRANKFURTER
|
||||
ExchangeRateService.objects.using(db_alias).filter(
|
||||
service_type=OLD_SERVICE_TYPE_TO_UPDATE
|
||||
).update(service_type=NEW_SERVICE_TYPE, api_key=None)
|
||||
|
||||
|
||||
def backwards_func(apps, schema_editor):
|
||||
"""
|
||||
Backward migration: This operation is not safely reversible.
|
||||
- We cannot know which 'frankfurter' services were originally 'synth_finance'.
|
||||
- The deleted 'synth_finance_stock' services cannot be recovered.
|
||||
We will leave this function empty to allow migrating backwards without doing anything.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
# Add the previous migration file here
|
||||
("currencies", "0019_alter_exchangerateservice_service_type"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forwards_func, reverse_code=backwards_func),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-17 06:29
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0020_migrate_synth_finance_services'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exchangerateservice',
|
||||
name='service_type',
|
||||
field=models.CharField(choices=[('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter'), ('twelvedata', 'TwelveData'), ('twelvedatamarkets', 'TwelveData Markets')], max_length=255, verbose_name='Service Type'),
|
||||
),
|
||||
]
|
||||
@@ -94,11 +94,12 @@ class ExchangeRateService(models.Model):
|
||||
"""Configuration for exchange rate services"""
|
||||
|
||||
class ServiceType(models.TextChoices):
|
||||
SYNTH_FINANCE = "synth_finance", "Synth Finance"
|
||||
SYNTH_FINANCE_STOCK = "synth_finance_stock", "Synth Finance Stock"
|
||||
COINGECKO_FREE = "coingecko_free", "CoinGecko (Demo/Free)"
|
||||
COINGECKO_PRO = "coingecko_pro", "CoinGecko (Pro)"
|
||||
TRANSITIVE = "transitive", "Transitive (Calculated from Existing Rates)"
|
||||
FRANKFURTER = "frankfurter", "Frankfurter"
|
||||
TWELVEDATA = "twelvedata", "TwelveData"
|
||||
TWELVEDATA_MARKETS = "twelvedatamarkets", "TwelveData Markets"
|
||||
|
||||
class IntervalType(models.TextChoices):
|
||||
ON = "on", _("On")
|
||||
|
||||
@@ -9,7 +9,9 @@ from apps.currencies.models import Currency
|
||||
from apps.currencies.utils.convert import convert
|
||||
|
||||
|
||||
def get_categories_totals(transactions_queryset, ignore_empty=False):
|
||||
def get_categories_totals(
|
||||
transactions_queryset, ignore_empty=False, show_entities=False
|
||||
):
|
||||
# First get the category totals as before
|
||||
category_currency_metrics = (
|
||||
transactions_queryset.values(
|
||||
@@ -240,6 +242,7 @@ def get_categories_totals(transactions_queryset, ignore_empty=False):
|
||||
result[category_id]["tags"][tag_key] = {
|
||||
"name": tag_name,
|
||||
"currencies": {},
|
||||
"entities": {},
|
||||
}
|
||||
|
||||
currency_id = tag_metric["account__currency"]
|
||||
@@ -319,4 +322,173 @@ def get_categories_totals(transactions_queryset, ignore_empty=False):
|
||||
currency_id
|
||||
] = tag_currency_data
|
||||
|
||||
if show_entities:
|
||||
entity_metrics = transactions_queryset.values(
|
||||
"category",
|
||||
"tags",
|
||||
"entities",
|
||||
"entities__name",
|
||||
"account__currency",
|
||||
"account__currency__code",
|
||||
"account__currency__name",
|
||||
"account__currency__decimal_places",
|
||||
"account__currency__prefix",
|
||||
"account__currency__suffix",
|
||||
"account__currency__exchange_currency",
|
||||
).annotate(
|
||||
expense_current=Coalesce(
|
||||
Sum(
|
||||
Case(
|
||||
When(
|
||||
type=Transaction.Type.EXPENSE, is_paid=True, then="amount"
|
||||
),
|
||||
default=Value(0),
|
||||
output_field=models.DecimalField(),
|
||||
)
|
||||
),
|
||||
Decimal("0"),
|
||||
),
|
||||
expense_projected=Coalesce(
|
||||
Sum(
|
||||
Case(
|
||||
When(
|
||||
type=Transaction.Type.EXPENSE, is_paid=False, then="amount"
|
||||
),
|
||||
default=Value(0),
|
||||
output_field=models.DecimalField(),
|
||||
)
|
||||
),
|
||||
Decimal("0"),
|
||||
),
|
||||
income_current=Coalesce(
|
||||
Sum(
|
||||
Case(
|
||||
When(type=Transaction.Type.INCOME, is_paid=True, then="amount"),
|
||||
default=Value(0),
|
||||
output_field=models.DecimalField(),
|
||||
)
|
||||
),
|
||||
Decimal("0"),
|
||||
),
|
||||
income_projected=Coalesce(
|
||||
Sum(
|
||||
Case(
|
||||
When(
|
||||
type=Transaction.Type.INCOME, is_paid=False, then="amount"
|
||||
),
|
||||
default=Value(0),
|
||||
output_field=models.DecimalField(),
|
||||
)
|
||||
),
|
||||
Decimal("0"),
|
||||
),
|
||||
)
|
||||
|
||||
for entity_metric in entity_metrics:
|
||||
category_id = entity_metric["category"]
|
||||
tag_id = entity_metric["tags"]
|
||||
entity_id = entity_metric["entities"]
|
||||
|
||||
if not entity_id:
|
||||
continue
|
||||
|
||||
if category_id in result:
|
||||
tag_key = tag_id if tag_id is not None else "untagged"
|
||||
if tag_key in result[category_id]["tags"]:
|
||||
entity_key = entity_id
|
||||
entity_name = entity_metric["entities__name"]
|
||||
|
||||
if "entities" not in result[category_id]["tags"][tag_key]:
|
||||
result[category_id]["tags"][tag_key]["entities"] = {}
|
||||
|
||||
if (
|
||||
entity_key
|
||||
not in result[category_id]["tags"][tag_key]["entities"]
|
||||
):
|
||||
result[category_id]["tags"][tag_key]["entities"][entity_key] = {
|
||||
"name": entity_name,
|
||||
"currencies": {},
|
||||
}
|
||||
|
||||
currency_id = entity_metric["account__currency"]
|
||||
|
||||
entity_total_current = (
|
||||
entity_metric["income_current"]
|
||||
- entity_metric["expense_current"]
|
||||
)
|
||||
entity_total_projected = (
|
||||
entity_metric["income_projected"]
|
||||
- entity_metric["expense_projected"]
|
||||
)
|
||||
entity_total_income = (
|
||||
entity_metric["income_current"]
|
||||
+ entity_metric["income_projected"]
|
||||
)
|
||||
entity_total_expense = (
|
||||
entity_metric["expense_current"]
|
||||
+ entity_metric["expense_projected"]
|
||||
)
|
||||
entity_total_final = entity_total_current + entity_total_projected
|
||||
|
||||
entity_currency_data = {
|
||||
"currency": {
|
||||
"code": entity_metric["account__currency__code"],
|
||||
"name": entity_metric["account__currency__name"],
|
||||
"decimal_places": entity_metric[
|
||||
"account__currency__decimal_places"
|
||||
],
|
||||
"prefix": entity_metric["account__currency__prefix"],
|
||||
"suffix": entity_metric["account__currency__suffix"],
|
||||
},
|
||||
"expense_current": entity_metric["expense_current"],
|
||||
"expense_projected": entity_metric["expense_projected"],
|
||||
"total_expense": entity_total_expense,
|
||||
"income_current": entity_metric["income_current"],
|
||||
"income_projected": entity_metric["income_projected"],
|
||||
"total_income": entity_total_income,
|
||||
"total_current": entity_total_current,
|
||||
"total_projected": entity_total_projected,
|
||||
"total_final": entity_total_final,
|
||||
}
|
||||
|
||||
if entity_metric["account__currency__exchange_currency"]:
|
||||
from_currency = Currency.objects.get(id=currency_id)
|
||||
exchange_currency = Currency.objects.get(
|
||||
id=entity_metric["account__currency__exchange_currency"]
|
||||
)
|
||||
|
||||
exchanged = {}
|
||||
for field in [
|
||||
"expense_current",
|
||||
"expense_projected",
|
||||
"income_current",
|
||||
"income_projected",
|
||||
"total_income",
|
||||
"total_expense",
|
||||
"total_current",
|
||||
"total_projected",
|
||||
"total_final",
|
||||
]:
|
||||
amount, prefix, suffix, decimal_places = convert(
|
||||
amount=entity_currency_data[field],
|
||||
from_currency=from_currency,
|
||||
to_currency=exchange_currency,
|
||||
)
|
||||
if amount is not None:
|
||||
exchanged[field] = amount
|
||||
if "currency" not in exchanged:
|
||||
exchanged["currency"] = {
|
||||
"prefix": prefix,
|
||||
"suffix": suffix,
|
||||
"decimal_places": decimal_places,
|
||||
"code": exchange_currency.code,
|
||||
"name": exchange_currency.name,
|
||||
}
|
||||
if exchanged:
|
||||
entity_currency_data["exchanged"] = exchanged
|
||||
|
||||
result[category_id]["tags"][tag_key]["entities"][entity_key][
|
||||
"currencies"
|
||||
][currency_id] = entity_currency_data
|
||||
|
||||
return result
|
||||
|
||||
@@ -180,6 +180,14 @@ def category_overview(request):
|
||||
else:
|
||||
show_tags = request.session.get("insights_category_explorer_show_tags", True)
|
||||
|
||||
if "show_entities" in request.GET:
|
||||
show_entities = request.GET["show_entities"] == "on"
|
||||
request.session["insights_category_explorer_show_entities"] = show_entities
|
||||
else:
|
||||
show_entities = request.session.get(
|
||||
"insights_category_explorer_show_entities", False
|
||||
)
|
||||
|
||||
if "showing" in request.GET:
|
||||
showing = request.GET["showing"]
|
||||
request.session["insights_category_explorer_showing"] = showing
|
||||
@@ -190,7 +198,9 @@ def category_overview(request):
|
||||
transactions = get_transactions(request, include_silent=True)
|
||||
|
||||
total_table = get_categories_totals(
|
||||
transactions_queryset=transactions, ignore_empty=False
|
||||
transactions_queryset=transactions,
|
||||
ignore_empty=False,
|
||||
show_entities=show_entities,
|
||||
)
|
||||
|
||||
return render(
|
||||
@@ -200,6 +210,7 @@ def category_overview(request):
|
||||
"total_table": total_table,
|
||||
"view_type": view_type,
|
||||
"show_tags": show_tags,
|
||||
"show_entities": show_entities,
|
||||
"showing": showing,
|
||||
},
|
||||
)
|
||||
|
||||
@@ -20,7 +20,6 @@ from apps.transactions.utils.calculations import (
|
||||
@require_http_methods(["GET"])
|
||||
def net_worth(request):
|
||||
if "view_type" in request.GET:
|
||||
print(request.GET["view_type"])
|
||||
view_type = request.GET["view_type"]
|
||||
request.session["networth_view_type"] = view_type
|
||||
else:
|
||||
|
||||
@@ -60,26 +60,20 @@ class TransactionsFilter(django_filters.FilterSet):
|
||||
label=_("Currencies"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
)
|
||||
category = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name="category__name",
|
||||
queryset=TransactionCategory.objects.all(),
|
||||
to_field_name="name",
|
||||
category = django_filters.MultipleChoiceFilter(
|
||||
label=_("Categories"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
method="filter_category",
|
||||
)
|
||||
tags = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name="tags__name",
|
||||
queryset=TransactionTag.objects.all(),
|
||||
to_field_name="name",
|
||||
tags = django_filters.MultipleChoiceFilter(
|
||||
label=_("Tags"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
method="filter_tags",
|
||||
)
|
||||
entities = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name="entities__name",
|
||||
queryset=TransactionEntity.objects.all(),
|
||||
to_field_name="name",
|
||||
entities = django_filters.MultipleChoiceFilter(
|
||||
label=_("Entities"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
method="filter_entities",
|
||||
)
|
||||
is_paid = django_filters.MultipleChoiceFilter(
|
||||
choices=SITUACAO_CHOICES,
|
||||
@@ -125,6 +119,7 @@ class TransactionsFilter(django_filters.FilterSet):
|
||||
"is_paid",
|
||||
"category",
|
||||
"tags",
|
||||
"entities",
|
||||
"date_start",
|
||||
"date_end",
|
||||
"reference_date_start",
|
||||
@@ -186,6 +181,93 @@ class TransactionsFilter(django_filters.FilterSet):
|
||||
self.form.fields["date_end"].widget = AirDatePickerInput()
|
||||
|
||||
self.form.fields["account"].queryset = Account.objects.all()
|
||||
self.form.fields["category"].queryset = TransactionCategory.objects.all()
|
||||
self.form.fields["tags"].queryset = TransactionTag.objects.all()
|
||||
self.form.fields["entities"].queryset = TransactionEntity.objects.all()
|
||||
category_choices = list(
|
||||
TransactionCategory.objects.values_list("name", "name").order_by("name")
|
||||
)
|
||||
custom_choices = [
|
||||
("any", _("Categorized")),
|
||||
("uncategorized", _("Uncategorized")),
|
||||
]
|
||||
self.form.fields["category"].choices = custom_choices + category_choices
|
||||
tag_choices = list(
|
||||
TransactionTag.objects.values_list("name", "name").order_by("name")
|
||||
)
|
||||
custom_tag_choices = [("any", _("Tagged")), ("untagged", _("Untagged"))]
|
||||
self.form.fields["tags"].choices = custom_tag_choices + tag_choices
|
||||
entity_choices = list(
|
||||
TransactionEntity.objects.values_list("name", "name").order_by("name")
|
||||
)
|
||||
custom_entity_choices = [
|
||||
("any", _("Any entity")),
|
||||
("no_entity", _("No entity")),
|
||||
]
|
||||
self.form.fields["entities"].choices = custom_entity_choices + entity_choices
|
||||
|
||||
@staticmethod
|
||||
def filter_category(queryset, name, value):
|
||||
if not value:
|
||||
return queryset
|
||||
|
||||
value = list(value)
|
||||
|
||||
if "any" in value:
|
||||
return queryset.filter(category__isnull=False)
|
||||
|
||||
q = Q()
|
||||
if "uncategorized" in value:
|
||||
q |= Q(category__isnull=True)
|
||||
value.remove("uncategorized")
|
||||
|
||||
if value:
|
||||
q |= Q(category__name__in=value)
|
||||
|
||||
if q.children:
|
||||
return queryset.filter(q)
|
||||
|
||||
return queryset
|
||||
|
||||
@staticmethod
|
||||
def filter_tags(queryset, name, value):
|
||||
if not value:
|
||||
return queryset
|
||||
|
||||
value = list(value)
|
||||
|
||||
if "any" in value:
|
||||
return queryset.filter(tags__isnull=False).distinct()
|
||||
|
||||
q = Q()
|
||||
if "untagged" in value:
|
||||
q |= Q(tags__isnull=True)
|
||||
value.remove("untagged")
|
||||
|
||||
if value:
|
||||
q |= Q(tags__name__in=value)
|
||||
|
||||
if q.children:
|
||||
return queryset.filter(q).distinct()
|
||||
|
||||
return queryset
|
||||
|
||||
@staticmethod
|
||||
def filter_entities(queryset, name, value):
|
||||
if not value:
|
||||
return queryset
|
||||
|
||||
value = list(value)
|
||||
|
||||
if "any" in value:
|
||||
return queryset.filter(entities__isnull=False).distinct()
|
||||
|
||||
q = Q()
|
||||
if "no_entity" in value:
|
||||
q |= Q(entities__isnull=True)
|
||||
value.remove("no_entity")
|
||||
|
||||
if value:
|
||||
q |= Q(entities__name__in=value)
|
||||
|
||||
if q.children:
|
||||
return queryset.filter(q).distinct()
|
||||
|
||||
return queryset
|
||||
|
||||
@@ -89,6 +89,8 @@ class UserSettingsForm(forms.ModelForm):
|
||||
("AA", _("Default")),
|
||||
("DC", "1.234,50"),
|
||||
("CD", "1,234.50"),
|
||||
("SD", "1 234.50"),
|
||||
("SC", "1 234,50"),
|
||||
]
|
||||
|
||||
date_format = forms.ChoiceField(
|
||||
|
||||
@@ -17,6 +17,11 @@ urlpatterns = [
|
||||
views.toggle_sound_playing,
|
||||
name="toggle_sound_playing",
|
||||
),
|
||||
path(
|
||||
"user/toggle-sidebar/",
|
||||
views.toggle_sidebar_status,
|
||||
name="toggle_sidebar_status",
|
||||
),
|
||||
path(
|
||||
"user/settings/",
|
||||
views.update_settings,
|
||||
|
||||
@@ -116,6 +116,24 @@ def update_settings(request):
|
||||
return render(request, "users/fragments/user_settings.html", {"form": form})
|
||||
|
||||
|
||||
@only_htmx
|
||||
@htmx_login_required
|
||||
def toggle_sidebar_status(request):
|
||||
if not request.session.get("sidebar_status"):
|
||||
request.session["sidebar_status"] = "floating"
|
||||
|
||||
if request.session["sidebar_status"] == "floating":
|
||||
request.session["sidebar_status"] = "fixed"
|
||||
elif request.session["sidebar_status"] == "fixed":
|
||||
request.session["sidebar_status"] = "floating"
|
||||
else:
|
||||
request.session["sidebar_status"] = "fixed"
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
)
|
||||
|
||||
|
||||
@htmx_login_required
|
||||
@is_superuser
|
||||
@require_http_methods(["GET"])
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-09 06:57+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-07-22 06:17+0000\n"
|
||||
"Last-Translator: seraphblade2010 <marc.butenhoff@web.de>\n"
|
||||
"Language-Team: German <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -31,8 +31,8 @@ msgstr "Gruppe Name"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Aktualisierung"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Aktualisierung"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr "Neuer Saldo"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Kategorie"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -128,7 +128,7 @@ msgstr "Kontengruppe"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Kontengruppen"
|
||||
|
||||
@@ -189,11 +189,11 @@ msgstr "Konto"
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Konten"
|
||||
|
||||
@@ -319,7 +319,7 @@ msgid "Shared with users"
|
||||
msgstr "Mit Nutzern geteilt"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Fehler bei der Erstellung einer neuen Instanz"
|
||||
|
||||
@@ -364,7 +364,7 @@ msgstr ""
|
||||
"Privat: Nur für den Besitzer und geteilte Nutzer sichtbar.<br/>Öffentlich: "
|
||||
"Sichtbar für alle Nutzer. Nur bearbeitbar durch Besitzer."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
@@ -459,12 +459,13 @@ msgstr "Fehler"
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Cache erfolgreich geleert"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Heute"
|
||||
|
||||
@@ -478,8 +479,10 @@ msgstr "Löschen"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Zurücksetzen"
|
||||
|
||||
@@ -521,11 +524,11 @@ msgstr "Dezimalstellen"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Währungen"
|
||||
|
||||
@@ -557,7 +560,7 @@ msgstr "Automatisch"
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Umrechnungskurse"
|
||||
|
||||
@@ -565,27 +568,27 @@ msgstr "Umrechnungskurse"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Start- und Zielwährung dürfen nicht identisch sein."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "An"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "Alle X Stunden"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "Nicht an"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Dienstname"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Diensttyp"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -594,31 +597,31 @@ msgstr "Diensttyp"
|
||||
msgid "Active"
|
||||
msgstr "Aktiv"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr "API-Schlüssel"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API-Schlüssel für den Dienst (falls benötigt)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr "Intervalltyp"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr "Intervall"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Letzter erfolgreicher Abruf"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr "Zielwährungen"
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -626,11 +629,11 @@ msgstr ""
|
||||
"Währung auswählen, dessen Umrechnungskurs abgerufen werden sollen. Für jede "
|
||||
"Währung wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr "Zielkonten"
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -638,33 +641,33 @@ msgstr ""
|
||||
"Konten auswählen, für die Umrechungskurse abgerufen werden solen. Für jedes "
|
||||
"Konto wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
#, fuzzy
|
||||
#| msgid "Edit exchange rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Umrechnungskurs bearbeiten"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Umrechnungskurs-Dienst"
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Umrechnungskurs-Dienste"
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "\"Jede X Stunden\"-Intervalltyp benötigt eine positive Ganzzahl."
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "\"Jede X Stunden\"-Intervall muss zwischen 1 und 24 liegen."
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -672,7 +675,7 @@ msgstr ""
|
||||
"Ungültiges Stundenformat. Nutze kommagetrennte Stunden (0-23) und/oder "
|
||||
"Zeiträume (z.B. \"1-5,8,10-12\")."
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -833,15 +836,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr "Eintrag erfolgreich gelöscht"
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr "Nutzer"
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -849,28 +852,29 @@ msgid "Transactions"
|
||||
msgstr "Transaktionen"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr "Kategorien"
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entitäten"
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -878,7 +882,7 @@ msgstr "Wiederkehrende Transaktionen"
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -887,12 +891,12 @@ msgstr "Ratenzahlungs-Pläne"
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr "Automatische Umrechnungskurse"
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr "Regeln"
|
||||
@@ -964,7 +968,7 @@ msgstr "Datei auswählen"
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr "Import"
|
||||
|
||||
@@ -1033,10 +1037,10 @@ msgid "Run deleted successfully"
|
||||
msgstr "Vorgang erfolgreich gelöscht"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr "Unkategorisiert"
|
||||
|
||||
@@ -1301,7 +1305,7 @@ msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1316,26 +1320,55 @@ msgstr "Inhalt"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Transaktionstyp"
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr "Datum von"
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr "Bis"
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr "Referenzdatum von"
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr "Betrag Minimum"
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr "Betrag Maximum"
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
#, fuzzy
|
||||
#| msgid "Categories"
|
||||
msgid "Categorized"
|
||||
msgstr "Kategorien"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#, fuzzy
|
||||
#| msgid "Untagged"
|
||||
msgid "Tagged"
|
||||
msgstr "Unmarkiert"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr "Unmarkiert"
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
#, fuzzy
|
||||
#| msgid "Add entity"
|
||||
msgid "Any entity"
|
||||
msgstr "Entität hinzufügen"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#, fuzzy
|
||||
#| msgid "No entities"
|
||||
msgid "No entity"
|
||||
msgstr "Keine Entitäten"
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr "Mehr"
|
||||
@@ -1447,7 +1480,7 @@ msgstr "Entität"
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Einnahme"
|
||||
@@ -1459,7 +1492,7 @@ msgstr "Einnahme"
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr "Ausgabe"
|
||||
|
||||
@@ -1495,12 +1528,12 @@ msgstr "Keine Kategorie"
|
||||
msgid "No description"
|
||||
msgstr "Keine Beschreibung"
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr "Jährlich"
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr "Monatlich"
|
||||
|
||||
@@ -1600,7 +1633,7 @@ msgid "Quick Transaction"
|
||||
msgstr "Schnelle Transaktion"
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1692,11 +1725,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Ratenzahlungs-Plan erfolgreich gelöscht"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr "Objekt erfolgreich hinzugefügt"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Objekt erfolgreich aktualisiert"
|
||||
|
||||
@@ -1811,24 +1844,26 @@ msgid "This account is deactivated"
|
||||
msgstr "Dieses Konto ist deaktiviert"
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr "Standard"
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Datumsformat"
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Datums- und Zeitformat"
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Zahlenformat"
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1839,25 +1874,25 @@ msgstr ""
|
||||
"angezeigt werden.\n"
|
||||
"Hilf mit WYGIWYH in deine Sprache zu übersetzten: %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr "Neues Passwort"
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Leer lassen um Passwort zu belassen."
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Bestätige das neue Passwort"
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr "Abwählen um den Nutzer zu deaktivieren. Besser als gleich zu löschen."
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -1865,35 +1900,35 @@ msgstr ""
|
||||
"Anwählen damit der Nutzer alle Berechtigungen hat, ohne diese explizit "
|
||||
"hinzuzufügen."
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr "Diese E-Mail-Adresse wird bereits von jemand anders benutzt."
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "Die eingegebenen Passwörter stimmen nicht überein."
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Bitte bestätige dein neues Passwort."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Bitte gebe erst dein neues Passwort ein."
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr "Du kannst deinen Nutzer nicht hier deaktivieren."
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr "Sie können die Adminberechtigungen nicht vom letzten Admin entfernen."
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr "Du kannst deinen eigenen Superuser-Status nicht hier entfernen."
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits."
|
||||
|
||||
@@ -1918,7 +1953,7 @@ msgid "All Transactions"
|
||||
msgstr "Alle Transaktionen"
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr "Kalender"
|
||||
|
||||
@@ -2239,7 +2274,7 @@ msgid "Muted"
|
||||
msgstr "Ausgeblendet"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr "Keine Kategorien"
|
||||
|
||||
@@ -2248,13 +2283,14 @@ msgid "Pick a month"
|
||||
msgstr "Monat auswählen"
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr "Schließen"
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr "Suche"
|
||||
|
||||
@@ -2479,7 +2515,7 @@ msgstr "Keine Einträge für diesen DCA"
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr "Versuche einen hinzuzufügen"
|
||||
|
||||
@@ -2582,7 +2618,7 @@ msgid "Edit exchange rate"
|
||||
msgstr "Umrechnungskurs bearbeiten"
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2606,7 +2642,7 @@ msgstr "Kein Umrechnungskurs"
|
||||
|
||||
#: templates/exchange_rates/fragments/table.html:58
|
||||
#: templates/exchange_rates_services/fragments/table.html:58
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
#: templates/transactions/fragments/list_all.html:54
|
||||
msgid "Page navigation"
|
||||
msgstr "Seitennavigation"
|
||||
|
||||
@@ -2639,7 +2675,7 @@ msgid "No services configured"
|
||||
msgstr "Keine Dienste konfiguriert"
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr "Exportieren und Wiederherstellen"
|
||||
|
||||
@@ -2737,72 +2773,72 @@ msgstr "Navigation umschalten"
|
||||
msgid "Overview"
|
||||
msgstr "Übersicht"
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr "Nettovermögen"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Aktuell"
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr "Einblicke"
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr "Papierkorb"
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr "Tools"
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr "\"Dollar Cost Average\"-Tracker"
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr "Einzelpreis-Rechner"
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr "Währungs-Umrechner"
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr "Verwaltung"
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr "Automatisierung"
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr "Nur benutzen, wenn du weißt was du tust"
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr "Django Admin"
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr "Rechner"
|
||||
|
||||
@@ -2879,7 +2915,7 @@ msgstr "Tabelle"
|
||||
msgid "Bars"
|
||||
msgstr "Balken"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
@@ -2887,22 +2923,30 @@ msgstr ""
|
||||
"Transaktionsbeträge, die mit mehreren Tags verknüpft sind, werden für jeden "
|
||||
"Tag einmal gezählt"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Transaction amounts associated with multiple tags will be counted once "
|
||||
#| "for each tag"
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
"Transaktionsbeträge, die mit mehreren Tags verknüpft sind, werden für jeden "
|
||||
"Tag einmal gezählt"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
#, fuzzy
|
||||
#| msgid "final total"
|
||||
msgid "Final total"
|
||||
msgstr "Gesamtbilanz"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Gesamt"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr "Unmarkiert"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#, fuzzy
|
||||
#| msgid "final total"
|
||||
msgid "Final Total"
|
||||
@@ -3112,26 +3156,30 @@ msgstr "Verteilung"
|
||||
msgid "Summary"
|
||||
msgstr "Zusammenfassung"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr "Transaktionen filtern"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr "Sortieren nach"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr "Älteste zuerst"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr "Neueste zuerst"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr "Transaktionen filtern"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr "Sortieren nach"
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3347,7 +3395,7 @@ msgstr "Bearbeitung"
|
||||
msgid "transactions"
|
||||
msgstr "Transaktionen"
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr "Keine Transaktionen gefunden"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-09 06:57+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -30,8 +30,8 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
@@ -44,7 +44,7 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -81,22 +81,22 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
@@ -127,7 +127,7 @@ msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -185,11 +185,11 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -311,7 +311,7 @@ msgid "Shared with users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr ""
|
||||
|
||||
@@ -352,7 +352,7 @@ msgid ""
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@@ -447,12 +447,13 @@ msgstr ""
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr ""
|
||||
|
||||
@@ -466,8 +467,10 @@ msgstr ""
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
@@ -509,11 +512,11 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr ""
|
||||
|
||||
@@ -545,7 +548,7 @@ msgstr ""
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
@@ -553,27 +556,27 @@ msgstr ""
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -582,77 +585,77 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -809,15 +812,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -825,28 +828,29 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -854,7 +858,7 @@ msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -863,12 +867,12 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr ""
|
||||
@@ -938,7 +942,7 @@ msgstr ""
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -1007,10 +1011,10 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1268,7 +1272,7 @@ msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1283,26 +1287,47 @@ msgstr ""
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
msgid "Categorized"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
msgid "No entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr ""
|
||||
@@ -1402,7 +1427,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
@@ -1414,7 +1439,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
@@ -1450,12 +1475,12 @@ msgstr ""
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
@@ -1554,7 +1579,7 @@ msgid "Quick Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1646,11 +1671,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1765,24 +1790,26 @@ msgid "This account is deactivated"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1790,59 +1817,59 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
@@ -1867,7 +1894,7 @@ msgid "All Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@@ -2188,7 +2215,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2197,13 +2224,14 @@ msgid "Pick a month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
@@ -2426,7 +2454,7 @@ msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr ""
|
||||
|
||||
@@ -2528,7 +2556,7 @@ msgid "Edit exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2552,7 +2580,7 @@ msgstr ""
|
||||
|
||||
#: templates/exchange_rates/fragments/table.html:58
|
||||
#: templates/exchange_rates_services/fragments/table.html:58
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
#: templates/transactions/fragments/list_all.html:54
|
||||
msgid "Page navigation"
|
||||
msgstr ""
|
||||
|
||||
@@ -2585,7 +2613,7 @@ msgid "No services configured"
|
||||
msgstr ""
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -2681,72 +2709,72 @@ msgstr ""
|
||||
msgid "Overview"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
@@ -2820,26 +2848,28 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
msgid "Final total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
@@ -3044,26 +3074,30 @@ msgstr ""
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3271,7 +3305,7 @@ msgstr ""
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-09 06:57+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-07-21 18:17+0000\n"
|
||||
"Last-Translator: afermar <adrian.fm@protonmail.com>\n"
|
||||
"Language-Team: Spanish <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -31,8 +31,8 @@ msgstr "Nombre del Grupo"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Actualizar"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Actualizar"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr "Nuevo balance"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Categoría"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Etiquetas"
|
||||
@@ -128,7 +128,7 @@ msgstr "Grupo de Cuenta"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Grupos de Cuentas"
|
||||
|
||||
@@ -187,11 +187,11 @@ msgstr "Cuenta"
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Cuentas"
|
||||
|
||||
@@ -319,7 +319,7 @@ msgid "Shared with users"
|
||||
msgstr "Compartido con los usuarios"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
#, fuzzy
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Error creating new instance"
|
||||
@@ -371,7 +371,7 @@ msgstr ""
|
||||
"Private: Only shown for the owner and shared users. Only editable by the "
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
|
||||
@@ -467,13 +467,14 @@ msgstr "Error"
|
||||
msgid "Info"
|
||||
msgstr "Información"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
#, fuzzy
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Cache cleared successfully"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Hoy"
|
||||
|
||||
@@ -487,8 +488,10 @@ msgstr "Remover"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Limpiar"
|
||||
|
||||
@@ -530,11 +533,11 @@ msgstr "Cantidad de decimales"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Monedas"
|
||||
|
||||
@@ -567,7 +570,7 @@ msgstr "Auto"
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Tipos de cambio"
|
||||
|
||||
@@ -575,27 +578,27 @@ msgstr "Tipos de cambio"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Las monedas de origen y destino no pueden ser la misma."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "Encendido"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "Cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "No Encendido"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Nombre del Servicio"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Servicio"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -604,37 +607,37 @@ msgstr "Tipo de Servicio"
|
||||
msgid "Active"
|
||||
msgstr "Activo"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
#, fuzzy
|
||||
msgid "API Key"
|
||||
msgstr "API Key"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
#, fuzzy
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API key for the service (if required)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
#, fuzzy
|
||||
msgid "Interval Type"
|
||||
msgstr "Interval Type"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
#, fuzzy
|
||||
msgid "Interval"
|
||||
msgstr "Interval"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
#, fuzzy
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Last Successful Fetch"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
#, fuzzy
|
||||
msgid "Target Currencies"
|
||||
msgstr "Target Currencies"
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
@@ -643,12 +646,12 @@ msgstr ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
#, fuzzy
|
||||
msgid "Target Accounts"
|
||||
msgstr "Target Accounts"
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
@@ -657,36 +660,36 @@ msgstr ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
#, fuzzy
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Edit exchange rate"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
#, fuzzy
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Exchange Rate Service"
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
#, fuzzy
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Exchange Rate Services"
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
#, fuzzy
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "'Every X hours' interval type requires a positive integer."
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
#, fuzzy
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "'Every X hours' interval must be between 1 and 24."
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
@@ -695,7 +698,7 @@ msgstr ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
@@ -890,7 +893,7 @@ msgid "Entry deleted successfully"
|
||||
msgstr "Entry deleted successfully"
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
#, fuzzy
|
||||
msgid "Users"
|
||||
@@ -898,8 +901,8 @@ msgstr "Users"
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -908,30 +911,31 @@ msgid "Transactions"
|
||||
msgstr "Transactions"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
#, fuzzy
|
||||
msgid "Categories"
|
||||
msgstr "Categories"
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
#, fuzzy
|
||||
msgid "Entities"
|
||||
msgstr "Entities"
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
#, fuzzy
|
||||
@@ -940,7 +944,7 @@ msgstr "Recurring Transactions"
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
#, fuzzy
|
||||
@@ -950,13 +954,13 @@ msgstr "Installment Plans"
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
#, fuzzy
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr "Automatic Exchange Rates"
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
#, fuzzy
|
||||
msgid "Rules"
|
||||
@@ -1042,7 +1046,7 @@ msgstr "Select a file"
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
#, fuzzy
|
||||
msgid "Import"
|
||||
msgstr "Import"
|
||||
@@ -1126,10 +1130,10 @@ msgid "Run deleted successfully"
|
||||
msgstr "Run deleted successfully"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
#, fuzzy
|
||||
msgid "Uncategorized"
|
||||
msgstr "Uncategorized"
|
||||
@@ -1440,7 +1444,7 @@ msgstr "Update or Create Transaction action deleted successfully"
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1458,31 +1462,55 @@ msgstr "Content"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Transaction Type"
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
#, fuzzy
|
||||
msgid "Date from"
|
||||
msgstr "Date from"
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
#, fuzzy
|
||||
msgid "Until"
|
||||
msgstr "Until"
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
#, fuzzy
|
||||
msgid "Reference date from"
|
||||
msgstr "Reference date from"
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
#, fuzzy
|
||||
msgid "Amount min"
|
||||
msgstr "Amount min"
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
#, fuzzy
|
||||
msgid "Amount max"
|
||||
msgstr "Amount max"
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
#, fuzzy
|
||||
msgid "Categorized"
|
||||
msgstr "Categories"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
#, fuzzy
|
||||
msgid "Any entity"
|
||||
msgstr "Add entity"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#, fuzzy
|
||||
msgid "No entity"
|
||||
msgstr "No entities"
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
#, fuzzy
|
||||
msgid "More"
|
||||
@@ -1607,7 +1635,7 @@ msgstr "Entity"
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
#, fuzzy
|
||||
msgid "Income"
|
||||
@@ -1620,7 +1648,7 @@ msgstr "Income"
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
#, fuzzy
|
||||
msgid "Expense"
|
||||
msgstr "Expense"
|
||||
@@ -1665,13 +1693,13 @@ msgstr "No category"
|
||||
msgid "No description"
|
||||
msgstr "No description"
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
#, fuzzy
|
||||
msgid "Yearly"
|
||||
msgstr "Yearly"
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
#, fuzzy
|
||||
msgid "Monthly"
|
||||
msgstr "Monthly"
|
||||
@@ -1792,7 +1820,7 @@ msgid "Quick Transaction"
|
||||
msgstr "Edit Transaction"
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
#, fuzzy
|
||||
@@ -1895,12 +1923,12 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Installment Plan deleted successfully"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#, fuzzy
|
||||
msgid "Item added successfully"
|
||||
msgstr "Rule added successfully"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#, fuzzy
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Rule updated successfully"
|
||||
@@ -2041,28 +2069,30 @@ msgid "This account is deactivated"
|
||||
msgstr "This account is deactivated"
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
#, fuzzy
|
||||
msgid "Default"
|
||||
msgstr "Default"
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
#, fuzzy
|
||||
msgid "Date Format"
|
||||
msgstr "Date Format"
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
#, fuzzy
|
||||
msgid "Datetime Format"
|
||||
msgstr "Datetime Format"
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
#, fuzzy
|
||||
msgid "Number Format"
|
||||
msgstr "Number Format"
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -2073,20 +2103,20 @@ msgstr ""
|
||||
"y las fechas\n"
|
||||
"Ayude a traducir WYGIWYH a su idioma en %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
#, fuzzy
|
||||
msgid "New Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Deje en blanco para mantener la contraseña actual."
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Confirmar nueva contraseña"
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
@@ -2094,7 +2124,7 @@ msgstr ""
|
||||
"Establece si este usuario debe ser tratado como activo. Desmarque esta "
|
||||
"opción en lugar de borrar cuentas."
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -2102,35 +2132,35 @@ msgstr ""
|
||||
"Establece que este usuario tiene todos los permisos sin asignárselos "
|
||||
"expresamente."
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr "Esta dirección de correo es usada por otra cuenta."
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "Los dos campos de contraseñas no coinciden."
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Por favor, confirme su nueva contraseña."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Por favor, introduzca su nueva contraseña."
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr "No puede desactivar su propia cuenta usando este formulario."
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
#, fuzzy
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "A value for this field already exists in the rule."
|
||||
@@ -2161,7 +2191,7 @@ msgid "All Transactions"
|
||||
msgstr "All Transactions"
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
#, fuzzy
|
||||
msgid "Calendar"
|
||||
msgstr "Calendar"
|
||||
@@ -2524,7 +2554,7 @@ msgid "Muted"
|
||||
msgstr "Muted"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#, fuzzy
|
||||
msgid "No categories"
|
||||
msgstr "No categories"
|
||||
@@ -2535,14 +2565,15 @@ msgid "Pick a month"
|
||||
msgstr "Pick a month"
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
#, fuzzy
|
||||
msgid "Close"
|
||||
msgstr "Close"
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
#, fuzzy
|
||||
msgid "Search"
|
||||
msgstr "Search"
|
||||
@@ -2807,7 +2838,7 @@ msgstr "No entries for this DCA"
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
#, fuzzy
|
||||
msgid "Try adding one"
|
||||
msgstr "Try adding one"
|
||||
@@ -2932,7 +2963,7 @@ msgid "Edit exchange rate"
|
||||
msgstr "Edit exchange rate"
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2960,7 +2991,7 @@ msgstr "No exchange rates"
|
||||
|
||||
#: templates/exchange_rates/fragments/table.html:58
|
||||
#: templates/exchange_rates_services/fragments/table.html:58
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
#: templates/transactions/fragments/list_all.html:54
|
||||
#, fuzzy
|
||||
msgid "Page navigation"
|
||||
msgstr "Page navigation"
|
||||
@@ -3001,7 +3032,7 @@ msgid "No services configured"
|
||||
msgstr "No services configured"
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
#, fuzzy
|
||||
msgid "Export and Restore"
|
||||
msgstr "Export and Restore"
|
||||
@@ -3121,84 +3152,84 @@ msgstr "Toggle navigation"
|
||||
msgid "Overview"
|
||||
msgstr "Overview"
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
#, fuzzy
|
||||
msgid "Net Worth"
|
||||
msgstr "Net Worth"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
#, fuzzy
|
||||
msgid "Current"
|
||||
msgstr "Current"
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
#, fuzzy
|
||||
msgid "Insights"
|
||||
msgstr "Insights"
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
#, fuzzy
|
||||
msgid "Trash Can"
|
||||
msgstr "Trash Can"
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
#, fuzzy
|
||||
msgid "Tools"
|
||||
msgstr "Tools"
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
#, fuzzy
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr "Dollar Cost Average Tracker"
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
#, fuzzy
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr "Unit Price Calculator"
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
#, fuzzy
|
||||
msgid "Currency Converter"
|
||||
msgstr "Currency Converter"
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
#, fuzzy
|
||||
msgid "Management"
|
||||
msgstr "Management"
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
#, fuzzy
|
||||
msgid "Automation"
|
||||
msgstr "Automation"
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
#, fuzzy
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr "Only use this if you know what you're doing"
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
#, fuzzy
|
||||
msgid "Django Admin"
|
||||
msgstr "Django Admin"
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
#, fuzzy
|
||||
msgid "Calculator"
|
||||
msgstr "Calculator"
|
||||
@@ -3287,28 +3318,30 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
#, fuzzy
|
||||
msgid "Final total"
|
||||
msgstr "final total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
#, fuzzy
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#, fuzzy
|
||||
msgid "Final Total"
|
||||
msgstr "final total"
|
||||
@@ -3556,26 +3589,30 @@ msgstr "Distribución"
|
||||
msgid "Summary"
|
||||
msgstr "Resumen"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filtrar transacciones"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr "Ordenar por"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr "Lo más antiguo primero"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr "Lo más nuevo primero"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filtrar transacciones"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr "Ordenar por"
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3805,7 +3842,7 @@ msgstr "Editing"
|
||||
msgid "transactions"
|
||||
msgstr "transactions"
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
#, fuzzy
|
||||
msgid "No transactions found"
|
||||
msgstr "No transactions found"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-09 06:57+0000\n"
|
||||
"PO-Revision-Date: 2025-08-09 10:17+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-08-17 08:17+0000\n"
|
||||
"Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/"
|
||||
"app/nl/>\n"
|
||||
@@ -31,8 +31,8 @@ msgstr "Groepsnaam"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Bijwerken"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Bijwerken"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr "Nieuw saldo"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Categorie"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Labels"
|
||||
@@ -128,7 +128,7 @@ msgstr "Accountgroep"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Accountgroepen"
|
||||
|
||||
@@ -190,11 +190,11 @@ msgstr "Rekening"
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Rekeningen"
|
||||
|
||||
@@ -317,7 +317,7 @@ msgid "Shared with users"
|
||||
msgstr "Gedeeld met gebruikers"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Fout bij het aanmaken van een nieuwe instantie"
|
||||
|
||||
@@ -363,7 +363,7 @@ msgstr ""
|
||||
"bewerkbaar door de eigenaar.<br/>Publiek: Weergegeven voor alle gebruikers. "
|
||||
"Alleen bewerkbaar door de eigenaar."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Opslaan"
|
||||
|
||||
@@ -458,12 +458,13 @@ msgstr "Fout"
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Cache succesvol gewist"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Vandaag"
|
||||
|
||||
@@ -477,8 +478,10 @@ msgstr "Verwijder"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Leegmaken"
|
||||
|
||||
@@ -520,11 +523,11 @@ msgstr "Cijfers na de komma"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Munteenheden"
|
||||
|
||||
@@ -556,7 +559,7 @@ msgstr "Automatisch"
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Wisselkoersen"
|
||||
|
||||
@@ -564,27 +567,27 @@ msgstr "Wisselkoersen"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "Op"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "Elke X Uren"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "Niet op"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Dienstnaam"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Soort Dienst"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -593,31 +596,31 @@ msgstr "Soort Dienst"
|
||||
msgid "Active"
|
||||
msgstr "Actief"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr "API Sleutel"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API sleutel voor de dienst (indien verplicht)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr "Soort Interval"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr "Interval"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Laatste Succesvolle Ophaling"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr "Doel Munteenheden"
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -625,11 +628,11 @@ msgstr ""
|
||||
"Selecteer munteenheden om wisselkoersen voor op te halen. De koersen worden "
|
||||
"voor elke munteenheid opgehaald ten opzichte van de ingestelde wisselkoers."
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr "Naar rekeningen"
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -638,33 +641,33 @@ msgstr ""
|
||||
"opgehaald voor de munteenheid van elke rekening ten opzichte van de "
|
||||
"ingestelde wisselkoers."
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Enkele Wisselkoers"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
"Maak één wisselkoers aan en houd deze bijgewerkt. Voorkomt een overvolle "
|
||||
"database."
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Wisselkoersdienst"
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Wisselkoersdiensten"
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "Voor het intervaltype ‘Elke X uur’ is een positief geheel getal nodig."
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "Het interval ‘Elke X uur’ moet tussen 1 en 24 liggen."
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -672,7 +675,7 @@ msgstr ""
|
||||
"Ongeldige urennotatie. Gebruik door komma's gescheiden uren (0-23) en/of "
|
||||
"reeksen (bijv. ‘1-5,8,10-12’)."
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -832,15 +835,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr "Invoer succesvol verwijderd"
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr "Gebruikers"
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -848,28 +851,29 @@ msgid "Transactions"
|
||||
msgstr "Verrichtingen"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr "Categorieën"
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Bedrijven"
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -877,7 +881,7 @@ msgstr "Terugkerende Verrichtingen"
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -886,12 +890,12 @@ msgstr "Afbetalingsplannen"
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr "Automatische Wisselkoersen"
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr "Regels"
|
||||
@@ -963,7 +967,7 @@ msgstr "Selecteer een bestand"
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr "Importeer"
|
||||
|
||||
@@ -1032,10 +1036,10 @@ msgid "Run deleted successfully"
|
||||
msgstr "Run met succes verwijderd"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr "Ongecategoriseerd"
|
||||
|
||||
@@ -1295,7 +1299,7 @@ msgstr "Verrichting Bijwerken Of Maken succesvol verwijderd"
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1310,26 +1314,47 @@ msgstr "Inhoud"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Soort transactie"
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr "Datum vanaf"
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr "Tot"
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr "Referentiedatum vanaf"
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr "Minimum bedrag"
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr "Maximaal bedrag"
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
msgid "Categorized"
|
||||
msgstr "Gecategoriseerd"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr "Gelabeld"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr "Niet gelabeld"
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
msgid "Any entity"
|
||||
msgstr "Elk bedrijf"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
msgid "No entity"
|
||||
msgstr "Geen bedrijf"
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr "Meer"
|
||||
@@ -1435,7 +1460,7 @@ msgstr "Bedrijf"
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Ontvangsten Transactie"
|
||||
@@ -1447,7 +1472,7 @@ msgstr "Ontvangsten Transactie"
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr "Uitgave"
|
||||
|
||||
@@ -1483,12 +1508,12 @@ msgstr "Geen categorie"
|
||||
msgid "No description"
|
||||
msgstr "Geen Beschrijving"
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr "Jaarlijks"
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr "Maandelijks"
|
||||
|
||||
@@ -1587,7 +1612,7 @@ msgid "Quick Transaction"
|
||||
msgstr "Snelle verrichting"
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1679,11 +1704,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Afbetalingsplan succesvol verwijderd"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr "Item succesvol toegevoegd"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Item succesvol bijgewerkt"
|
||||
|
||||
@@ -1798,24 +1823,26 @@ msgid "This account is deactivated"
|
||||
msgstr "Deze gebruiker is gedeactiveerd"
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr "Standaard"
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Datumnotatie"
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Tijdsnotatie"
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Schrijfwijze Nummers"
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1826,19 +1853,19 @@ msgstr ""
|
||||
"weergegeven\n"
|
||||
"Overweeg om WYGIWYH te helpen vertalen naar jouw taal op %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr "Nieuw Wachtwoord"
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Laat leeg om het huidige wachtwoord te behouden."
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Bevestig Nieuw Wachtwoord"
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
@@ -1846,7 +1873,7 @@ msgstr ""
|
||||
"Geeft aan of deze gebruiker als actief moet worden behandeld. Deselecteer "
|
||||
"dit in plaats van accounts te verwijderen."
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -1854,35 +1881,35 @@ msgstr ""
|
||||
"Geeft aan dat deze gebruiker alle rechten heeft zonder ze expliciet toe te "
|
||||
"kennen."
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr "Dit e-mailadres wordt al gebruikt door een ander account."
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "De twee wachtwoordvelden komen niet overeen."
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Bevestig je nieuwe wachtwoord."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Geef eerst het nieuwe wachtwoord op."
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr "Je kunt je eigen account niet deactiveren met dit formulier."
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr "Kan de status van de laatste Hoofdadmin niet verwijderen."
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr "Je kunt je eigen hoofdadminrechten niet verwijderen met dit formulier."
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "Er bestaat al een gebruiker met dit e-mailadres."
|
||||
|
||||
@@ -1907,7 +1934,7 @@ msgid "All Transactions"
|
||||
msgstr "Alle Verrichtingen"
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr "Kalender"
|
||||
|
||||
@@ -2228,7 +2255,7 @@ msgid "Muted"
|
||||
msgstr "Gedempt"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr "Geen categorieën"
|
||||
|
||||
@@ -2237,13 +2264,14 @@ msgid "Pick a month"
|
||||
msgstr "Kies een maand"
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr "Sluiten"
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr "Zoeken"
|
||||
|
||||
@@ -2466,7 +2494,7 @@ msgstr "Geen idems in deze DCA"
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr "Probeer er een toe te voegen"
|
||||
|
||||
@@ -2568,7 +2596,7 @@ msgid "Edit exchange rate"
|
||||
msgstr "Wisselkoers bewerken"
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2592,7 +2620,7 @@ msgstr "Geen wisselkoersen"
|
||||
|
||||
#: templates/exchange_rates/fragments/table.html:58
|
||||
#: templates/exchange_rates_services/fragments/table.html:58
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
#: templates/transactions/fragments/list_all.html:54
|
||||
msgid "Page navigation"
|
||||
msgstr "Paginanavigatie"
|
||||
|
||||
@@ -2625,7 +2653,7 @@ msgid "No services configured"
|
||||
msgstr "Geen diensten ingesteld"
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr "Exporteren en Herstellen"
|
||||
|
||||
@@ -2722,72 +2750,72 @@ msgstr "Navigatie Knop"
|
||||
msgid "Overview"
|
||||
msgstr "Overzicht"
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr "Netto Waarde"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Huidige"
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr "Inzichten"
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr "Prullenbak"
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr "Hulpmiddelen"
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr "Dollar Kostgemiddelde Tracker"
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr "Eenheidsprijs berekenen"
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr "Valuta omrekenen"
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr "Beheer"
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr "Automatisatie"
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr "Gebruik dit alleen als je weet wat je doet"
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr "Django Beheerder"
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr "is beschikbaar"
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr "Rekenmachine"
|
||||
|
||||
@@ -2865,7 +2893,7 @@ msgstr "Tabel"
|
||||
msgid "Bars"
|
||||
msgstr "Balken"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
@@ -2873,20 +2901,24 @@ msgstr ""
|
||||
"Transactiebedragen die gekoppeld zijn aan meerdere tags worden één keer "
|
||||
"geteld voor elke tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
"Transactiebedragen die gekoppeld zijn aan meerdere tags en bedrijven worden "
|
||||
"één keer geteld voor elke tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
msgid "Final total"
|
||||
msgstr "Eindtotaal"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Totaal"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr "Niet gelabeld"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr "Eindtotaal"
|
||||
|
||||
@@ -3094,26 +3126,30 @@ msgstr "Verdeling"
|
||||
msgid "Summary"
|
||||
msgstr "Samenvatting"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filter verrichtingen"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr "Sorteer op"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr "Oudste eerst"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr "Nieuwste eerst"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filter verrichtingen"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr "Sorteer op"
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3327,7 +3363,7 @@ msgstr "Bewerking"
|
||||
msgid "transactions"
|
||||
msgstr "verrichtingen"
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr "Geen Verrichtingen gevonden"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-09 06:57+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-04-13 08:16+0000\n"
|
||||
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
|
||||
"Language-Team: Portuguese <https://translations.herculino.com/projects/"
|
||||
@@ -31,8 +31,8 @@ msgstr "Nome do grupo"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Atualizar"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Atualizar"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr "Novo saldo"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Categoria"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -128,7 +128,7 @@ msgstr "Grupo da Conta"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Grupos da Conta"
|
||||
|
||||
@@ -189,11 +189,11 @@ msgstr "Conta"
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Contas"
|
||||
|
||||
@@ -317,7 +317,7 @@ msgid "Shared with users"
|
||||
msgstr "Compartilhado com os usuários"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Erro criando nova instância"
|
||||
|
||||
@@ -363,7 +363,7 @@ msgstr ""
|
||||
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
|
||||
"usuários. Somente editável pelo proprietário."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Salvar"
|
||||
|
||||
@@ -458,12 +458,13 @@ msgstr "Erro"
|
||||
msgid "Info"
|
||||
msgstr "Informação"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Cache limpo com sucesso"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Hoje"
|
||||
|
||||
@@ -477,8 +478,10 @@ msgstr "Remover"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
@@ -520,11 +523,11 @@ msgstr "Casas Decimais"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Moedas"
|
||||
|
||||
@@ -556,7 +559,7 @@ msgstr "Automático"
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Taxas de Câmbio"
|
||||
|
||||
@@ -564,27 +567,27 @@ msgstr "Taxas de Câmbio"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "As moedas De e Para não podem ser as mesmas."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "Em"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "A cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "Não em"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Nome do Serviço"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Serviço"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -593,31 +596,31 @@ msgstr "Tipo de Serviço"
|
||||
msgid "Active"
|
||||
msgstr "Ativo"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr "Chave de API"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "Chave de API para o serviço (se necessário)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr "Tipo de Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr "Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Última execução bem-sucedida"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr "Moedas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -625,11 +628,11 @@ msgstr ""
|
||||
"Selecione as moedas para as quais deseja obter as taxas de câmbio. As taxas "
|
||||
"serão obtidas para cada moeda em relação à moeda de câmbio definida."
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr "Contas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -638,34 +641,34 @@ msgstr ""
|
||||
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
|
||||
"definida."
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
#, fuzzy
|
||||
#| msgid "Edit exchange rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Editar taxa de câmbio"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Serviço de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Serviços de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo."
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "Intervalo do tipo 'A cada X horas' requerer um número entre 1 e 24."
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -673,7 +676,7 @@ msgstr ""
|
||||
"Formato inválido de hora. Use uma lista de horas separada por vírgulas "
|
||||
"(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -832,15 +835,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr "Entrada apagada com sucesso"
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr "Usuários"
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -848,28 +851,29 @@ msgid "Transactions"
|
||||
msgstr "Transações"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr "Categorias"
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entidades"
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -877,7 +881,7 @@ msgstr "Transações Recorrentes"
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -886,12 +890,12 @@ msgstr "Parcelamentos"
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr "Taxas de Câmbio Automáticas"
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr "Regras"
|
||||
@@ -963,7 +967,7 @@ msgstr "Selecione um arquivo"
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
@@ -1032,10 +1036,10 @@ msgid "Run deleted successfully"
|
||||
msgstr "Importação apagada com sucesso"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
@@ -1295,7 +1299,7 @@ msgstr "Ação Atualizar ou Criar Transação apagada com sucesso"
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1310,26 +1314,53 @@ msgstr "Conteúdo"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Tipo de Transação"
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr "Data de"
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr "Até"
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr "Data de Referência de"
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr "Quantia miníma"
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr "Quantia máxima"
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
#, fuzzy
|
||||
#| msgid "Categories"
|
||||
msgid "Categorized"
|
||||
msgstr "Categorias"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
#, fuzzy
|
||||
#| msgid "Add entity"
|
||||
msgid "Any entity"
|
||||
msgstr "Adicionar entidade"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#, fuzzy
|
||||
#| msgid "No entities"
|
||||
msgid "No entity"
|
||||
msgstr "Sem entidades"
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr "Mais"
|
||||
@@ -1438,7 +1469,7 @@ msgstr "Entidade"
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Renda"
|
||||
@@ -1450,7 +1481,7 @@ msgstr "Renda"
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr "Despesa"
|
||||
|
||||
@@ -1486,12 +1517,12 @@ msgstr "Sem categoria"
|
||||
msgid "No description"
|
||||
msgstr "Sem descrição"
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr "Anual"
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr "Mensal"
|
||||
|
||||
@@ -1592,7 +1623,7 @@ msgid "Quick Transaction"
|
||||
msgstr "Editar Transação"
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
#, fuzzy
|
||||
@@ -1686,13 +1717,13 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Parcelamento apagado com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#, fuzzy
|
||||
#| msgid "Rule added successfully"
|
||||
msgid "Item added successfully"
|
||||
msgstr "Regra adicionada com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#, fuzzy
|
||||
#| msgid "Rule updated successfully"
|
||||
msgid "Item updated successfully"
|
||||
@@ -1811,24 +1842,26 @@ msgid "This account is deactivated"
|
||||
msgstr "Essa conta está desativada"
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr "Padrão"
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Formato de Data"
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Formato de Data e Hora"
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Formato de Número"
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1839,61 +1872,61 @@ msgstr ""
|
||||
"são exibidos\n"
|
||||
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
#, fuzzy
|
||||
#| msgid "Password"
|
||||
msgid "New Password"
|
||||
msgstr "Senha"
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
#, fuzzy
|
||||
#| msgid "A value for this field already exists in the rule."
|
||||
msgid "A user with this email address already exists."
|
||||
@@ -1920,7 +1953,7 @@ msgid "All Transactions"
|
||||
msgstr "Todas as transações"
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr "Calendário"
|
||||
|
||||
@@ -2241,7 +2274,7 @@ msgid "Muted"
|
||||
msgstr "Silenciada"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr "Nenhum categoria"
|
||||
|
||||
@@ -2250,13 +2283,14 @@ msgid "Pick a month"
|
||||
msgstr "Escolha um mês"
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
@@ -2485,7 +2519,7 @@ msgstr "Nenhuma entrada neste CMP"
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr "Tente adicionar uma"
|
||||
|
||||
@@ -2588,7 +2622,7 @@ msgid "Edit exchange rate"
|
||||
msgstr "Editar taxa de câmbio"
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2612,7 +2646,7 @@ msgstr "Nenhuma taxa de câmbio"
|
||||
|
||||
#: templates/exchange_rates/fragments/table.html:58
|
||||
#: templates/exchange_rates_services/fragments/table.html:58
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
#: templates/transactions/fragments/list_all.html:54
|
||||
msgid "Page navigation"
|
||||
msgstr "Navegação por página"
|
||||
|
||||
@@ -2645,7 +2679,7 @@ msgid "No services configured"
|
||||
msgstr "Nenhum serviço configurado"
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr "Exportar e Restaurar"
|
||||
|
||||
@@ -2743,72 +2777,72 @@ msgstr "Alternar navegação"
|
||||
msgid "Overview"
|
||||
msgstr "Visão Geral"
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr "Patrimônio"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Atual"
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr "Insights"
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr "Lixeira"
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr "Rastreador de Custo Médio Ponderado"
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr "Calculadora de preço unitário"
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr "Conversor de Moeda"
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr "Gerenciar"
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr "Automação"
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr "Só use isso se você souber o que está fazendo"
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr "Django Admin"
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr "Calculadora"
|
||||
|
||||
@@ -2886,28 +2920,30 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
#, fuzzy
|
||||
#| msgid "final total"
|
||||
msgid "Final total"
|
||||
msgstr "total final"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr "Total Final"
|
||||
|
||||
@@ -3115,26 +3151,30 @@ msgstr "Distribuição"
|
||||
msgid "Summary"
|
||||
msgstr "Resumo"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filtrar transações"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr "Ordernar por"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr "Mais antigas primeiro"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr "Mais novas primeiro"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filtrar transações"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr "Ordernar por"
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3351,7 +3391,7 @@ msgstr "Editando"
|
||||
msgid "transactions"
|
||||
msgstr "transações"
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr "Nenhuma transação encontrada"
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-09 06:57+0000\n"
|
||||
"PO-Revision-Date: 2025-08-08 04:17+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-08-17 08:17+0000\n"
|
||||
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://translations.herculino.com/"
|
||||
"projects/wygiwyh/app/pt_BR/>\n"
|
||||
@@ -31,8 +31,8 @@ msgstr "Nome do grupo"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Atualizar"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Atualizar"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr "Novo saldo"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Categoria"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -128,7 +128,7 @@ msgstr "Grupo da Conta"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Grupos da Conta"
|
||||
|
||||
@@ -189,11 +189,11 @@ msgstr "Conta"
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Contas"
|
||||
|
||||
@@ -260,11 +260,11 @@ msgstr "Conta apagada com sucesso"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
msgstr "A conta agora está sendo acompanhada"
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
msgstr "A conta agora não está mais sendo acompanhada"
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
@@ -315,7 +315,7 @@ msgid "Shared with users"
|
||||
msgstr "Compartilhado com os usuários"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Erro criando nova instância"
|
||||
|
||||
@@ -361,7 +361,7 @@ msgstr ""
|
||||
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
|
||||
"usuários. Somente editável pelo proprietário."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Salvar"
|
||||
|
||||
@@ -456,12 +456,13 @@ msgstr "Erro"
|
||||
msgid "Info"
|
||||
msgstr "Informação"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Cache limpo com sucesso"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Hoje"
|
||||
|
||||
@@ -475,8 +476,10 @@ msgstr "Remover"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
@@ -518,11 +521,11 @@ msgstr "Casas Decimais"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Moedas"
|
||||
|
||||
@@ -554,7 +557,7 @@ msgstr "Automático"
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Taxas de Câmbio"
|
||||
|
||||
@@ -562,27 +565,27 @@ msgstr "Taxas de Câmbio"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "As moedas De e Para não podem ser as mesmas."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "Em"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "A cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "Não em"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Nome do Serviço"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Serviço"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -591,31 +594,31 @@ msgstr "Tipo de Serviço"
|
||||
msgid "Active"
|
||||
msgstr "Ativo"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr "Chave de API"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "Chave de API para o serviço (se necessário)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr "Tipo de Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr "Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Última execução bem-sucedida"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr "Moedas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -623,11 +626,11 @@ msgstr ""
|
||||
"Selecione as moedas para as quais deseja obter as taxas de câmbio. As taxas "
|
||||
"serão obtidas para cada moeda em relação à moeda de câmbio definida."
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr "Contas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -636,34 +639,34 @@ msgstr ""
|
||||
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
|
||||
"definida."
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Taxa de câmbio única"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
"Cria uma taxa de câmbio e mantenha-a atualizada. Evita a poluição do banco "
|
||||
"de dados."
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Serviço de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Serviços de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo."
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "Intervalo do tipo 'A cada X horas' requerer um número entre 1 e 24."
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -671,7 +674,7 @@ msgstr ""
|
||||
"Formato inválido de hora. Use uma lista de horas separada por vírgulas "
|
||||
"(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -830,15 +833,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr "Entrada apagada com sucesso"
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr "Usuários"
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -846,28 +849,29 @@ msgid "Transactions"
|
||||
msgstr "Transações"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr "Categorias"
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entidades"
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -875,7 +879,7 @@ msgstr "Transações Recorrentes"
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -884,12 +888,12 @@ msgstr "Parcelamentos"
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr "Taxas de Câmbio Automáticas"
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr "Regras"
|
||||
@@ -961,7 +965,7 @@ msgstr "Selecione um arquivo"
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
@@ -1030,10 +1034,10 @@ msgid "Run deleted successfully"
|
||||
msgstr "Importação apagada com sucesso"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
@@ -1293,7 +1297,7 @@ msgstr "Ação Atualizar ou Criar Transação apagada com sucesso"
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1308,26 +1312,47 @@ msgstr "Conteúdo"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Tipo de Transação"
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr "Data de"
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr "Até"
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr "Data de Referência de"
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr "Quantia miníma"
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr "Quantia máxima"
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
msgid "Categorized"
|
||||
msgstr "Categorizada"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr "Com tag"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr "Sem tag"
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
msgid "Any entity"
|
||||
msgstr "Qualquer entidade"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
msgid "No entity"
|
||||
msgstr "Sem entidade"
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr "Mais"
|
||||
@@ -1432,7 +1457,7 @@ msgstr "Entidade"
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Renda"
|
||||
@@ -1444,7 +1469,7 @@ msgstr "Renda"
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr "Despesa"
|
||||
|
||||
@@ -1480,12 +1505,12 @@ msgstr "Sem categoria"
|
||||
msgid "No description"
|
||||
msgstr "Sem descrição"
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr "Anual"
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr "Mensal"
|
||||
|
||||
@@ -1584,7 +1609,7 @@ msgid "Quick Transaction"
|
||||
msgstr "Transação Rápida"
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1676,11 +1701,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Parcelamento apagado com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr "Item adicionado com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Item atualizado com sucesso"
|
||||
|
||||
@@ -1795,24 +1820,26 @@ msgid "This account is deactivated"
|
||||
msgstr "Essa conta está desativada"
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr "Padrão"
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Formato de Data"
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Formato de Data e Hora"
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Formato de Número"
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1823,19 +1850,19 @@ msgstr ""
|
||||
"são exibidos\n"
|
||||
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr "Nova senha"
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Deixe em branco para usar a senha atual."
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Confirmar nova senha"
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
@@ -1843,7 +1870,7 @@ msgstr ""
|
||||
"Designa se esse usuário deve ser tratado como ativo. Desmarque essa opção em "
|
||||
"vez de excluir usuários."
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -1851,37 +1878,37 @@ msgstr ""
|
||||
"Designa que esse usuário tem todas as permissões sem atribuí-las "
|
||||
"explicitamente."
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr "Esse endereço de e-mail já está sendo usado por outra conta."
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "Os dois campos de senha não coincidem."
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Confirme sua nova senha."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Digite a nova senha primeiro."
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr "Não é possível desativar sua própria conta usando esse formulário."
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr "Não é possível remover o status do último superusuário."
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
"Não é possível remover seu próprio status de superusuário usando esse "
|
||||
"formulário."
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "Já existe um usuário com esse endereço de e-mail."
|
||||
|
||||
@@ -1906,7 +1933,7 @@ msgid "All Transactions"
|
||||
msgstr "Todas as transações"
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr "Calendário"
|
||||
|
||||
@@ -2163,11 +2190,11 @@ msgstr "É ativo"
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
msgstr "Acompanhar"
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
msgstr "Parar de acompanhar"
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
@@ -2227,7 +2254,7 @@ msgid "Muted"
|
||||
msgstr "Silenciada"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr "Nenhum categoria"
|
||||
|
||||
@@ -2236,13 +2263,14 @@ msgid "Pick a month"
|
||||
msgstr "Escolha um mês"
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
@@ -2257,10 +2285,8 @@ msgid "Show on summaries"
|
||||
msgstr "Mostrar nos sumários"
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
#, fuzzy
|
||||
#| msgid "Controlled by category"
|
||||
msgid "Controlled by account"
|
||||
msgstr "Controlado pela categoria"
|
||||
msgstr "Controlado pela conta"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
@@ -2467,7 +2493,7 @@ msgstr "Nenhuma entrada neste CMP"
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr "Tente adicionar uma"
|
||||
|
||||
@@ -2570,7 +2596,7 @@ msgid "Edit exchange rate"
|
||||
msgstr "Editar taxa de câmbio"
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2594,7 +2620,7 @@ msgstr "Nenhuma taxa de câmbio"
|
||||
|
||||
#: templates/exchange_rates/fragments/table.html:58
|
||||
#: templates/exchange_rates_services/fragments/table.html:58
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
#: templates/transactions/fragments/list_all.html:54
|
||||
msgid "Page navigation"
|
||||
msgstr "Navegação por página"
|
||||
|
||||
@@ -2627,7 +2653,7 @@ msgid "No services configured"
|
||||
msgstr "Nenhum serviço configurado"
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr "Exportar e Restaurar"
|
||||
|
||||
@@ -2725,72 +2751,72 @@ msgstr "Alternar navegação"
|
||||
msgid "Overview"
|
||||
msgstr "Visão Geral"
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr "Patrimônio"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Atual"
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr "Insights"
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr "Lixeira"
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr "Rastreador de Custo Médio Ponderado"
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr "Calculadora de preço unitário"
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr "Conversor de Moeda"
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr "Gerenciar"
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr "Automação"
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr "Só use isso se você souber o que está fazendo"
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr "Django Admin"
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr "está disponível"
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr "Calculadora"
|
||||
|
||||
@@ -2866,7 +2892,7 @@ msgstr "Tabela"
|
||||
msgid "Bars"
|
||||
msgstr "Barras"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
@@ -2874,20 +2900,24 @@ msgstr ""
|
||||
"Os valores das transações associadas a várias tags serão contados uma vez "
|
||||
"para cada tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
"Os valores das transações associadas a várias tags e entidades serão "
|
||||
"contados uma vez para cada tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
msgid "Final total"
|
||||
msgstr "Total final"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr "Sem tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr "Total Final"
|
||||
|
||||
@@ -3095,26 +3125,30 @@ msgstr "Distribuição"
|
||||
msgid "Summary"
|
||||
msgstr "Resumo"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filtrar transações"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr "Ordernar por"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr "Mais antigas primeiro"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr "Mais novas primeiro"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filtrar transações"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr "Ordernar por"
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3325,7 +3359,7 @@ msgstr "Editando"
|
||||
msgid "transactions"
|
||||
msgstr "transações"
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr "Nenhuma transação encontrada"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-09 06:57+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-04-14 06:16+0000\n"
|
||||
"Last-Translator: Emil <emil.bjorkroth@gmail.com>\n"
|
||||
"Language-Team: Swedish <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -31,8 +31,8 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Uppdatera"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Uppdatera"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
@@ -128,7 +128,7 @@ msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -186,11 +186,11 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -312,7 +312,7 @@ msgid "Shared with users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr ""
|
||||
|
||||
@@ -353,7 +353,7 @@ msgid ""
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@@ -448,12 +448,13 @@ msgstr ""
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr ""
|
||||
|
||||
@@ -467,8 +468,10 @@ msgstr ""
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
@@ -510,11 +513,11 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr ""
|
||||
|
||||
@@ -546,7 +549,7 @@ msgstr ""
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
@@ -554,27 +557,27 @@ msgstr ""
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -583,77 +586,77 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -810,15 +813,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -826,28 +829,29 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -855,7 +859,7 @@ msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -864,12 +868,12 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr ""
|
||||
@@ -939,7 +943,7 @@ msgstr ""
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -1008,10 +1012,10 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1269,7 +1273,7 @@ msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1284,26 +1288,47 @@ msgstr ""
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
msgid "Categorized"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
msgid "No entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr ""
|
||||
@@ -1403,7 +1428,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
@@ -1415,7 +1440,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
@@ -1451,12 +1476,12 @@ msgstr ""
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
@@ -1555,7 +1580,7 @@ msgid "Quick Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1647,11 +1672,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1766,24 +1791,26 @@ msgid "This account is deactivated"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1791,59 +1818,59 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
@@ -1868,7 +1895,7 @@ msgid "All Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@@ -2189,7 +2216,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2198,13 +2225,14 @@ msgid "Pick a month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
@@ -2427,7 +2455,7 @@ msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr ""
|
||||
|
||||
@@ -2529,7 +2557,7 @@ msgid "Edit exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2553,7 +2581,7 @@ msgstr ""
|
||||
|
||||
#: templates/exchange_rates/fragments/table.html:58
|
||||
#: templates/exchange_rates_services/fragments/table.html:58
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
#: templates/transactions/fragments/list_all.html:54
|
||||
msgid "Page navigation"
|
||||
msgstr ""
|
||||
|
||||
@@ -2586,7 +2614,7 @@ msgid "No services configured"
|
||||
msgstr ""
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -2682,72 +2710,72 @@ msgstr ""
|
||||
msgid "Overview"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
@@ -2821,26 +2849,28 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
msgid "Final total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
@@ -3045,26 +3075,30 @@ msgstr ""
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3272,7 +3306,7 @@ msgstr ""
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-09 06:57+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-05-12 14:16+0000\n"
|
||||
"Last-Translator: Felix <xnovaua@gmail.com>\n"
|
||||
"Language-Team: Ukrainian <https://translations.herculino.com/projects/"
|
||||
@@ -32,8 +32,8 @@ msgstr "Назва групи"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Оновлення"
|
||||
|
||||
@@ -46,7 +46,7 @@ msgstr "Оновлення"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -83,22 +83,22 @@ msgstr "Новий баланс"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Категорія"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Мітки"
|
||||
@@ -129,7 +129,7 @@ msgstr "Група рахунків"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Групи рахунків"
|
||||
|
||||
@@ -190,11 +190,11 @@ msgstr "Рахунок"
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Рахунки"
|
||||
|
||||
@@ -318,7 +318,7 @@ msgid "Shared with users"
|
||||
msgstr "Поділитися з користувачами"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Помилка створення нового екземпляра"
|
||||
|
||||
@@ -364,7 +364,7 @@ msgstr ""
|
||||
"доступом. Редагувати може лише власник.<br/> Public: Відображається для всіх "
|
||||
"користувачів. Редагувати може лише власник."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Зберегти"
|
||||
|
||||
@@ -463,12 +463,13 @@ msgstr "Помилка"
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Кеш успішно очищено"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Сьогодні"
|
||||
|
||||
@@ -482,8 +483,10 @@ msgstr "Видалити"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Чисто"
|
||||
|
||||
@@ -525,11 +528,11 @@ msgstr "Десяткові знаки"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Валюти"
|
||||
|
||||
@@ -561,7 +564,7 @@ msgstr ""
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Обмінні курси"
|
||||
|
||||
@@ -569,27 +572,27 @@ msgstr "Обмінні курси"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Валюти «Від» і «До» не можуть бути однаковими."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "On"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "Кожні Х годин"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "Not on"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Назва сервісу"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Тип сервісу"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -598,79 +601,79 @@ msgstr "Тип сервісу"
|
||||
msgid "Active"
|
||||
msgstr "Активний"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr "Ключ API"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API-ключ для сервісу (якщо потрібно)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr "Тип інтервалу"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr "Інтервал"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Остання успішна вибірка"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
#, fuzzy
|
||||
#| msgid "Exchange Rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Обмінний курс"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -827,15 +830,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -843,28 +846,29 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -872,7 +876,7 @@ msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -881,12 +885,12 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr ""
|
||||
@@ -956,7 +960,7 @@ msgstr ""
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -1025,10 +1029,10 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1286,7 +1290,7 @@ msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1301,26 +1305,49 @@ msgstr ""
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
#, fuzzy
|
||||
#| msgid "Category"
|
||||
msgid "Categorized"
|
||||
msgstr "Категорія"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
msgid "No entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr ""
|
||||
@@ -1420,7 +1447,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
@@ -1432,7 +1459,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
@@ -1468,12 +1495,12 @@ msgstr ""
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
@@ -1572,7 +1599,7 @@ msgid "Quick Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1664,11 +1691,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1785,24 +1812,26 @@ msgid "This account is deactivated"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1810,59 +1839,59 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
@@ -1887,7 +1916,7 @@ msgid "All Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@@ -2208,7 +2237,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2217,13 +2246,14 @@ msgid "Pick a month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
@@ -2446,7 +2476,7 @@ msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr ""
|
||||
|
||||
@@ -2548,7 +2578,7 @@ msgid "Edit exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2572,7 +2602,7 @@ msgstr ""
|
||||
|
||||
#: templates/exchange_rates/fragments/table.html:58
|
||||
#: templates/exchange_rates_services/fragments/table.html:58
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
#: templates/transactions/fragments/list_all.html:54
|
||||
msgid "Page navigation"
|
||||
msgstr ""
|
||||
|
||||
@@ -2605,7 +2635,7 @@ msgid "No services configured"
|
||||
msgstr ""
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -2701,72 +2731,72 @@ msgstr ""
|
||||
msgid "Overview"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
@@ -2840,26 +2870,28 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
msgid "Final total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
@@ -3064,26 +3096,30 @@ msgstr ""
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3291,7 +3327,7 @@ msgstr ""
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -5,47 +5,51 @@
|
||||
{% block title %}{% translate 'Pick a month' %}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% regroup month_year_data by year as years_list %}
|
||||
{% regroup month_year_data by year as years_list %}
|
||||
|
||||
<ul class="nav nav-pills nav-fill" id="yearTabs" role="tablist">
|
||||
{% for x in years_list %}
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link{% if x.grouper == current_year %} active{% endif %}"
|
||||
id="{{ x.grouper }}"
|
||||
data-bs-toggle="tab"
|
||||
data-bs-target="#{{ x.grouper }}-pane"
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-controls="{{ x.grouper }}-pane"
|
||||
aria-selected="{% if x.grouper == current_year %}true{% else %}false{% endif %}">
|
||||
{{ x.grouper }}
|
||||
</button>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="tab-content" id="yearTabsContent" hx-boost="true">
|
||||
{% for x in years_list %}
|
||||
<div class="tab-pane fade{% if x.grouper == current_year %} show active{% endif %} mt-2"
|
||||
id="{{ x.grouper }}-pane"
|
||||
role="tabpanel"
|
||||
aria-labelledby="{{ x.grouper }}"
|
||||
tabindex="0">
|
||||
<ul class="list-group list-group-flush" id="month-year-list">
|
||||
{% for month_data in x.list %}
|
||||
<li class="list-group-item tw:hover:bg-zinc-900
|
||||
{% if month_data.month == current_month and month_data.year == current_year %} disabled bg-primary{% endif %}"
|
||||
{% if month_data.month == current_month and month_data.year == current_year %}aria-disabled="true"{% endif %}>
|
||||
<div class="d-flex justify-content-between">
|
||||
<a class="text-decoration-none stretched-link {% if month_data.month == current_month and month_data.year == current_year %} text-black{% endif %}"
|
||||
href={{ month_data.url }}>
|
||||
{{ month_data.month|month_name }}</a>
|
||||
<span class="badge text-bg-secondary">{{ month_data.transaction_count }}</span>
|
||||
</div>
|
||||
|
||||
<ul class="nav nav-pills nav-fill" id="yearTabs" role="tablist">
|
||||
{% for x in years_list %}
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link{% if x.grouper == current_year %} active{% endif %}"
|
||||
id="{{ x.grouper }}"
|
||||
data-bs-toggle="tab"
|
||||
data-bs-target="#{{ x.grouper }}-pane"
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-controls="{{ x.grouper }}-pane"
|
||||
aria-selected="{% if x.grouper == current_year %}true{% else %}false{% endif %}">
|
||||
{{ x.grouper }}
|
||||
</button>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="tab-content" id="yearTabsContent" hx-boost="true">
|
||||
{% for x in years_list %}
|
||||
<div class="tab-pane fade{% if x.grouper == current_year %} show active{% endif %} mt-2"
|
||||
id="{{ x.grouper }}-pane"
|
||||
role="tabpanel"
|
||||
aria-labelledby="{{ x.grouper }}"
|
||||
tabindex="0">
|
||||
<ul class="list-group list-group-flush" id="month-year-list">
|
||||
{% for month_data in x.list %}
|
||||
<li class="list-group-item tw:hover:bg-zinc-900
|
||||
{% if month_data.month == current_month and month_data.year == current_year %} disabled bg-primary{% endif %}"
|
||||
{% if month_data.month == current_month and month_data.year == current_year %}aria-disabled="true"{% endif %}>
|
||||
<div class="d-flex justify-content-between">
|
||||
<a class="text-decoration-none stretched-link {% if month_data.month == current_month and month_data.year == current_year %} text-black{% endif %}"
|
||||
href={{ month_data.url }}>
|
||||
{{ month_data.month|month_name }}</a>
|
||||
<span class="badge text-bg-secondary">{{ month_data.transaction_count }}</span>
|
||||
</div>
|
||||
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<hr>
|
||||
<div class="w-full text-end">
|
||||
<a class="btn btn-outline-primary btn-sm" href="{{ today_url }}" role="button" hx-boost="true">{% trans 'Today' %}</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
3
app/templates/common/placeholder.html
Normal file
3
app/templates/common/placeholder.html
Normal file
@@ -0,0 +1,3 @@
|
||||
{#This is here so we can add dynamic Tailwind classes that will be required via JS/hyperscript but Tailwind has no knowledge of#}
|
||||
<div class="tw:lg:w-[15vw]"></div>
|
||||
<div class="tw:lg:ml-[16vw]"></div>
|
||||
@@ -1,6 +1,6 @@
|
||||
<li>
|
||||
<div class="d-flex align-items-center">
|
||||
<span class="text-muted small fw-bold text-uppercase tw:lg:hidden tw:lg:group-hover:inline me-2">{{ title }}</span>
|
||||
<span class="sidebar-menu-header text-muted small fw-bold text-uppercase me-2">{{ title }}</span>
|
||||
<hr class="flex-grow-1"/>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% load active_link %}
|
||||
<li>
|
||||
<a href="{% url url %}"
|
||||
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
|
||||
class="tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
|
||||
{% if tooltip %}
|
||||
data-bs-placement="right"
|
||||
data-bs-toggle="tooltip"
|
||||
@@ -9,6 +9,6 @@
|
||||
{% endif %}>
|
||||
<i class="{{ icon }} fa-fw"></i>
|
||||
<span
|
||||
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
|
||||
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<li>
|
||||
<a href="{{ url }}"
|
||||
hx-boost="false"
|
||||
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
|
||||
class="tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
|
||||
{% if tooltip %}
|
||||
data-bs-placement="right"
|
||||
data-bs-toggle="tooltip"
|
||||
@@ -11,6 +11,6 @@
|
||||
|
||||
<i class="{{ icon }} fa-fw"></i>
|
||||
<span
|
||||
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
|
||||
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
{% block body %}
|
||||
<div class="container p-3">
|
||||
<form method="post" action="{% url 'export_form' %}" id="export-form" class="show-loading px-1" _="on submit trigger hide_offcanvas" target="_blank">
|
||||
<form hx-post="{% url 'export_form' %}" hx-ext="htmx-download" hx-swap="none" id="export-form" class="show-loading px-1" target="_blank">
|
||||
{% crispy form %}
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@@ -11,7 +11,7 @@ init
|
||||
end
|
||||
|
||||
on htmx:afterSettle
|
||||
call initTooltips(event.detail.target)
|
||||
call initTooltips(body)
|
||||
end
|
||||
|
||||
on tooltips
|
||||
|
||||
@@ -5,31 +5,56 @@
|
||||
{% load static %}
|
||||
|
||||
<div
|
||||
class="tw:group tw:lg:w-16 tw:lg:hover:w-112 tw:transition-all tw:duration-100 tw:fixed tw:top-0 tw:start-0 tw:h-full tw:z-1020">
|
||||
class="sidebar {% if request.session.sidebar_status == 'floating' %}tw:group sidebar-floating{% elif request.session.sidebar_status == 'fixed' %}sidebar-fixed{% else %}tw:group sidebar-floating{% endif %}"
|
||||
id="sidebar-container">
|
||||
<nav
|
||||
id="sidebar"
|
||||
hx-boost="true"
|
||||
data-bs-scroll="true"
|
||||
class="offcanvas-lg offcanvas-start d-lg-flex flex-column position-fixed top-0 start-0 h-100 bg-body-tertiary shadow-sm tw:z-1020 tw:lg:w-16 tw:lg:group-hover:w-104 tw:transition-all tw:duration-100 tw:overflow-hidden">
|
||||
<div
|
||||
class="tw:hidden tw:lg:group-hover:block tw:absolute tw:top-0 tw:left-104 tw:w-8 tw:h-full tw:bg-transparent tw:pointer-events-auto tw:z-10"></div>
|
||||
class="offcanvas-lg offcanvas-start d-lg-flex flex-column position-fixed top-0 start-0 h-100 bg-body-tertiary shadow-sm tw:z-1020">
|
||||
|
||||
<a href="{% url 'index' %}" class="d-none d-lg-flex tw:justify-start p-3 text-decoration-none">
|
||||
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
|
||||
<span class="fs-4 fw-bold ms-3 tw:lg:invisible tw:lg:group-hover:visible">WYGIWYH</span>
|
||||
</a>
|
||||
{# <div>#}
|
||||
{# <a href="{% url 'index' %}" class="d-none d-lg-flex tw:justify-start p-3 text-decoration-none sidebar-title">#}
|
||||
{# <img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>#}
|
||||
{# <span class="fs-4 fw-bold ms-3">WYGIWYH</span>#}
|
||||
{# </a>#}
|
||||
{##}
|
||||
{##}
|
||||
{# </div>#}
|
||||
|
||||
<div class="d-none d-lg-flex tw:justify-between tw:items-center tw:border-b tw:border-gray-600 tw:lg:flex">
|
||||
<a href="{% url 'index' %}" class="m-0 d-none d-lg-flex tw:justify-start p-3 text-decoration-none sidebar-title">
|
||||
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
|
||||
<span class="fs-4 fw-bold ms-3">WYGIWYH</span>
|
||||
</a>
|
||||
|
||||
<button
|
||||
id="sidebar-toggle-btn"
|
||||
class="text-secondary-emphasis tw:rounded-full tw:w-12 tw:h-12 tw:flex tw:items-center tw:justify-center tw:transition-all tw:duration-300"
|
||||
hx-get="{% url 'toggle_sidebar_status' %}"
|
||||
_="on click
|
||||
toggle .sidebar-floating on #sidebar-container
|
||||
toggle .tw\:group on #sidebar-container
|
||||
toggle .sidebar-fixed on #sidebar-container
|
||||
end
|
||||
"
|
||||
>
|
||||
<i class="fa-solid fa-thumbtack fa-sm"></i>
|
||||
<i class="fa-solid fa-thumbtack-slash fa-sm"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="offcanvas-header">
|
||||
<a href="{% url 'index' %}" class="offcanvas-title d-flex tw:justify-start text-decoration-none">
|
||||
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
|
||||
<span class="fs-4 fw-bold ms-3 tw:lg:invisible tw:lg:group-hover:visible">WYGIWYH</span>
|
||||
<span class="fs-4 fw-bold ms-3">WYGIWYH</span>
|
||||
</a>
|
||||
<button type="button" class="btn-close" data-bs-target="#sidebar" data-bs-dismiss="offcanvas"
|
||||
aria-label={% translate 'Close' %}></button>
|
||||
</div>
|
||||
<hr class="m-0">
|
||||
|
||||
<ul class="list-unstyled p-3 d-flex flex-column gap-0 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
|
||||
<ul class="list-unstyled p-3 d-flex flex-column gap-0 tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
|
||||
style="animation-duration: 100ms">
|
||||
|
||||
<c-components.sidebar-menu-item
|
||||
@@ -127,10 +152,10 @@
|
||||
data-bs-target="#collapsible-panel"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapsible-panel"
|
||||
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views='tags_index||entities_index||categories_index||accounts_index||account_groups_index||currencies_index||exchange_rates_index||rules_index||import_profiles_index||automatic_exchange_rates_index||export_index||users_index' css_class="sidebar-active" %}">
|
||||
class="sidebar-menu-item tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views='tags_index||entities_index||categories_index||accounts_index||account_groups_index||currencies_index||exchange_rates_index||rules_index||import_profiles_index||automatic_exchange_rates_index||export_index||users_index' css_class="sidebar-active" %}">
|
||||
<i class="fa-solid fa-toolbox fa-fw"></i>
|
||||
<span
|
||||
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">
|
||||
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">
|
||||
{% translate 'Management' %}
|
||||
</span>
|
||||
</div>
|
||||
@@ -138,16 +163,15 @@
|
||||
|
||||
<div class="mt-auto p-2 w-100">
|
||||
<div id="collapsible-panel"
|
||||
class="p-0 collapse tw:absolute tw:bottom-0 tw:left-0 tw:w-full tw:z-30 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:max-h-dvh">
|
||||
<div class="tw:h-dvh tw:backdrop-blur-3xl">
|
||||
<!-- Header -->
|
||||
class="p-0 collapse tw:absolute tw:bottom-0 tw:left-0 tw:w-full tw:z-30 tw:max-h-dvh">
|
||||
<div class="tw:h-dvh tw:backdrop-blur-3xl tw:flex tw:flex-col">
|
||||
<div
|
||||
class="tw:flex tw:justify-between tw:items-center tw:p-4 tw:border-b tw:border-gray-600 tw:lg:hidden tw:lg:group-hover:flex">
|
||||
<h5 class="tw:text-lg tw:font-semibold tw:text-gray-800 tw:lg:invisible tw:lg:group-hover:visible">
|
||||
class="tw:justify-between tw:items-center tw:p-4 tw:border-b tw:border-gray-600 sidebar-submenu-header">
|
||||
<h5 class="tw:text-lg tw:font-semibold tw:text-gray-800 m-0">
|
||||
{% trans 'Management' %}
|
||||
</h5>
|
||||
|
||||
<button type="button" class="btn-close tw:lg:hidden tw:lg:group-hover:inline" aria-label="Close"
|
||||
<button type="button" class="btn-close" aria-label="Close"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapsible-panel"
|
||||
aria-expanded="true"
|
||||
@@ -155,7 +179,7 @@
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<ul class="list-unstyled p-3 d-flex flex-column gap-1 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
|
||||
<ul class="list-unstyled p-3 d-flex flex-column gap-1 tw:lg:group-hover:animate-[disable-pointer-events] tw:flex-1"
|
||||
style="animation-duration: 100ms">
|
||||
<c-components.sidebar-menu-header title="{% translate 'Transactions' %}"></c-components.sidebar-menu-header>
|
||||
<c-components.sidebar-menu-item
|
||||
@@ -261,7 +285,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="btn-group w-100" role="group">
|
||||
<div class="btn-group w-100 sidebar-item" role="group">
|
||||
<button type="button" class="btn btn-secondary btn-sm" data-bs-toggle="tooltip"
|
||||
data-bs-title="{% trans "Calculator" %}"
|
||||
_="on click trigger show on #calculator">
|
||||
@@ -273,17 +297,24 @@
|
||||
<div>
|
||||
<hr class="my-1">
|
||||
<div
|
||||
class="ps-4 pe-2 py-2 d-flex align-items-center text-body-secondary text-decoration-none justify-content-between tw:text-wrap tw:lg:text-nowrap">
|
||||
<div>
|
||||
<i class="fa-solid fa-circle-user"></i>
|
||||
<strong class="ms-2 tw:lg:invisible tw:lg:group-hover:visible">{{ user.email }}</strong>
|
||||
class="ps-4 pe-2 py-2 d-flex align-items-center text-decoration-none justify-content-between">
|
||||
|
||||
<div class="d-flex align-items-center" style="min-width: 0;">
|
||||
<i class="fa-solid fa-circle-user text-body-secondary"></i>
|
||||
|
||||
<strong class="mx-2 text-body-secondary text-truncate sidebar-invisible">
|
||||
{{ user.email }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="tw:lg:invisible tw:lg:group-hover:visible">
|
||||
|
||||
<div class="sidebar-invisible">
|
||||
{% include 'includes/navbar/user_menu.html' %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div
|
||||
class="tw:hidden tw:lg:group-hover:block tw:absolute tw:top-0 tw:left-104 tw:w-16 tw:h-full tw:bg-transparent"></div>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% load i18n %}
|
||||
|
||||
<div hx-get="{% url 'category_overview' %}" hx-trigger="updated from:window" class="show-loading" hx-swap="outerHTML"
|
||||
hx-include="#picker-form, #picker-type, #view-type, #show-tags, #showing">
|
||||
hx-include="#picker-form, #picker-type, #view-type, #show-tags, #showing, #show-entities">
|
||||
<div class="h-100 text-center mb-4">
|
||||
<div class="btn-group gap-3" role="group" id="view-type" _="on change trigger updated">
|
||||
<input type="radio" class="btn-check"
|
||||
@@ -25,19 +25,34 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-3 mb-1 d-flex flex-column flex-md-row justify-content-between">
|
||||
<div class="form-check form-switch" id="show-tags">
|
||||
<div class="d-flex gap-4">
|
||||
{% if view_type == 'table' %}
|
||||
<input type="hidden" name="show_tags" value="off">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="show-tags-switch" name="show_tags"
|
||||
_="on change trigger updated" {% if show_tags %}checked{% endif %}>
|
||||
{% spaceless %}
|
||||
<label class="form-check-label" for="show-tags-switch">
|
||||
{% trans 'Tags' %}
|
||||
</label>
|
||||
<c-ui.help-icon
|
||||
content="{% trans 'Transaction amounts associated with multiple tags will be counted once for each tag' %}"
|
||||
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
|
||||
{% endspaceless %}
|
||||
<div class="form-check form-switch" id="show-tags">
|
||||
<input type="hidden" name="show_tags" value="off">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="show-tags-switch" name="show_tags"
|
||||
_="on change trigger updated" {% if show_tags %}checked{% endif %}>
|
||||
{% spaceless %}
|
||||
<label class="form-check-label" for="show-tags-switch">
|
||||
{% trans 'Tags' %}
|
||||
</label>
|
||||
<c-ui.help-icon
|
||||
content="{% trans 'Transaction amounts associated with multiple tags will be counted once for each tag' %}"
|
||||
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
|
||||
{% endspaceless %}
|
||||
</div>
|
||||
<div class="form-check form-switch" id="show-entities" {% if not show_tags %}style="display: none;"{% endif %}>
|
||||
<input type="hidden" name="show_entities" value="off">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="show-entities-switch" name="show_entities"
|
||||
_="on change trigger updated" {% if show_entities %}checked{% endif %}>
|
||||
{% spaceless %}
|
||||
<label class="form-check-label" for="show-entities-switch">
|
||||
{% trans 'Entities' %}
|
||||
</label>
|
||||
<c-ui.help-icon
|
||||
content="{% trans 'Transaction amounts associated with multiple tags and entities will be counted once for each tag' %}"
|
||||
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
|
||||
{% endspaceless %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="btn-group btn-group-sm" role="group" id="showing" _="on change trigger updated">
|
||||
@@ -250,6 +265,100 @@
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Entity rows -->
|
||||
{% if show_entities %}
|
||||
{% for entity_id, entity in tag.entities.items %}
|
||||
<tr class="table-row-nested-2">
|
||||
<td class="ps-5">
|
||||
<i class="fa-solid fa-user-group fa-fw me-2 text-muted"></i>{{ entity.name }}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.income_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.income_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.income_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.income_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_income != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_income"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.expense_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.expense_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.expense_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.expense_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_expense != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_expense"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.total_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.total_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_final != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_final"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
{% include 'includes/mobile_navbar.html' %}
|
||||
{% include 'includes/sidebar.html' %}
|
||||
|
||||
<main class="tw:p-4 tw:lg:ml-16">
|
||||
<main class="tw:p-4">
|
||||
{% settings "DEMO" as demo_mode %}
|
||||
{% if demo_mode %}
|
||||
<div class="px-3 m-0" id="demo-mode-alert" hx-preserve>
|
||||
|
||||
@@ -44,12 +44,12 @@
|
||||
</div>
|
||||
</div>
|
||||
{# Action buttons#}
|
||||
{# <div class="col-12 col-xl-8">#}
|
||||
{# <c-ui.quick-transactions-buttons#}
|
||||
{# :year="year"#}
|
||||
{# :month="month"#}
|
||||
{# ></c-ui.quick-transactions-buttons>#}
|
||||
{# </div>#}
|
||||
{# <div class="col-12 col-xl-8">#}
|
||||
{# <c-ui.quick-transactions-buttons#}
|
||||
{# :year="year"#}
|
||||
{# :month="month"#}
|
||||
{# ></c-ui.quick-transactions-buttons>#}
|
||||
{# </div>#}
|
||||
</div>
|
||||
{# Monthly summary#}
|
||||
<div class="row gx-xl-4 gy-3">
|
||||
@@ -133,59 +133,101 @@
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-xl-8 order-2 order-xl-1">
|
||||
<div class="row mb-1">
|
||||
<div class="col-sm-6 col-12">
|
||||
{# Filter transactions button #}
|
||||
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle" type="button"
|
||||
data-bs-toggle="collapse" data-bs-target="#collapse-filter" aria-expanded="false"
|
||||
aria-controls="collapse-filter">
|
||||
<i class="fa-solid fa-filter fa-fw me-2"></i>{% translate 'Filter transactions' %}
|
||||
|
||||
<div class="my-3">
|
||||
{# Hidden select to hold the order value and preserve the original update trigger #}
|
||||
<select name="order" id="order" class="d-none" _="on change trigger updated on window">
|
||||
<option value="default" {% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
|
||||
<option value="older" {% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
|
||||
<option value="newer" {% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
|
||||
</select>
|
||||
|
||||
{# Main control bar with filter, search, and ordering #}
|
||||
<div class="input-group">
|
||||
|
||||
<button class="btn btn-secondary position-relative" type="button"
|
||||
data-bs-toggle="collapse" data-bs-target="#collapse-filter"
|
||||
aria-expanded="false" aria-controls="collapse-filter" id="filter-button" hx-preserve
|
||||
title="{% translate 'Filter transactions' %}">
|
||||
<i class="fa-solid fa-filter fa-fw"></i>
|
||||
</button>
|
||||
</div>
|
||||
{# Ordering button#}
|
||||
<div class="col-sm-6 col-12 tw:content-center my-3 my-sm-0">
|
||||
<div class="text-sm-end" _="on change trigger updated on window">
|
||||
<label for="order">{% translate "Order by" %}</label>
|
||||
<select
|
||||
class="tw:border-0 tw:focus-visible:outline-0 w-full pe-2 tw:leading-normal text-bg-tertiary tw:font-medium rounded bg-body text-body"
|
||||
name="order" id="order">
|
||||
<option value="default"
|
||||
{% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
|
||||
<option value="older"
|
||||
{% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
|
||||
<option value="newer"
|
||||
{% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{# Filter transactions form#}
|
||||
<div class="collapse" id="collapse-filter" hx-preserve>
|
||||
<div class="card card-body">
|
||||
<form _="on change or submit or search trigger updated on window end
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
<button class="btn btn-outline-danger btn-sm"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="search" class="my-3">
|
||||
<label class="w-100">
|
||||
<input type="search" class="form-control" placeholder="{% translate 'Search' %}" hx-preserve
|
||||
|
||||
{# Search box #}
|
||||
<label for="quick-search">
|
||||
</label>
|
||||
<input type="search"
|
||||
class="form-control"
|
||||
placeholder="{% translate 'Search' %}"
|
||||
hx-preserve
|
||||
id="quick-search"
|
||||
_="on input or search or htmx:afterSwap from window
|
||||
if my value is empty
|
||||
trigger toggle on <.transactions-divider-collapse/>
|
||||
else
|
||||
trigger show on <.transactions-divider-collapse/>
|
||||
end
|
||||
show <.transactions-divider-title/> when my value is empty
|
||||
show <.transaction/> in <#transactions-list/>
|
||||
when its textContent.toLowerCase() contains my value.toLowerCase()">
|
||||
</label>
|
||||
if my value is empty
|
||||
trigger toggle on <.transactions-divider-collapse/>
|
||||
else
|
||||
trigger show on <.transactions-divider-collapse/>
|
||||
end
|
||||
show <.transactions-divider-title/> when my value is empty
|
||||
show <.transaction/> in <#transactions-list/>
|
||||
when its textContent.toLowerCase() contains my value.toLowerCase()">
|
||||
|
||||
{# Order by icon dropdown #}
|
||||
<button class="btn btn-secondary dropdown-toggle dropdown-toggle-no-icon" type="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false"
|
||||
title="{% translate 'Order by' %}">
|
||||
<i class="fa-solid fa-sort fa-fw"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'default' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'default'
|
||||
then trigger change on #order">
|
||||
{% translate 'Default' %}
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'older' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'older'
|
||||
then trigger change on #order">
|
||||
{% translate 'Oldest first' %}
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'newer' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'newer'
|
||||
then trigger change on #order">
|
||||
{% translate 'Newest first' %}
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{# Filter transactions form #}
|
||||
<div class="collapse" id="collapse-filter" hx-preserve>
|
||||
<div class="card card-body">
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-danger btn-sm tw:w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
|
||||
<form _="on change or submit or search trigger updated on window
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter" class="mt-3">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-danger btn-sm tw:w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{# Transactions list#}
|
||||
<div id="transactions"
|
||||
|
||||
@@ -5,121 +5,128 @@
|
||||
|
||||
<div id="transactions-list">
|
||||
{% for x in transactions_by_date %}
|
||||
<div id="{{ x.grouper|slugify }}"
|
||||
_="on htmx:afterSettle from #transactions if sessionStorage.getItem(my id) is null then sessionStorage.setItem(my id, 'true')">
|
||||
<div class="mt-3 mb-1 w-100 tw:text-base border-bottom bg-body">
|
||||
<div id="{{ x.grouper|slugify }}" class="transactions-divider"
|
||||
_="on htmx:afterSwap from #transactions if sessionStorage.getItem(my id) is null then sessionStorage.setItem(my id, 'true')">
|
||||
<div class="mt-3 mb-1 w-100 tw:text-base border-bottom bg-body transactions-divider-title">
|
||||
<a class="text-decoration-none d-inline-block w-100"
|
||||
role="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#c-{{ x.grouper|slugify }}-collapse"
|
||||
id="c-{{ x.grouper|slugify }}-collapsible"
|
||||
aria-expanded="true"
|
||||
aria-expanded="false"
|
||||
aria-controls="c-{{ x.grouper|slugify }}-collapse">
|
||||
{{ x.grouper }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="collapse" id="c-{{ x.grouper|slugify }}-collapse"
|
||||
<div class="collapse transactions-divider-collapse" id="c-{{ x.grouper|slugify }}-collapse"
|
||||
_="on shown.bs.collapse sessionStorage.setItem(the closest parent @id, 'true')
|
||||
on hidden.bs.collapse sessionStorage.setItem(the closest parent @id, 'false')
|
||||
on htmx:afterSettle from #transactions
|
||||
on htmx:afterSettle from #transactions or toggle
|
||||
set state to sessionStorage.getItem(the closest parent @id)
|
||||
if state is 'true' or state is null
|
||||
add .show to me
|
||||
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to true
|
||||
end">
|
||||
else
|
||||
remove .show from me
|
||||
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to false
|
||||
end
|
||||
on show
|
||||
add .show to me
|
||||
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to true">
|
||||
<div class="d-flex flex-column">
|
||||
{% for transaction in x.list %}
|
||||
<c-transaction.item :transaction="transaction"></c-transaction.item>
|
||||
<c-transaction.item
|
||||
:transaction="transaction"></c-transaction.item>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% empty %}
|
||||
<c-msg.empty
|
||||
title="{% translate "No transactions found" %}"
|
||||
subtitle="{% translate "Try adding one" %}"></c-msg.empty>
|
||||
{% endfor %}
|
||||
title="{% translate "No transactions found" %}"
|
||||
subtitle="{% translate "Try adding one" %}"></c-msg.empty>
|
||||
{% endfor %}
|
||||
|
||||
{% if page_obj.has_other_pages %}
|
||||
<div class="mt-auto">
|
||||
<input value="{{ page_obj.number }}" name="page" type="hidden" id="page">
|
||||
<div class="mt-auto">
|
||||
<input value="{{ page_obj.number }}" name="page" type="hidden" id="page">
|
||||
|
||||
<nav aria-label="{% translate 'Page navigation' %}">
|
||||
<ul class="pagination justify-content-center mt-5">
|
||||
<li class="page-item">
|
||||
<a class="page-link tw:cursor-pointer {% if not page_obj.has_previous %}disabled{% endif %}"
|
||||
hx-get="{% if page_obj.has_previous %}{% url 'transactions_all_list' %}{% endif %}"
|
||||
hx-vals='{"page": 1}'
|
||||
hx-include="#filter, #order"
|
||||
hx-target="#transactions-list"
|
||||
aria-label="Primeira página"
|
||||
hx-swap="show:top">
|
||||
<span aria-hidden="true">«</span>
|
||||
</a>
|
||||
</li>
|
||||
{% for page_number in page_obj.paginator.page_range %}
|
||||
{% comment %}
|
||||
<nav aria-label="{% translate 'Page navigation' %}">
|
||||
<ul class="pagination justify-content-center mt-5">
|
||||
<li class="page-item">
|
||||
<a class="page-link tw:cursor-pointer {% if not page_obj.has_previous %}disabled{% endif %}"
|
||||
hx-get="{% if page_obj.has_previous %}{% url 'transactions_all_list' %}{% endif %}"
|
||||
hx-vals='{"page": 1}'
|
||||
hx-include="#filter, #order"
|
||||
hx-target="#transactions-list"
|
||||
aria-label="Primeira página"
|
||||
hx-swap="show:top">
|
||||
<span aria-hidden="true">«</span>
|
||||
</a>
|
||||
</li>
|
||||
{% for page_number in page_obj.paginator.page_range %}
|
||||
{% comment %}
|
||||
This conditional allows us to display up to 3 pages before and after the current page
|
||||
If you decide to remove this conditional, all the pages will be displayed
|
||||
|
||||
You can change the 3 to any number you want e.g
|
||||
To display only 5 pagination items, change the 3 to 2 (2 before and 2 after the current page)
|
||||
{% endcomment %}
|
||||
{% if page_number <= page_obj.number|add:3 and page_number >= page_obj.number|add:-3 %}
|
||||
{% if page_obj.number == page_number %}
|
||||
<li class="page-item active">
|
||||
<a class="page-link tw:cursor-pointer">
|
||||
{{ page_number }}
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item">
|
||||
<a class="page-link tw:cursor-pointer"
|
||||
hx-get="{% url 'transactions_all_list' %}"
|
||||
hx-vals='{"page": {{ page_number }}}'
|
||||
hx-include="#filter, #order"
|
||||
hx-target="#transactions-list"
|
||||
hx-swap="show:top">
|
||||
{{ page_number }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if page_number <= page_obj.number|add:3 and page_number >= page_obj.number|add:-3 %}
|
||||
{% if page_obj.number == page_number %}
|
||||
<li class="page-item active">
|
||||
<a class="page-link tw:cursor-pointer">
|
||||
{{ page_number }}
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<li class="page-item">
|
||||
<a class="page-link tw:cursor-pointer"
|
||||
hx-get="{% url 'transactions_all_list' %}"
|
||||
hx-vals='{"page": {{ page_number }}}'
|
||||
hx-include="#filter, #order"
|
||||
hx-target="#transactions-list"
|
||||
hx-swap="show:top">
|
||||
{{ page_number }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if page_obj.number|add:3 < page_obj.paginator.num_pages %}
|
||||
<li class="page-item">
|
||||
<a class="page-link disabled"
|
||||
aria-label="...">
|
||||
<span aria-hidden="true">...</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
<a class="page-link tw:cursor-pointer"
|
||||
hx-get="{% url 'transactions_all_list' %}" hx-target="#transactions-list"
|
||||
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
|
||||
hx-include="#filter, #order"
|
||||
hx-swap="show:top"
|
||||
aria-label="Última página">
|
||||
<span aria-hidden="true">{{ page_obj.paginator.num_pages }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="page-item">
|
||||
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw:cursor-pointer"
|
||||
hx-get="{% if page_obj.has_next %}{% url 'transactions_all_list' %}{% endif %}"
|
||||
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
|
||||
hx-include="#filter, #order"
|
||||
hx-swap="show:top"
|
||||
hx-target="#transactions-list"
|
||||
aria-label="Next">
|
||||
<span aria-hidden="true">»</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if page_obj.number|add:3 < page_obj.paginator.num_pages %}
|
||||
<li class="page-item">
|
||||
<a class="page-link disabled"
|
||||
aria-label="...">
|
||||
<span aria-hidden="true">...</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="page-item">
|
||||
<a class="page-link tw:cursor-pointer"
|
||||
hx-get="{% url 'transactions_all_list' %}" hx-target="#transactions-list"
|
||||
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
|
||||
hx-include="#filter, #order"
|
||||
hx-swap="show:top"
|
||||
aria-label="Última página">
|
||||
<span aria-hidden="true">{{ page_obj.paginator.num_pages }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="page-item">
|
||||
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw:cursor-pointer"
|
||||
hx-get="{% if page_obj.has_next %}{% url 'transactions_all_list' %}{% endif %}"
|
||||
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
|
||||
hx-include="#filter, #order"
|
||||
hx-swap="show:top"
|
||||
hx-target="#transactions-list"
|
||||
aria-label="Next">
|
||||
<span aria-hidden="true">»</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
{% endif %}
|
||||
{# Floating bar#}
|
||||
{# Floating bar#}
|
||||
<c-ui.transactions-action-bar></c-ui.transactions-action-bar>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -8,45 +8,101 @@
|
||||
<div class="container px-md-3 py-3 column-gap-5">
|
||||
<div class="row gx-xl-4 gy-3">
|
||||
<div class="col-12 col-xl-8 order-2 order-xl-1">
|
||||
<div class="row mb-1">
|
||||
<div class="col-sm-6 col-12">
|
||||
{# Filter transactions button #}
|
||||
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle" type="button"
|
||||
data-bs-toggle="collapse" data-bs-target="#collapse-filter" aria-expanded="false"
|
||||
aria-controls="collapse-filter">
|
||||
<i class="fa-solid fa-filter fa-fw me-2"></i>{% translate 'Filter transactions' %}
|
||||
<div class="mb-3">
|
||||
{# Hidden select to hold the order value and preserve the original update trigger #}
|
||||
<select name="order" id="order" class="d-none" _="on change trigger updated on window">
|
||||
<option value="default" {% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
|
||||
<option value="older" {% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
|
||||
<option value="newer" {% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
|
||||
</select>
|
||||
|
||||
{# Main control bar with filter, search, and ordering #}
|
||||
<div class="input-group">
|
||||
|
||||
<button class="btn btn-secondary position-relative" type="button"
|
||||
data-bs-toggle="collapse" data-bs-target="#collapse-filter"
|
||||
aria-expanded="false" aria-controls="collapse-filter" id="filter-button" hx-preserve
|
||||
title="{% translate 'Filter transactions' %}">
|
||||
<i class="fa-solid fa-filter fa-fw"></i>
|
||||
</button>
|
||||
|
||||
{# Search box #}
|
||||
<label for="quick-search">
|
||||
</label>
|
||||
<input type="search"
|
||||
class="form-control"
|
||||
placeholder="{% translate 'Search' %}"
|
||||
hx-preserve
|
||||
id="quick-search"
|
||||
_="on input or search or htmx:afterSwap from window
|
||||
if my value is empty
|
||||
trigger toggle on <.transactions-divider-collapse/>
|
||||
else
|
||||
trigger show on <.transactions-divider-collapse/>
|
||||
end
|
||||
show <.transactions-divider-title/> when my value is empty
|
||||
show <.transaction/> in <#transactions-list/>
|
||||
when its textContent.toLowerCase() contains my value.toLowerCase()">
|
||||
|
||||
{# Order by icon dropdown #}
|
||||
<button class="btn btn-secondary dropdown-toggle dropdown-toggle-no-icon" type="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false"
|
||||
title="{% translate 'Order by' %}">
|
||||
<i class="fa-solid fa-sort fa-fw"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'default' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'default'
|
||||
then trigger change on #order">
|
||||
{% translate 'Default' %}
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'older' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'older'
|
||||
then trigger change on #order">
|
||||
{% translate 'Oldest first' %}
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'newer' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'newer'
|
||||
then trigger change on #order">
|
||||
{% translate 'Newest first' %}
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{# Ordering button#}
|
||||
<div class="col-sm-6 col-12 tw:content-center my-3 my-sm-0">
|
||||
<div class="text-sm-end" _="on change trigger updated on window">
|
||||
<label for="order">{% translate "Order by" %}</label>
|
||||
<select
|
||||
class="tw:border-0 tw:focus-visible:outline-0 w-full pe-2 tw:leading-normal text-bg-tertiary tw:font-medium rounded bg-body text-body"
|
||||
name="order" id="order">
|
||||
<option value="default"
|
||||
{% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
|
||||
<option value="older"
|
||||
{% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
|
||||
<option value="newer"
|
||||
{% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
|
||||
</select>
|
||||
|
||||
{# Filter transactions form #}
|
||||
<div class="collapse" id="collapse-filter" hx-preserve>
|
||||
<div class="card card-body">
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-danger btn-sm tw:w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
|
||||
<form _="on change or submit or search trigger updated on window
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter" class="mt-3">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-danger btn-sm tw:w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{# Filter transactions form#}
|
||||
<div class="collapse" id="collapse-filter">
|
||||
<div class="card card-body">
|
||||
<form _="on change or submit or search trigger updated on window end
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
<button class="btn btn-outline-danger btn-sm"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="transactions"
|
||||
class="show-loading"
|
||||
hx-get="{% url 'transactions_all_list' %}"
|
||||
|
||||
@@ -1,2 +1,66 @@
|
||||
import htmx from "htmx.org";
|
||||
|
||||
window.htmx = htmx;
|
||||
|
||||
htmx.defineExtension('htmx-download', {
|
||||
onEvent: function (name, evt) {
|
||||
|
||||
if (name === 'htmx:beforeRequest') {
|
||||
// Set the responseType to 'arraybuffer' to handle binary data
|
||||
evt.detail.xhr.responseType = 'arraybuffer';
|
||||
}
|
||||
|
||||
if (name === 'htmx:beforeSwap') {
|
||||
const xhr = evt.detail.xhr;
|
||||
|
||||
if (xhr.status === 200) {
|
||||
// Parse headers
|
||||
const headers = {};
|
||||
const headerStr = xhr.getAllResponseHeaders();
|
||||
const headerArr = headerStr.trim().split(/[\r\n]+/);
|
||||
headerArr.forEach((line) => {
|
||||
const parts = line.split(": ");
|
||||
const header = parts.shift().toLowerCase();
|
||||
const value = parts.join(": ");
|
||||
headers[header] = value;
|
||||
});
|
||||
|
||||
// Extract filename
|
||||
let filename = 'downloaded_file.xlsx';
|
||||
if (headers['content-disposition']) {
|
||||
const filenameMatch = headers['content-disposition'].match(/filename\*?=(?:UTF-8'')?"?([^;\n"]+)/i);
|
||||
if (filenameMatch && filenameMatch[1]) {
|
||||
filename = decodeURIComponent(filenameMatch[1].replace(/['"]/g, ''));
|
||||
}
|
||||
}
|
||||
|
||||
// Determine MIME type
|
||||
const mimetype = headers['content-type'] || 'application/octet-stream';
|
||||
|
||||
// Create Blob
|
||||
const blob = new Blob([xhr.response], {type: mimetype});
|
||||
const url = URL.createObjectURL(blob);
|
||||
|
||||
// Trigger download
|
||||
const link = document.createElement("a");
|
||||
link.style.display = "none";
|
||||
link.href = url;
|
||||
link.download = filename;
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
|
||||
// Cleanup
|
||||
setTimeout(() => {
|
||||
URL.revokeObjectURL(url);
|
||||
link.remove();
|
||||
}, 100);
|
||||
|
||||
} else {
|
||||
console.warn(`[htmx-download] Unexpected response status: ${xhr.status}`);
|
||||
}
|
||||
|
||||
// Prevent htmx from swapping content
|
||||
evt.detail.shouldSwap = false;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -49,3 +49,7 @@ $theme-colors: map.merge(
|
||||
.offcanvas-size-sm {
|
||||
--#{$prefix}offcanvas-width: min(95vw, 250px) !important;
|
||||
}
|
||||
|
||||
.dropdown-toggle.dropdown-toggle-no-icon::after {
|
||||
display:none;
|
||||
}
|
||||
|
||||
@@ -3,9 +3,139 @@
|
||||
@custom-variant hover (&:hover);
|
||||
|
||||
.sidebar-active {
|
||||
@apply tw:bg-gray-700 tw:text-white;
|
||||
@apply tw:bg-gray-700 tw:text-white;
|
||||
}
|
||||
|
||||
.sidebar-item:not(.sidebar-active) {
|
||||
@apply tw:text-gray-300 tw:hover:text-white;
|
||||
}
|
||||
|
||||
@layer components {
|
||||
.sidebar {
|
||||
@apply tw:z-1020 tw:fixed tw:top-0 tw:start-0 tw:h-full tw:transition-all tw:duration-100;
|
||||
}
|
||||
|
||||
.sidebar-floating {
|
||||
/* Establishes the hover group and sets the collapsed/hover widths for the container */
|
||||
@apply tw:lg:w-16 tw:lg:hover:w-112;
|
||||
}
|
||||
|
||||
.sidebar-floating #sidebar {
|
||||
/* Sets the collapsed/hover widths for the inner navigation element */
|
||||
@apply tw:lg:w-16 tw:lg:group-hover:w-104 tw:transition-all tw:duration-100 tw:overflow-hidden;
|
||||
}
|
||||
|
||||
.sidebar-floating + main {
|
||||
/* Adjusts the main content margin to account for the collapsed sidebar */
|
||||
@apply tw:lg:ml-16 tw:transition-all tw:duration-100;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-item span {
|
||||
/* Hides the text labels and reveals them only on hover */
|
||||
@apply tw:lg:invisible tw:lg:group-hover:visible;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-invisible {
|
||||
/* Hides the text labels and reveals them only on hover */
|
||||
@apply tw:lg:invisible tw:lg:group-hover:visible;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-menu-header {
|
||||
/* Hides the menu headers and reveals them only on hover */
|
||||
@apply tw:lg:hidden tw:lg:group-hover:inline;
|
||||
}
|
||||
|
||||
.sidebar-floating #sidebar-toggle-btn .fa-thumbtack-slash {
|
||||
/* Hides the 'pin' icon in the floating state */
|
||||
@apply tw:hidden!;
|
||||
}
|
||||
|
||||
.sidebar-floating #sidebar-toggle-btn .fa-thumbtack {
|
||||
/* Shows the 'expand' icon in the floating state */
|
||||
@apply tw:inline-block!;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-title span {
|
||||
@apply tw:lg:invisible tw:lg:group-hover:visible
|
||||
}
|
||||
|
||||
.sidebar-submenu-header {
|
||||
@apply tw:flex;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-submenu-header {
|
||||
@apply tw:lg:hidden tw:lg:group-hover:flex;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-submenu-header h5 {
|
||||
@apply tw:lg:invisible tw:lg:group-hover:visible;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-submenu-header button {
|
||||
@apply tw:lg:hidden tw:lg:group-hover:inline;
|
||||
}
|
||||
|
||||
.sidebar-floating .list-unstyled {
|
||||
@apply tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-item {
|
||||
@apply tw:text-wrap tw:lg:text-nowrap ;
|
||||
}
|
||||
|
||||
|
||||
/* --- STATE 2: Fixed (Permanently Expanded) --- */
|
||||
.sidebar-fixed {
|
||||
/* Sets the fixed, expanded width for the container */
|
||||
@apply tw:lg:w-[17%] tw:transition-all tw:duration-100;
|
||||
}
|
||||
|
||||
.sidebar-fixed #sidebar {
|
||||
/* Sets the fixed, expanded width for the inner navigation */
|
||||
@apply tw:lg:w-[17%] tw:transition-all tw:duration-100;
|
||||
}
|
||||
|
||||
.sidebar-fixed + main {
|
||||
/* Adjusts the main content margin to account for the expanded sidebar */
|
||||
@apply tw:lg:ml-[17%] tw:transition-all tw:duration-100;
|
||||
|
||||
/* Using 16vw to account for padding/margins */
|
||||
}
|
||||
|
||||
.sidebar-fixed .sidebar-item {
|
||||
@apply tw:text-wrap;
|
||||
}
|
||||
|
||||
.sidebar-fixed .sidebar-item span {
|
||||
/* Ensures text labels are always visible */
|
||||
@apply tw:lg:visible;
|
||||
}
|
||||
|
||||
.sidebar-fixed .sidebar-menu-header {
|
||||
/* Ensures menu headers are always visible */
|
||||
@apply tw:lg:inline;
|
||||
}
|
||||
|
||||
.sidebar-fixed #sidebar-toggle-btn .fa-thumbtack-slash {
|
||||
/* Shows the 'pin' icon in the fixed state */
|
||||
@apply tw:inline-block!;
|
||||
}
|
||||
|
||||
.sidebar-fixed #sidebar-toggle-btn .fa-thumbtack {
|
||||
/* Hides the 'expand' icon in the fixed state */
|
||||
@apply tw:hidden!;
|
||||
}
|
||||
|
||||
.sidebar-fixed .sidebar-title span {
|
||||
@apply tw:lg:visible;
|
||||
}
|
||||
|
||||
.sidebar-fixed .sidebar-submenu-header {
|
||||
/* Ensures menu headers are always visible */
|
||||
@apply tw:lg:flex;
|
||||
}
|
||||
|
||||
.sidebar-fixed .list-unstyled {
|
||||
@apply tw:overflow-y-auto tw:overflow-x-hidden;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user