mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-02-25 08:54:52 +01:00
Compare commits
40 Commits
feature/un
...
0.16.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
74899f63ab | ||
|
|
e0ab32ec03 | ||
|
|
a912e4a511 | ||
|
|
57ba672c91 |
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+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/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
"Archivierte Konten werden weder angezeigt, noch zum Nettovermögen gezählt"
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -185,7 +185,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Konto"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: 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
|
||||
@@ -197,7 +197,7 @@ msgstr "Konto"
|
||||
msgid "Accounts"
|
||||
msgstr "Konten"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr ""
|
||||
"Die Umrechnungs-Währung darf nicht mit der Haupt-Währung des Kontos "
|
||||
@@ -235,7 +235,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Kontengruppe erfolgreich gelöscht"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -260,6 +260,14 @@ msgstr "Konto erfolgreich aktualisiert"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Konto erfolgreich gelöscht"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Saldenaktualisierung"
|
||||
@@ -311,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"
|
||||
|
||||
@@ -356,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"
|
||||
|
||||
@@ -451,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"
|
||||
|
||||
@@ -557,27 +566,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
|
||||
@@ -586,31 +595,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."
|
||||
@@ -618,11 +627,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."
|
||||
@@ -630,33 +639,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')."
|
||||
@@ -664,7 +673,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."
|
||||
@@ -841,7 +850,7 @@ 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
|
||||
msgid "Categories"
|
||||
@@ -849,7 +858,7 @@ 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
|
||||
@@ -857,6 +866,7 @@ msgstr "Kategorien"
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entitäten"
|
||||
|
||||
@@ -924,7 +934,7 @@ msgstr "Aktion der Transaktions-Regel bearbeiten"
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Aktualisierung oder Erstellung von Transaktions-Aktionen"
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1025,10 +1035,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"
|
||||
|
||||
@@ -1293,7 +1303,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
|
||||
@@ -1308,26 +1318,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"
|
||||
@@ -1439,7 +1478,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"
|
||||
@@ -1451,7 +1490,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"
|
||||
|
||||
@@ -1808,19 +1847,19 @@ msgstr "Dieses Konto ist deaktiviert"
|
||||
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 "
|
||||
@@ -1831,25 +1870,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."
|
||||
@@ -1857,35 +1896,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."
|
||||
|
||||
@@ -2005,7 +2044,7 @@ msgstr "Bearbeiten"
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2032,7 +2071,7 @@ msgstr "Löschen"
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2062,7 +2101,7 @@ msgstr "Bist du sicher?"
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2084,7 +2123,7 @@ msgstr "Dies kann nicht rückgängig gemacht werden!"
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2165,7 +2204,15 @@ msgstr "Konto bearbeiten"
|
||||
msgid "Is Asset"
|
||||
msgstr "Ist Vermögenswert"
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr "Keine Konten"
|
||||
|
||||
@@ -2223,7 +2270,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"
|
||||
|
||||
@@ -2247,35 +2294,42 @@ msgid "Select"
|
||||
msgstr "Auswahl"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr "Anzeigen auf Zusammenfassungen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
#, fuzzy
|
||||
#| msgid "Controlled by category"
|
||||
msgid "Controlled by account"
|
||||
msgstr "Gesteuert durch Kategorie"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr "Gesteuert durch Kategorie"
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr "Verstecken bei Zusammenfassungen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Als schnelle Transaktion hinzufügen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplikat"
|
||||
@@ -2719,7 +2773,7 @@ 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"
|
||||
@@ -2856,7 +2910,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"
|
||||
@@ -2864,22 +2918,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"
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+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/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
@@ -167,7 +167,7 @@ msgstr ""
|
||||
msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -181,7 +181,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: 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
|
||||
@@ -193,7 +193,7 @@ msgstr ""
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr ""
|
||||
|
||||
@@ -229,7 +229,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -254,6 +254,14 @@ msgstr ""
|
||||
msgid "Account deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr ""
|
||||
@@ -303,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 ""
|
||||
|
||||
@@ -344,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 ""
|
||||
|
||||
@@ -439,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 ""
|
||||
|
||||
@@ -545,27 +554,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
|
||||
@@ -574,77 +583,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."
|
||||
@@ -817,7 +826,7 @@ 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
|
||||
msgid "Categories"
|
||||
@@ -825,7 +834,7 @@ 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
|
||||
@@ -833,6 +842,7 @@ msgstr ""
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
@@ -900,7 +910,7 @@ msgstr ""
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -999,10 +1009,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 ""
|
||||
|
||||
@@ -1260,7 +1270,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
|
||||
@@ -1275,26 +1285,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 ""
|
||||
@@ -1394,7 +1425,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 ""
|
||||
@@ -1406,7 +1437,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 ""
|
||||
|
||||
@@ -1762,19 +1793,19 @@ msgstr ""
|
||||
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 "
|
||||
@@ -1782,59 +1813,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 ""
|
||||
|
||||
@@ -1954,7 +1985,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -1981,7 +2012,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2011,7 +2042,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2033,7 +2064,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2114,7 +2145,15 @@ msgstr ""
|
||||
msgid "Is Asset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -2172,7 +2211,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 ""
|
||||
|
||||
@@ -2196,35 +2235,40 @@ msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
msgid "Controlled by account"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
@@ -2665,7 +2709,7 @@ 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 ""
|
||||
@@ -2799,26 +2843,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 ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+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/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Etiquetas"
|
||||
@@ -169,7 +169,7 @@ msgstr "Archivado"
|
||||
msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr "Las cuentas archivadas no aparecen ni cuentan para su patrimonio neto"
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -183,7 +183,7 @@ msgstr "Las cuentas archivadas no aparecen ni cuentan para su patrimonio neto"
|
||||
msgid "Account"
|
||||
msgstr "Cuenta"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: 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
|
||||
@@ -195,7 +195,7 @@ msgstr "Cuenta"
|
||||
msgid "Accounts"
|
||||
msgstr "Cuentas"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr ""
|
||||
"La moneda de cambio no puede ser la misma que la moneda principal de la "
|
||||
@@ -233,7 +233,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Grupo de Cuenta eliminado exitosamente"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -258,6 +258,14 @@ msgstr "Cuenta actualizada exitosamente"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Cuenta borrada exitosamente"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Conciliación de saldos"
|
||||
@@ -311,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"
|
||||
@@ -363,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"
|
||||
|
||||
@@ -459,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"
|
||||
|
||||
@@ -567,27 +576,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
|
||||
@@ -596,37 +605,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 "
|
||||
@@ -635,12 +644,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 "
|
||||
@@ -649,36 +658,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., "
|
||||
@@ -687,7 +696,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 "
|
||||
@@ -900,7 +909,7 @@ 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
|
||||
#, fuzzy
|
||||
@@ -909,7 +918,7 @@ 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
|
||||
@@ -917,6 +926,7 @@ msgstr "Categories"
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
#, fuzzy
|
||||
msgid "Entities"
|
||||
msgstr "Entities"
|
||||
@@ -997,7 +1007,7 @@ msgstr "Edit transaction action"
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Update or create transaction actions"
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1118,10 +1128,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"
|
||||
@@ -1432,7 +1442,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
|
||||
@@ -1450,31 +1460,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"
|
||||
@@ -1599,7 +1633,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"
|
||||
@@ -1612,7 +1646,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"
|
||||
@@ -2039,22 +2073,22 @@ msgstr "This account is deactivated"
|
||||
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 "
|
||||
@@ -2065,20 +2099,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."
|
||||
@@ -2086,7 +2120,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."
|
||||
@@ -2094,35 +2128,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."
|
||||
@@ -2261,7 +2295,7 @@ msgstr "Edit"
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2289,7 +2323,7 @@ msgstr "Delete"
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2320,7 +2354,7 @@ msgstr "Are you sure?"
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2343,7 +2377,7 @@ msgstr "You won't be able to revert this!"
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2436,7 +2470,15 @@ msgstr "Edit account"
|
||||
msgid "Is Asset"
|
||||
msgstr "Is Asset"
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
#, fuzzy
|
||||
msgid "No accounts"
|
||||
msgstr "No accounts"
|
||||
@@ -2508,7 +2550,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"
|
||||
@@ -2537,38 +2579,44 @@ msgid "Select"
|
||||
msgstr "Select"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
#, fuzzy
|
||||
msgid "Controlled by account"
|
||||
msgstr "No category"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
#, fuzzy
|
||||
msgid "Controlled by category"
|
||||
msgstr "No category"
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#, fuzzy
|
||||
#| msgid "Add quick transaction"
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Agregar transacción rápida"
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
#, fuzzy
|
||||
msgid "Duplicate"
|
||||
@@ -3105,7 +3153,7 @@ 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"
|
||||
@@ -3265,28 +3313,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"
|
||||
|
||||
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-08 02:41+0000\n"
|
||||
"PO-Revision-Date: 2025-08-08 06:17+0000\n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+0000\n"
|
||||
"PO-Revision-Date: 2025-08-16 11: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/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Labels"
|
||||
@@ -172,7 +172,7 @@ msgstr ""
|
||||
"Gearchiveerde rekeningen worden niet weergegeven en tellen niet mee voor je "
|
||||
"\"Netto Waarde\""
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -186,7 +186,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Rekening"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: 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
|
||||
@@ -198,7 +198,7 @@ msgstr "Rekening"
|
||||
msgid "Accounts"
|
||||
msgstr "Rekeningen"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr ""
|
||||
"Eenheid wisselgeld kan niet dezelfde zijn als de munteenheid van de rekening."
|
||||
@@ -235,7 +235,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Rekeninggroep succesvol verwijderd"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -260,6 +260,14 @@ msgstr "Rekening succesvol bijgewerkt"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Rekening succesvol verwijderd"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr "Account wordt nu bijgehouden"
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr "Account wordt nu niet meer bijgehouden"
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Saldi afstemming"
|
||||
@@ -309,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"
|
||||
|
||||
@@ -355,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"
|
||||
|
||||
@@ -450,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"
|
||||
|
||||
@@ -556,27 +565,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
|
||||
@@ -585,31 +594,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."
|
||||
@@ -617,11 +626,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."
|
||||
@@ -630,33 +639,33 @@ msgstr ""
|
||||
"opgehaald voor de munteenheid van elke rekening ten opzichte van de "
|
||||
"ingestelde wisselkoers."
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#, fuzzy
|
||||
#| msgid "Edit exchange rate"
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Wisselkoers bewerken"
|
||||
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')."
|
||||
@@ -664,7 +673,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."
|
||||
@@ -840,7 +849,7 @@ 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
|
||||
msgid "Categories"
|
||||
@@ -848,7 +857,7 @@ 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
|
||||
@@ -856,6 +865,7 @@ msgstr "Categorieën"
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Bedrijven"
|
||||
|
||||
@@ -923,7 +933,7 @@ msgstr "Bewerk verrichtingsactie"
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Bewerk of maak verrichtingsregel acties"
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1024,10 +1034,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"
|
||||
|
||||
@@ -1287,7 +1297,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
|
||||
@@ -1302,26 +1312,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"
|
||||
@@ -1427,7 +1458,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"
|
||||
@@ -1439,7 +1470,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"
|
||||
|
||||
@@ -1795,19 +1826,19 @@ msgstr "Deze gebruiker is gedeactiveerd"
|
||||
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 "
|
||||
@@ -1818,19 +1849,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."
|
||||
@@ -1838,7 +1869,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."
|
||||
@@ -1846,35 +1877,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."
|
||||
|
||||
@@ -1994,7 +2025,7 @@ msgstr "Bewerken"
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2021,7 +2052,7 @@ msgstr "Verwijderen"
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2051,7 +2082,7 @@ msgstr "Weet je het zeker?"
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2073,7 +2104,7 @@ msgstr "Je kunt dit niet meer terugdraaien!"
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2154,7 +2185,15 @@ msgstr "Rekening bewerken"
|
||||
msgid "Is Asset"
|
||||
msgstr "Is Vermogen"
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr "Gevolgd"
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr "Niet gevolgd"
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr "Geen rekeningen"
|
||||
|
||||
@@ -2212,7 +2251,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"
|
||||
|
||||
@@ -2236,35 +2275,40 @@ msgid "Select"
|
||||
msgstr "Selecteer"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr "Toon op samenvattingen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
msgid "Controlled by account"
|
||||
msgstr "Gecontroleerd door account"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr "Gecontroleerd door categorie"
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr "Verbergen in samenvattingen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Toevoegen als snelle transactie"
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr "Ga naar vorige maand"
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr "Ga naar volgende maand"
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr "Ga naar vandaag"
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliceren"
|
||||
@@ -2706,7 +2750,7 @@ 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"
|
||||
@@ -2844,7 +2888,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"
|
||||
@@ -2852,20 +2896,28 @@ 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
|
||||
#, 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 ""
|
||||
"Transactiebedragen die gekoppeld zijn aan meerdere tags 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"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+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/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
"Contas arquivadas não aparecem nem contam para o seu patrimônio líquido"
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -185,7 +185,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Conta"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: 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
|
||||
@@ -197,7 +197,7 @@ msgstr "Conta"
|
||||
msgid "Accounts"
|
||||
msgstr "Contas"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr "A moeda de câmbio não pode ser a mesma que a moeda principal da conta."
|
||||
|
||||
@@ -233,7 +233,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Grupo de Conta apagado com sucesso"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -258,6 +258,14 @@ msgstr "Conta atualizada com sucesso"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Conta apagada com sucesso"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Reconciliação do saldo"
|
||||
@@ -309,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"
|
||||
|
||||
@@ -355,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"
|
||||
|
||||
@@ -450,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"
|
||||
|
||||
@@ -556,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
|
||||
@@ -585,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."
|
||||
@@ -617,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."
|
||||
@@ -630,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
|
||||
#, 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')."
|
||||
@@ -665,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."
|
||||
@@ -840,7 +849,7 @@ 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
|
||||
msgid "Categories"
|
||||
@@ -848,7 +857,7 @@ 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
|
||||
@@ -856,6 +865,7 @@ msgstr "Categorias"
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entidades"
|
||||
|
||||
@@ -923,7 +933,7 @@ msgstr "Ação de editar de transação"
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Ações de atualizar ou criar transação"
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1024,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"
|
||||
|
||||
@@ -1287,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
|
||||
@@ -1302,26 +1312,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"
|
||||
@@ -1430,7 +1467,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"
|
||||
@@ -1442,7 +1479,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"
|
||||
|
||||
@@ -1808,19 +1845,19 @@ msgstr "Essa conta está desativada"
|
||||
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 "
|
||||
@@ -1831,61 +1868,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."
|
||||
@@ -2007,7 +2044,7 @@ msgstr "Editar"
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2034,7 +2071,7 @@ msgstr "Apagar"
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2064,7 +2101,7 @@ msgstr "Tem certeza?"
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2086,7 +2123,7 @@ msgstr "Você não será capaz de reverter isso!"
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2167,7 +2204,15 @@ msgstr "Editar conta"
|
||||
msgid "Is Asset"
|
||||
msgstr "É ativo"
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr "Nenhuma conta"
|
||||
|
||||
@@ -2225,7 +2270,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"
|
||||
|
||||
@@ -2249,39 +2294,46 @@ msgid "Select"
|
||||
msgstr "Selecionar"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
#, fuzzy
|
||||
#| msgid "No category"
|
||||
msgid "Controlled by account"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
#, fuzzy
|
||||
#| msgid "No category"
|
||||
msgid "Controlled by category"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#, fuzzy
|
||||
#| msgid "Add recurring transaction"
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Adicionar transação recorrente"
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicar"
|
||||
@@ -2725,7 +2777,7 @@ 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"
|
||||
@@ -2863,28 +2915,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"
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"PO-Revision-Date: 2025-08-08 04:17+0000\n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+0000\n"
|
||||
"PO-Revision-Date: 2025-08-16 04: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/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
"Contas arquivadas não aparecem nem contam para o seu patrimônio líquido"
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -185,7 +185,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Conta"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: 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
|
||||
@@ -197,7 +197,7 @@ msgstr "Conta"
|
||||
msgid "Accounts"
|
||||
msgstr "Contas"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr "A moeda de câmbio não pode ser a mesma que a moeda principal da conta."
|
||||
|
||||
@@ -233,7 +233,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Grupo de Conta apagado com sucesso"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -258,6 +258,14 @@ msgstr "Conta atualizada com sucesso"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Conta apagada com sucesso"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr "A conta agora está sendo acompanhada"
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr "A conta agora não está mais sendo acompanhada"
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Reconciliação do saldo"
|
||||
@@ -307,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"
|
||||
|
||||
@@ -353,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"
|
||||
|
||||
@@ -448,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"
|
||||
|
||||
@@ -554,27 +563,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
|
||||
@@ -583,31 +592,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."
|
||||
@@ -615,11 +624,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."
|
||||
@@ -628,34 +637,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')."
|
||||
@@ -663,7 +672,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."
|
||||
@@ -838,7 +847,7 @@ 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
|
||||
msgid "Categories"
|
||||
@@ -846,7 +855,7 @@ 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
|
||||
@@ -854,6 +863,7 @@ msgstr "Categorias"
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entidades"
|
||||
|
||||
@@ -921,7 +931,7 @@ msgstr "Ação de editar de transação"
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Ações de atualizar ou criar transação"
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1022,10 +1032,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"
|
||||
|
||||
@@ -1285,7 +1295,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
|
||||
@@ -1300,26 +1310,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"
|
||||
@@ -1424,7 +1455,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"
|
||||
@@ -1436,7 +1467,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"
|
||||
|
||||
@@ -1792,19 +1823,19 @@ msgstr "Essa conta está desativada"
|
||||
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 "
|
||||
@@ -1815,19 +1846,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."
|
||||
@@ -1835,7 +1866,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."
|
||||
@@ -1843,37 +1874,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."
|
||||
|
||||
@@ -1993,7 +2024,7 @@ msgstr "Editar"
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2020,7 +2051,7 @@ msgstr "Apagar"
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2050,7 +2081,7 @@ msgstr "Tem certeza?"
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2072,7 +2103,7 @@ msgstr "Você não será capaz de reverter isso!"
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2153,7 +2184,15 @@ msgstr "Editar conta"
|
||||
msgid "Is Asset"
|
||||
msgstr "É ativo"
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr "Acompanhar"
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr "Parar de acompanhar"
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr "Nenhuma conta"
|
||||
|
||||
@@ -2211,7 +2250,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"
|
||||
|
||||
@@ -2235,35 +2274,40 @@ msgid "Select"
|
||||
msgstr "Selecionar"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr "Mostrar nos sumários"
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
msgid "Controlled by account"
|
||||
msgstr "Controlado pela conta"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr "Controlado pela categoria"
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr "Esconder dos sumários"
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Adicionar como transação rápida"
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr "Mover para o mês anterior"
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr "Mover para o mês seguinte"
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr "Mover para hoje"
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicar"
|
||||
@@ -2707,7 +2751,7 @@ 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"
|
||||
@@ -2843,7 +2887,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"
|
||||
@@ -2851,20 +2895,28 @@ 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
|
||||
#, 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 ""
|
||||
"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: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"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+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/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
@@ -168,7 +168,7 @@ msgstr ""
|
||||
msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -182,7 +182,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: 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
|
||||
@@ -194,7 +194,7 @@ msgstr ""
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr ""
|
||||
|
||||
@@ -230,7 +230,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -255,6 +255,14 @@ msgstr ""
|
||||
msgid "Account deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr ""
|
||||
@@ -304,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 ""
|
||||
|
||||
@@ -345,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 ""
|
||||
|
||||
@@ -440,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 ""
|
||||
|
||||
@@ -546,27 +555,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
|
||||
@@ -575,77 +584,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."
|
||||
@@ -818,7 +827,7 @@ 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
|
||||
msgid "Categories"
|
||||
@@ -826,7 +835,7 @@ 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
|
||||
@@ -834,6 +843,7 @@ msgstr ""
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
@@ -901,7 +911,7 @@ msgstr ""
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1000,10 +1010,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 ""
|
||||
|
||||
@@ -1261,7 +1271,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
|
||||
@@ -1276,26 +1286,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 ""
|
||||
@@ -1395,7 +1426,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 ""
|
||||
@@ -1407,7 +1438,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 ""
|
||||
|
||||
@@ -1763,19 +1794,19 @@ msgstr ""
|
||||
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 "
|
||||
@@ -1783,59 +1814,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 ""
|
||||
|
||||
@@ -1955,7 +1986,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -1982,7 +2013,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2012,7 +2043,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2034,7 +2065,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2115,7 +2146,15 @@ msgstr ""
|
||||
msgid "Is Asset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -2173,7 +2212,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,35 +2236,40 @@ msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
msgid "Controlled by account"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
@@ -2666,7 +2710,7 @@ 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 ""
|
||||
@@ -2800,26 +2844,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 ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+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/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Мітки"
|
||||
@@ -172,7 +172,7 @@ msgstr ""
|
||||
"Заархівовані рахунки не відображаються і не враховуються у вашій чистій "
|
||||
"вартості"
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -186,7 +186,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Рахунок"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: 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
|
||||
@@ -198,7 +198,7 @@ msgstr "Рахунок"
|
||||
msgid "Accounts"
|
||||
msgstr "Рахунки"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr "Валюта обміну не може збігатися з основною валютою рахунку."
|
||||
|
||||
@@ -234,7 +234,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Групу рахунків успішно видалено"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -259,6 +259,14 @@ msgstr "Рахунок успішно оновлено"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Рахунок успішно видалено"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Звірка балансу"
|
||||
@@ -310,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 "Помилка створення нового екземпляра"
|
||||
|
||||
@@ -356,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 "Зберегти"
|
||||
|
||||
@@ -455,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 "Сьогодні"
|
||||
|
||||
@@ -561,27 +570,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
|
||||
@@ -590,79 +599,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."
|
||||
@@ -835,7 +844,7 @@ 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
|
||||
msgid "Categories"
|
||||
@@ -843,7 +852,7 @@ 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
|
||||
@@ -851,6 +860,7 @@ msgstr ""
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
@@ -918,7 +928,7 @@ msgstr ""
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1017,10 +1027,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 ""
|
||||
|
||||
@@ -1278,7 +1288,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
|
||||
@@ -1293,26 +1303,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 ""
|
||||
@@ -1412,7 +1445,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 ""
|
||||
@@ -1424,7 +1457,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 ""
|
||||
|
||||
@@ -1782,19 +1815,19 @@ msgstr ""
|
||||
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 "
|
||||
@@ -1802,59 +1835,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 ""
|
||||
|
||||
@@ -1974,7 +2007,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2001,7 +2034,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2031,7 +2064,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2053,7 +2086,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2134,7 +2167,15 @@ msgstr ""
|
||||
msgid "Is Asset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -2192,7 +2233,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 ""
|
||||
|
||||
@@ -2216,35 +2257,40 @@ msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
msgid "Controlled by account"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
@@ -2685,7 +2731,7 @@ 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 ""
|
||||
@@ -2819,26 +2865,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 ""
|
||||
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -138,8 +138,8 @@
|
||||
|
||||
<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">
|
||||
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">
|
||||
<!-- Header -->
|
||||
<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">
|
||||
@@ -155,7 +155,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: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] 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 +261,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">
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user