mirror of
https://github.com/spiral-project/ihatemoney.git
synced 2025-05-05 20:51:49 +02:00
Merge remote-tracking branch 'upstream/master' into pr/Andrew-Dickinson/587-1
This commit is contained in:
commit
4fcce0ecb2
61 changed files with 2215 additions and 1256 deletions
16
.github/dependabot.yml
vendored
Normal file
16
.github/dependabot.yml
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: pip
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
time: "04:00"
|
||||
open-pull-requests-limit: 10
|
||||
target-branch: master
|
||||
allow:
|
||||
- dependency-type: direct
|
||||
- dependency-type: indirect
|
||||
ignore:
|
||||
- dependency-name: sphinx
|
||||
versions:
|
||||
- 3.5.0
|
76
.github/workflows/test-docs.yml
vendored
Normal file
76
.github/workflows/test-docs.yml
vendored
Normal file
|
@ -0,0 +1,76 @@
|
|||
name: Test & Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Use postgresql and MariaDB versions of Debian buster
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:11
|
||||
ports:
|
||||
- 5432:5432
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: ihatemoney
|
||||
POSTGRES_DB: ihatemoney_ci
|
||||
options:
|
||||
--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
||||
mariadb:
|
||||
image: mariadb:10.3
|
||||
env:
|
||||
MARIADB_ROOT_PASSWORD: ihatemoney
|
||||
MARIADB_DATABASE: ihatemoney_ci
|
||||
options: >-
|
||||
--health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
ports:
|
||||
- 3306:3306
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python-version: [3.6, 3.7, 3.8, 3.9]
|
||||
database: [sqlite]
|
||||
# Test other databases only with one version of Python (Debian buster has 3.7)
|
||||
include:
|
||||
- python-version: 3.7
|
||||
database: postgresql
|
||||
- python-version: 3.7
|
||||
database: mariadb
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install tox
|
||||
# Run tox using the version of Python in `PATH`
|
||||
- name: Run Tox with sqlite
|
||||
run: tox -e py
|
||||
if: matrix.database == 'sqlite'
|
||||
env:
|
||||
TESTING_SQLALCHEMY_DATABASE_URI: 'sqlite:///budget.db'
|
||||
- name: Run Tox with postgresql
|
||||
run: tox -e py
|
||||
if: matrix.database == 'postgresql'
|
||||
env:
|
||||
TESTING_SQLALCHEMY_DATABASE_URI: 'postgresql+psycopg2://postgres:ihatemoney@localhost:5432/ihatemoney_ci'
|
||||
- name: Run Tox with mariadb
|
||||
run: tox -e py
|
||||
if: matrix.database == 'mariadb'
|
||||
env:
|
||||
TESTING_SQLALCHEMY_DATABASE_URI: 'mysql+pymysql://root:ihatemoney@localhost:3306/ihatemoney_ci'
|
||||
- name: Run Lint & Docs
|
||||
run: tox -e lint_docs
|
||||
if: matrix.python-version == '3.8'
|
|
@ -11,6 +11,8 @@ Breaking changes
|
|||
|
||||
- Drop support for Python 2 (#483)
|
||||
- Drop support for Python 3.5 (#571)
|
||||
- Drop support for MySQL (#743)
|
||||
- Require MariaDB version 10.3.2 or above (#632)
|
||||
|
||||
The minimum supported version is now Python 3.6
|
||||
|
||||
|
|
2
Makefile
2
Makefile
|
@ -38,7 +38,7 @@ update: remove-install-stamp install ## Update the dependencies
|
|||
.PHONY: serve
|
||||
serve: install ## Run the ihatemoney server
|
||||
@echo 'Running ihatemoney on http://localhost:5000'
|
||||
$(PYTHON) -m ihatemoney.manage runserver
|
||||
$(PYTHON) -m ihatemoney.manage run
|
||||
|
||||
.PHONY: test
|
||||
test: install-dev ## Run the tests
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
I hate money
|
||||
############
|
||||
|
||||
.. image:: https://travis-ci.org/spiral-project/ihatemoney.svg?branch=master
|
||||
:target: https://travis-ci.org/spiral-project/ihatemoney
|
||||
:alt: Travis CI Build Status
|
||||
.. image:: https://github.com/spiral-project/ihatemoney/actions/workflows/test-docs.yml/badge.svg
|
||||
:target: https://github.com/spiral-project/ihatemoney/actions/workflows/test-docs.yml
|
||||
:alt: GitHub Actions Status
|
||||
|
||||
.. image:: https://hosted.weblate.org/widgets/i-hate-money/-/i-hate-money/svg-badge.svg
|
||||
:target: https://hosted.weblate.org/engage/i-hate-money/?utm_source=widget
|
||||
|
@ -30,7 +30,7 @@ Requirements
|
|||
============
|
||||
|
||||
* **Python**: version 3.6 to 3.9.
|
||||
* **Backends**: MySQL, PostgreSQL, SQLite, Memory.
|
||||
* **Backends**: SQLite, PostgreSQL, MariaDB (version 10.3.2 or above), Memory.
|
||||
|
||||
Contributing
|
||||
============
|
||||
|
|
14
SECURITY.md
Normal file
14
SECURITY.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 5.0.x | :heavy_check_mark: |
|
||||
| 4.1.x | :heavy_check_mark: |
|
||||
| <= 4.0 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
In order to report a vulnerability, you can either join the IRC channel `#ihatemoney` on libera.chat and ping active users available for a private message,
|
||||
or write an email to bugs-ihatemoney “@” antipoul.fr This email address is an alias, so you can expect an answer from another address.
|
|
@ -24,7 +24,11 @@ format used can be found on `the SQLAlchemy documentation`_.
|
|||
``sqlite:///home/ihatemoney/ihatemoney.db``. Do *not* store it under
|
||||
``/tmp`` as this folder is cleared at each boot.
|
||||
|
||||
If you're using PostgreSQL, Your client must use utf8. Unfortunately,
|
||||
For example, if you're using MariaDB, use a configuration similar to the following::
|
||||
|
||||
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://user:pass@localhost/dbname'
|
||||
|
||||
If you're using PostgreSQL, your client must use utf8. Unfortunately,
|
||||
PostgreSQL default is to use ASCII. Either change your client settings,
|
||||
or specify the encoding by appending ``?client_encoding=utf8`` to the
|
||||
connection string. This will look like::
|
||||
|
|
|
@ -195,7 +195,7 @@ its source is located inside the `docs folder
|
|||
|
||||
Install doc dependencies (within the virtual environment, if any)::
|
||||
|
||||
pip install -r docs/requirements.txt
|
||||
pip install -e .[doc]
|
||||
|
||||
And to produce a HTML doc in the `docs/_output` folder::
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ It keeps track of who bought what, when, and for whom; and helps to settle the
|
|||
bills.
|
||||
|
||||
I hate money is written in python, using the `flask <https://palletsprojects.com/p/flask/>`_
|
||||
framework. It's developped with ease of use in mind, and is trying to
|
||||
framework. It's developed with ease of use in mind, and is trying to
|
||||
keep things simple. Hope you (will) like it!
|
||||
|
||||
Table of contents
|
||||
|
|
|
@ -20,7 +20,7 @@ Requirements
|
|||
«Ihatemoney» depends on:
|
||||
|
||||
* **Python**: version 3.6 to 3.9 included will work.
|
||||
* **A Backend**: to choose among MySQL, PostgreSQL, SQLite or Memory.
|
||||
* **A Backend**: to choose among SQLite, PostgreSQL, MariaDB (>= 10.3.2) or Memory.
|
||||
* **Virtual environment** (recommended): `python3-venv` package under Debian/Ubuntu.
|
||||
|
||||
We recommend to use `virtual environment <https://docs.python.org/3/tutorial/venv.html>`_ but
|
||||
|
@ -61,14 +61,14 @@ Test it
|
|||
|
||||
Once installed, you can start a test server::
|
||||
|
||||
ihatemoney runserver
|
||||
ihatemoney run
|
||||
|
||||
And point your browser at `http://localhost:5000 <http://localhost:5000>`_.
|
||||
|
||||
Configure database with MySQL/MariaDB (optional)
|
||||
Configure database with MariaDB (optional)
|
||||
================================================
|
||||
|
||||
.. note:: Only required if you use MySQL/MariaDB.
|
||||
.. note:: Only required if you use MariaDB. Make sure to use MariaDB 10.3.2 or newer.
|
||||
|
||||
1. Install PyMySQL dependencies. On Debian or Ubuntu, that would be::
|
||||
|
||||
|
@ -184,7 +184,7 @@ Install Gunicorn::
|
|||
Obviously, adapt the ``ExecStart`` path for your installation folder.
|
||||
|
||||
If you use SQLite as database: remove mentions of ``postgresql.service`` in ``ihatemoney.service``.
|
||||
If you use MySQL or MariaDB as database: replace mentions of ``postgresql.service`` by ``mysql.service`` or ``mariadb.service`` in ``ihatemoney.service``.
|
||||
If you use MariaDB as database: replace mentions of ``postgresql.service`` by ``mariadb.service`` in ``ihatemoney.service``.
|
||||
|
||||
Then reload systemd, enable and start ``ihatemoney``::
|
||||
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
Sphinx==3.5.3
|
||||
docutils==0.17
|
|
@ -57,7 +57,7 @@ If you were running IHateMoney using Python < 3.6, you must, **before** upgradin
|
|||
or several of the following deployment options :
|
||||
|
||||
- Gunicorn (Nginx)
|
||||
- MySQL
|
||||
- MariaDB
|
||||
- PostgreSQL
|
||||
|
||||
If so, pick the ``pip`` commands to use in the relevant section(s) of
|
||||
|
@ -65,6 +65,30 @@ If so, pick the ``pip`` commands to use in the relevant section(s) of
|
|||
|
||||
Then follow :ref:`general-procedure` from step 1. in order to complete the update.
|
||||
|
||||
Switch to MariaDB >= 10.3.2 instead of MySQL
|
||||
++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
.. note:: If you are using SQLite or PostgreSQL, you can skip this section, no
|
||||
special action is required.
|
||||
|
||||
If you were running IHateMoney with MySQL, you must switch to MariaDB.
|
||||
MySQL is no longer a supported database option.
|
||||
|
||||
In addition, the minimum supported version of MariaDB is 10.3.2.
|
||||
See `this MySQL / MariaDB issue <https://github.com/spiral-project/ihatemoney/issues/632>`_
|
||||
for details.
|
||||
|
||||
To upgrade:
|
||||
|
||||
1. Ensure you have a MariaDB server installed and configured, and that its
|
||||
version is at least 10.3.2.
|
||||
|
||||
2. Copy your database from MySQL to MariaDB.
|
||||
|
||||
3. Ensure that IHateMoney is correctly configured to use your MariaDB database,
|
||||
see :ref:`configuration`.
|
||||
|
||||
Then follow :ref:`general-procedure` from step 1. in order to complete the update.
|
||||
|
||||
2.x → 3.x
|
||||
---------
|
||||
|
|
|
@ -69,7 +69,7 @@ class ProjectHandler(Resource):
|
|||
return "DELETED"
|
||||
|
||||
def put(self, project):
|
||||
form = EditProjectForm(meta={"csrf": False})
|
||||
form = EditProjectForm(id=project.id, meta={"csrf": False})
|
||||
if form.validate() and current_app.config.get("ALLOW_PUBLIC_PROJECT_CREATION"):
|
||||
form.update(project)
|
||||
db.session.commit()
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
from datetime import datetime
|
||||
from re import match
|
||||
from types import SimpleNamespace
|
||||
|
||||
import email_validator
|
||||
from flask import request
|
||||
from flask_babel import lazy_gettext as _
|
||||
from flask_wtf.file import FileAllowed, FileField, FileRequired
|
||||
from flask_wtf.form import FlaskForm
|
||||
from jinja2 import Markup
|
||||
from markupsafe import Markup
|
||||
from werkzeug.security import check_password_hash, generate_password_hash
|
||||
from wtforms.fields.core import Label, SelectField, SelectMultipleField
|
||||
from wtforms.fields.html5 import DateField, DecimalField, URLField
|
||||
|
@ -44,7 +45,7 @@ def get_billform_for(project, set_default=True, **kwargs):
|
|||
|
||||
"""
|
||||
form = BillForm(**kwargs)
|
||||
if form.original_currency.data == "None":
|
||||
if form.original_currency.data is None:
|
||||
form.original_currency.data = project.default_currency
|
||||
|
||||
show_no_currency = form.original_currency.data == CurrencyConverter.no_currency
|
||||
|
@ -102,7 +103,11 @@ class CalculatorStringField(StringField):
|
|||
|
||||
class EditProjectForm(FlaskForm):
|
||||
name = StringField(_("Project name"), validators=[DataRequired()])
|
||||
password = StringField(_("Private code"), validators=[DataRequired()])
|
||||
# If empty -> don't change the password
|
||||
password = PasswordField(
|
||||
_("New private code"),
|
||||
description=_("Enter a new code if you want to change it"),
|
||||
)
|
||||
contact_email = StringField(_("Email"), validators=[DataRequired(), Email()])
|
||||
project_history = BooleanField(_("Enable project history"))
|
||||
ip_recording = BooleanField(_("Use IP tracking for project history"))
|
||||
|
@ -110,6 +115,14 @@ class EditProjectForm(FlaskForm):
|
|||
default_currency = SelectField(_("Default Currency"), validators=[DataRequired()])
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if not hasattr(self, "id"):
|
||||
# We must access the project to validate the default currency, using its id.
|
||||
# In ProjectForm, 'id' is provided, but not in this base class, so it *must*
|
||||
# be provided by callers.
|
||||
# Since id can be defined as a WTForms.StringField, we mimics it,
|
||||
# using an object that can have a 'data' attribute.
|
||||
# It defaults to empty string to ensure that query run smoothly.
|
||||
self.id = SimpleNamespace(data=kwargs.pop("id", ""))
|
||||
super().__init__(*args, **kwargs)
|
||||
self.default_currency.choices = [
|
||||
(currency_name, render_localized_currency(currency_name, detailed=True))
|
||||
|
@ -127,32 +140,36 @@ class EditProjectForm(FlaskForm):
|
|||
else:
|
||||
return LoggingMode.ENABLED
|
||||
|
||||
def save(self):
|
||||
"""Create a new project with the information given by this form.
|
||||
|
||||
Returns the created instance
|
||||
"""
|
||||
project = Project(
|
||||
name=self.name.data,
|
||||
id=self.id.data,
|
||||
password=generate_password_hash(self.password.data),
|
||||
contact_email=self.contact_email.data,
|
||||
logging_preference=self.logging_preference,
|
||||
default_currency=self.default_currency.data,
|
||||
)
|
||||
return project
|
||||
def validate_default_currency(form, field):
|
||||
project = Project.query.get(form.id.data)
|
||||
if (
|
||||
project is not None
|
||||
and field.data == CurrencyConverter.no_currency
|
||||
and project.has_multiple_currencies()
|
||||
):
|
||||
raise ValidationError(
|
||||
_(
|
||||
"This project cannot be set to 'no currency'"
|
||||
" because it contains bills in multiple currencies."
|
||||
)
|
||||
)
|
||||
|
||||
def update(self, project):
|
||||
"""Update the project with the information from the form"""
|
||||
project.name = self.name.data
|
||||
|
||||
# Only update password if changed to prevent spurious log entries
|
||||
if not check_password_hash(project.password, self.password.data):
|
||||
if (
|
||||
# Only update password if a new one is provided
|
||||
self.password.data
|
||||
# Only update password if different from the previous one,
|
||||
# to prevent spurious log entries
|
||||
and not check_password_hash(project.password, self.password.data)
|
||||
):
|
||||
project.password = generate_password_hash(self.password.data)
|
||||
|
||||
project.contact_email = self.contact_email.data
|
||||
project.logging_preference = self.logging_preference
|
||||
project.default_currency = self.default_currency.data
|
||||
project.switch_currency(self.default_currency.data)
|
||||
|
||||
return project
|
||||
|
||||
|
@ -168,16 +185,30 @@ class UploadForm(FlaskForm):
|
|||
|
||||
class ProjectForm(EditProjectForm):
|
||||
id = StringField(_("Project identifier"), validators=[DataRequired()])
|
||||
# This field overrides the one from EditProjectForm
|
||||
password = PasswordField(_("Private code"), validators=[DataRequired()])
|
||||
submit = SubmitField(_("Create the project"))
|
||||
|
||||
def save(self):
|
||||
"""Create a new project with the information given by this form.
|
||||
|
||||
Returns the created instance
|
||||
"""
|
||||
# WTForms Boolean Fields don't insert the default value when the
|
||||
# request doesn't include any value the way that other fields do,
|
||||
# so we'll manually do it here
|
||||
self.project_history.data = LoggingMode.default() != LoggingMode.DISABLED
|
||||
self.ip_recording.data = LoggingMode.default() == LoggingMode.RECORD_IP
|
||||
return super().save()
|
||||
# Create project
|
||||
project = Project(
|
||||
name=self.name.data,
|
||||
id=self.id.data,
|
||||
password=generate_password_hash(self.password.data),
|
||||
contact_email=self.contact_email.data,
|
||||
logging_preference=self.logging_preference,
|
||||
default_currency=self.default_currency.data,
|
||||
)
|
||||
return project
|
||||
|
||||
def validate_id(form, field):
|
||||
form.id.data = slugify(field.data)
|
||||
|
|
|
@ -5,8 +5,8 @@ import os
|
|||
import random
|
||||
import sys
|
||||
|
||||
from flask_migrate import Migrate, MigrateCommand
|
||||
from flask_script import Command, Manager, Option
|
||||
import click
|
||||
from flask.cli import FlaskGroup
|
||||
from werkzeug.security import generate_password_hash
|
||||
|
||||
from ihatemoney.models import Project, db
|
||||
|
@ -14,31 +14,48 @@ from ihatemoney.run import create_app
|
|||
from ihatemoney.utils import create_jinja_env
|
||||
|
||||
|
||||
class GeneratePasswordHash(Command):
|
||||
@click.group(cls=FlaskGroup, create_app=create_app)
|
||||
def cli():
|
||||
"""IHateMoney Management script"""
|
||||
|
||||
|
||||
@cli.command(
|
||||
context_settings={"ignore_unknown_options": True, "allow_extra_args": True}
|
||||
)
|
||||
@click.pass_context
|
||||
def runserver(ctx):
|
||||
"""Deprecated, use the "run" command instead"""
|
||||
click.secho(
|
||||
'"runserver" is deprecated, please use the standard "run" flask command',
|
||||
fg="red",
|
||||
)
|
||||
run = cli.get_command(ctx, "run")
|
||||
ctx.forward(run)
|
||||
|
||||
|
||||
@click.command(name="generate_password_hash")
|
||||
def password_hash():
|
||||
"""Get password from user and hash it without printing it in clear text."""
|
||||
|
||||
def run(self):
|
||||
password = getpass.getpass(prompt="Password: ")
|
||||
print(generate_password_hash(password))
|
||||
password = getpass.getpass(prompt="Password: ")
|
||||
print(generate_password_hash(password))
|
||||
|
||||
|
||||
class GenerateConfig(Command):
|
||||
def get_options(self):
|
||||
return [
|
||||
Option(
|
||||
"config_file",
|
||||
choices=[
|
||||
"ihatemoney.cfg",
|
||||
"apache-vhost.conf",
|
||||
"gunicorn.conf.py",
|
||||
"supervisord.conf",
|
||||
"nginx.conf",
|
||||
],
|
||||
)
|
||||
@click.command()
|
||||
@click.argument(
|
||||
"config_file",
|
||||
type=click.Choice(
|
||||
[
|
||||
"ihatemoney.cfg",
|
||||
"apache-vhost.conf",
|
||||
"gunicorn.conf.py",
|
||||
"supervisord.conf",
|
||||
"nginx.conf",
|
||||
]
|
||||
),
|
||||
)
|
||||
def generate_config(config_file):
|
||||
"""Generate front-end server configuration"""
|
||||
|
||||
@staticmethod
|
||||
def gen_secret_key():
|
||||
return "".join(
|
||||
[
|
||||
|
@ -49,59 +66,33 @@ class GenerateConfig(Command):
|
|||
]
|
||||
)
|
||||
|
||||
def run(self, config_file):
|
||||
env = create_jinja_env("conf-templates", strict_rendering=True)
|
||||
template = env.get_template(f"{config_file}.j2")
|
||||
env = create_jinja_env("conf-templates", strict_rendering=True)
|
||||
template = env.get_template(f"{config_file}.j2")
|
||||
|
||||
bin_path = os.path.dirname(sys.executable)
|
||||
pkg_path = os.path.abspath(os.path.dirname(__file__))
|
||||
bin_path = os.path.dirname(sys.executable)
|
||||
pkg_path = os.path.abspath(os.path.dirname(__file__))
|
||||
|
||||
print(
|
||||
template.render(
|
||||
pkg_path=pkg_path,
|
||||
bin_path=bin_path,
|
||||
sys_prefix=sys.prefix,
|
||||
secret_key=self.gen_secret_key(),
|
||||
)
|
||||
print(
|
||||
template.render(
|
||||
pkg_path=pkg_path,
|
||||
bin_path=bin_path,
|
||||
sys_prefix=sys.prefix,
|
||||
secret_key=gen_secret_key(),
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class DeleteProject(Command):
|
||||
def run(self, project_name):
|
||||
demo_project = Project.query.get(project_name)
|
||||
db.session.delete(demo_project)
|
||||
@cli.command()
|
||||
@click.argument("project_name")
|
||||
def delete_project(project_name):
|
||||
"""Delete a project"""
|
||||
project = Project.query.get(project_name)
|
||||
if project is None:
|
||||
click.secho(f'Project "{project_name}" not found', fg="red")
|
||||
else:
|
||||
db.session.delete(project)
|
||||
db.session.commit()
|
||||
|
||||
|
||||
def main():
|
||||
QUIET_COMMANDS = ("generate_password_hash", "generate-config")
|
||||
|
||||
exception = None
|
||||
backup_stderr = sys.stderr
|
||||
# Hack to divert stderr for commands generating content to stdout
|
||||
# to avoid confusing the user
|
||||
if len(sys.argv) > 1 and sys.argv[1] in QUIET_COMMANDS:
|
||||
sys.stderr = open(os.devnull, "w")
|
||||
|
||||
try:
|
||||
app = create_app()
|
||||
Migrate(app, db)
|
||||
except Exception as e:
|
||||
exception = e
|
||||
|
||||
# Restore stderr
|
||||
sys.stderr = backup_stderr
|
||||
|
||||
if exception:
|
||||
raise exception
|
||||
|
||||
manager = Manager(app)
|
||||
manager.add_command("db", MigrateCommand)
|
||||
manager.add_command("generate_password_hash", GeneratePasswordHash)
|
||||
manager.add_command("generate-config", GenerateConfig)
|
||||
manager.add_command("delete-project", DeleteProject)
|
||||
manager.run()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
cli()
|
||||
|
|
|
@ -6,7 +6,7 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Private code"
|
||||
msgid "New private code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Email"
|
||||
|
@ -21,6 +21,11 @@ msgstr ""
|
|||
msgid "Default Currency"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr ""
|
||||
|
||||
|
@ -30,6 +35,9 @@ msgstr ""
|
|||
msgid "Project identifier"
|
||||
msgstr ""
|
||||
|
||||
msgid "Private code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr ""
|
||||
|
||||
|
@ -291,6 +299,12 @@ msgstr ""
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr ""
|
||||
|
||||
msgid "Download Mobile Application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -573,12 +587,6 @@ msgstr ""
|
|||
msgid "Statistics"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
|
||||
|
@ -588,6 +596,12 @@ msgstr ""
|
|||
msgid "Start a new project"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ from sqlalchemy_continuum import make_versioned, version_class
|
|||
from sqlalchemy_continuum.plugins import FlaskPlugin
|
||||
from werkzeug.security import generate_password_hash
|
||||
|
||||
from ihatemoney.currency_convertor import CurrencyConverter
|
||||
from ihatemoney.patch_sqlalchemy_continuum import PatchedBuilder
|
||||
from ihatemoney.versioning import (
|
||||
ConditionalVersioningManager,
|
||||
|
@ -139,7 +140,7 @@ class Project(db.Model):
|
|||
"spent": sum(
|
||||
[
|
||||
bill.pay_each() * member.weight
|
||||
for bill in self.get_bills().all()
|
||||
for bill in self.get_bills_unordered().all()
|
||||
if member in bill.owers
|
||||
]
|
||||
),
|
||||
|
@ -156,7 +157,7 @@ class Project(db.Model):
|
|||
:rtype dict:
|
||||
"""
|
||||
monthly = defaultdict(lambda: defaultdict(float))
|
||||
for bill in self.get_bills().all():
|
||||
for bill in self.get_bills_unordered().all():
|
||||
monthly[bill.date.year][bill.date.month] += bill.converted_amount
|
||||
return monthly
|
||||
|
||||
|
@ -215,15 +216,31 @@ class Project(db.Model):
|
|||
|
||||
def has_bills(self):
|
||||
"""return if the project do have bills or not"""
|
||||
return self.get_bills().count() > 0
|
||||
return self.get_bills_unordered().count() > 0
|
||||
|
||||
def get_bills(self):
|
||||
"""Return the list of bills related to this project"""
|
||||
def has_multiple_currencies(self):
|
||||
"""Returns True if multiple currencies are used"""
|
||||
# It would be more efficient to do the counting in the database,
|
||||
# but this is called very rarely so we can tolerate if it's a bit
|
||||
# slow. And doing this in Python is much more readable, see #784.
|
||||
nb_currencies = len(
|
||||
set(bill.original_currency for bill in self.get_bills_unordered())
|
||||
)
|
||||
return nb_currencies > 1
|
||||
|
||||
def get_bills_unordered(self):
|
||||
"""Base query for bill list"""
|
||||
return (
|
||||
Bill.query.join(Person, Project)
|
||||
.filter(Bill.payer_id == Person.id)
|
||||
.filter(Person.project_id == Project.id)
|
||||
.filter(Project.id == self.id)
|
||||
)
|
||||
|
||||
def get_bills(self):
|
||||
"""Return the list of bills related to this project"""
|
||||
return (
|
||||
self.get_bills_unordered()
|
||||
.order_by(Bill.date.desc())
|
||||
.order_by(Bill.creation_date.desc())
|
||||
.order_by(Bill.id.desc())
|
||||
|
@ -232,11 +249,8 @@ class Project(db.Model):
|
|||
def get_member_bills(self, member_id):
|
||||
"""Return the list of bills related to a specific member"""
|
||||
return (
|
||||
Bill.query.join(Person, Project)
|
||||
.filter(Bill.payer_id == Person.id)
|
||||
.filter(Person.project_id == Project.id)
|
||||
self.get_bills_unordered()
|
||||
.filter(Person.id == member_id)
|
||||
.filter(Project.id == self.id)
|
||||
.order_by(Bill.date.desc())
|
||||
.order_by(Bill.id.desc())
|
||||
)
|
||||
|
@ -263,6 +277,41 @@ class Project(db.Model):
|
|||
)
|
||||
return pretty_bills
|
||||
|
||||
def switch_currency(self, new_currency):
|
||||
if new_currency == self.default_currency:
|
||||
return
|
||||
# Update converted currency
|
||||
if new_currency == CurrencyConverter.no_currency:
|
||||
if self.has_multiple_currencies():
|
||||
raise ValueError(f"Can't unset currency of project {self.id}")
|
||||
|
||||
for bill in self.get_bills_unordered():
|
||||
# We are removing the currency, and we already checked that all bills
|
||||
# had the same currency: it means that we can simply strip the currency
|
||||
# without converting the amounts. We basically ignore the current default_currency
|
||||
|
||||
# Reset converted amount in case it was different from the original amount
|
||||
bill.converted_amount = bill.amount
|
||||
# Strip currency
|
||||
bill.original_currency = CurrencyConverter.no_currency
|
||||
db.session.add(bill)
|
||||
else:
|
||||
for bill in self.get_bills_unordered():
|
||||
if bill.original_currency == CurrencyConverter.no_currency:
|
||||
# Bills that were created without currency will be set to the new currency
|
||||
bill.original_currency = new_currency
|
||||
bill.converted_amount = bill.amount
|
||||
else:
|
||||
# Convert amount for others, without touching original_currency
|
||||
bill.converted_amount = CurrencyConverter().exchange_currency(
|
||||
bill.amount, bill.original_currency, new_currency
|
||||
)
|
||||
db.session.add(bill)
|
||||
|
||||
self.default_currency = new_currency
|
||||
db.session.add(self)
|
||||
db.session.commit()
|
||||
|
||||
def remove_member(self, member_id):
|
||||
"""Remove a member from the project.
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ from flask import Flask, g, render_template, request, session
|
|||
from flask_babel import Babel, format_currency
|
||||
from flask_mail import Mail
|
||||
from flask_migrate import Migrate, stamp, upgrade
|
||||
from jinja2 import contextfilter
|
||||
from jinja2 import pass_context
|
||||
from werkzeug.middleware.proxy_fix import ProxyFix
|
||||
|
||||
from ihatemoney import default_settings
|
||||
|
@ -160,7 +160,7 @@ def create_app(
|
|||
|
||||
# Undocumented currencyformat filter from flask_babel is forwarding to Babel format_currency
|
||||
# We overwrite it to remove the currency sign ¤ when there is no currency
|
||||
@contextfilter
|
||||
@pass_context
|
||||
def currency(context, number, currency=None, *args, **kwargs):
|
||||
if currency is None:
|
||||
currency = context.get("g").project.default_currency
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<thead><tr><th>{{ _("Project") }}</th><th>{{ _("Number of members") }}</th><th>{{ _("Number of bills") }}</th><th>{{_("Newest bill")}}</th><th>{{_("Oldest bill")}}</th><th>{{_("Actions")}}</th></tr></thead>
|
||||
<tbody>{% for project in projects|sort(attribute='name') %}
|
||||
<tr>
|
||||
<td><a href="{{ url_for(".list_bills", project_id=project.id) }}" title="{{ project.name }}">{{ project.name }}</a></td><td>{{ project.members | count }}</td><td>{{ project.get_bills().count() }}</td>
|
||||
<td><a href="{{ url_for(".list_bills", project_id=project.id) }}" title="{{ project.name }}">{{ project.name }}</a></td><td>{{ project.members | count }}</td><td>{{ project.get_bills_unordered().count() }}</td>
|
||||
{% if project.has_bills() %}
|
||||
<td>{{ project.get_bills().all()[0].date }}</td>
|
||||
<td>{{ project.get_bills().all()[-1].date }}</td>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="form-group{% if inline %} row{% endif %}">
|
||||
{% if field.type != "SubmitField" %}
|
||||
{% if inline %}
|
||||
{{ field.label(class="col-3") }}
|
||||
{{ field.label(class="col-3 mt-2") }}
|
||||
{% else %}
|
||||
{{ field.label() }}
|
||||
{% endif %}
|
||||
|
@ -120,31 +120,38 @@
|
|||
{% if title %}<legend>{% if edit %}{{ _("Edit this bill") }} {% else %}{{ _("Add a bill") }} {% endif %}</legend>{% endif %}
|
||||
{% include "display_errors.html" %}
|
||||
{{ form.hidden_tag() }}
|
||||
{{ input(form.date, class="form-control", inline=True) }}
|
||||
{{ input(form.date, inline=True) }}
|
||||
{{ input(form.what, inline=True) }}
|
||||
{{ input(form.payer, inline=True, class="form-control custom-select") }}
|
||||
{{ input(form.amount, inline=True) }}
|
||||
{% if g.project.default_currency != "XXX" %}
|
||||
{{ input(form.original_currency, inline=True) }}
|
||||
{% endif %}
|
||||
{{ input(form.external_link, inline=True) }}
|
||||
|
||||
<div class="form-group row">
|
||||
<label class="col-3" for="payed_for">{{ _("For whom?") }}</label>
|
||||
<div class="controls col-9">
|
||||
<ul id="payed_for" class="inputs-list">
|
||||
<p><a href="#" id="selectall" onclick="selectCheckboxes(true)">{{ _("Select all") }}</a> | <a href="#" id="selectnone" onclick="selectCheckboxes(false)">{{_("Select none")}}</a></p>
|
||||
{% for key, value, checked in form.payed_for.iter_choices() | sort(attribute='1') %}
|
||||
<p class="form-check">
|
||||
<div id="payed_for" class="controls col-9">
|
||||
<p>
|
||||
<a class="badge badge-secondary" href="#" classid="selectall" onclick="selectCheckboxes(true)">{{ _("Everyone") }}</a>
|
||||
<a class="badge badge-secondary" href="#" id="selectnone" onclick="selectCheckboxes(false)">{{_("No one")}}</a>
|
||||
</p>
|
||||
<div class="d-flex flex-column flex-wrap overflow-auto" style="max-height: 20em;">
|
||||
{% for key, value, checked in form.payed_for.iter_choices() | sort(attribute='1') %}
|
||||
<p class="form-check text-break" style="max-width: 50%;">
|
||||
<label for="payed_for-{{key}}" class="form-check-label">
|
||||
<input name="payed_for" type="checkbox" {% if checked %}checked{% endif %} class="form-check-input" value="{{key}}" id="payed_for-{{key}}"/>
|
||||
<span>{{value}}</span>
|
||||
</label>
|
||||
</p>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<details class="mb-3">
|
||||
<summary class="mb-2">{{ _("More options") }}</summary>
|
||||
{% if g.project.default_currency != "XXX" %}
|
||||
{{ input(form.original_currency, inline=True, class="form-control custom-select") }}
|
||||
{% endif %}
|
||||
{{ input(form.external_link, inline=True) }}
|
||||
</details>
|
||||
</fieldset>
|
||||
<div class="actions">
|
||||
{{ form.submit(class="btn btn-primary") }}
|
||||
|
|
|
@ -42,14 +42,12 @@
|
|||
<h1><a class="navbar-brand" href="{{ url_for("main.home") }}"><span>#!</span> money?</a></h1>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarToggler">
|
||||
<ul class="navbar-nav ml-auto mr-auto">
|
||||
<ul class="navbar-nav nav-fill w-100">
|
||||
{% if g.project %}
|
||||
{% block navbar %}
|
||||
<li class="nav-item{% if current_view == 'list_bills' %} active{% endif %}"><a class="nav-link" href="{{ url_for("main.list_bills") }}">{{ _("Bills") }}</a></li>
|
||||
<li class="nav-item{% if current_view == 'settle_bill' %} active{% endif %}"><a class="nav-link" href="{{ url_for("main.settle_bill") }}">{{ _("Settle") }}</a></li>
|
||||
<li class="nav-item{% if current_view == 'statistics' %} active{% endif %}"><a class="nav-link" href="{{ url_for("main.statistics") }}">{{ _("Statistics") }}</a></li>
|
||||
<li class="nav-item{% if current_view == 'history' %} active{% endif %}"><a class="nav-link" href="{{ url_for("main.history") }}">{{ _("History") }}</a></li>
|
||||
<li class="nav-item{% if current_view == 'edit_project' %} active{% endif %}"><a class="nav-link" href="{{ url_for("main.edit_project") }}">{{ _("Settings") }}</a></li>
|
||||
{% endblock %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
@ -92,7 +90,10 @@
|
|||
{{ _("Start a new project") }}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{% if g.project %}
|
||||
<li><a class="dropdown-item" href="{{ url_for("main.history") }}">{{ _("History") }}</a></li>
|
||||
<li><a class="dropdown-item" href="{{ url_for("main.edit_project") }}">{{ _("Settings") }}</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% if session['projects'] and not ((session['projects'] | length) == 1 and g.project and session['projects'][0][0] == g.project.id) %}
|
||||
<li class="dropdown-divider"></li>
|
||||
|
|
|
@ -4,11 +4,14 @@ import json
|
|||
import re
|
||||
from time import sleep
|
||||
import unittest
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from flask import session
|
||||
import pytest
|
||||
from werkzeug.security import check_password_hash, generate_password_hash
|
||||
|
||||
from ihatemoney import models, utils
|
||||
from ihatemoney import models
|
||||
from ihatemoney.currency_convertor import CurrencyConverter
|
||||
from ihatemoney.tests.common.ihatemoney_testcase import IhatemoneyTestCase
|
||||
from ihatemoney.versioning import LoggingMode
|
||||
|
||||
|
@ -494,12 +497,9 @@ class BudgetTestCase(IhatemoneyTestCase):
|
|||
resp.data.decode("utf-8"),
|
||||
)
|
||||
# Change throttling delay
|
||||
import gc
|
||||
from ihatemoney.web import login_throttler
|
||||
|
||||
for obj in gc.get_objects():
|
||||
if isinstance(obj, utils.LoginThrottler):
|
||||
obj._delay = 0.005
|
||||
break
|
||||
login_throttler._delay = 0.005
|
||||
# Wait for delay to expire and retry logging in
|
||||
sleep(1)
|
||||
resp = self.client.post(
|
||||
|
@ -805,7 +805,8 @@ class BudgetTestCase(IhatemoneyTestCase):
|
|||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_statistics(self):
|
||||
self.post_project("raclette")
|
||||
# Output is checked with the USD sign
|
||||
self.post_project("raclette", default_currency="USD")
|
||||
|
||||
# add members
|
||||
self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2})
|
||||
|
@ -1446,6 +1447,225 @@ class BudgetTestCase(IhatemoneyTestCase):
|
|||
member = models.Person.query.filter(models.Person.id == 1).one_or_none()
|
||||
self.assertEqual(member, None)
|
||||
|
||||
def test_currency_switch(self):
|
||||
|
||||
mock_data = {"USD": 1, "EUR": 0.8, "CAD": 1.2, CurrencyConverter.no_currency: 1}
|
||||
converter = CurrencyConverter()
|
||||
converter.get_rates = MagicMock(return_value=mock_data)
|
||||
|
||||
# A project should be editable
|
||||
self.post_project("raclette")
|
||||
|
||||
# add members
|
||||
self.client.post("/raclette/members/add", data={"name": "zorglub"})
|
||||
self.client.post("/raclette/members/add", data={"name": "fred"})
|
||||
self.client.post("/raclette/members/add", data={"name": "tata"})
|
||||
|
||||
# create bills
|
||||
self.client.post(
|
||||
"/raclette/add",
|
||||
data={
|
||||
"date": "2016-12-31",
|
||||
"what": "fromage à raclette",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2, 3],
|
||||
"amount": "10.0",
|
||||
},
|
||||
)
|
||||
|
||||
self.client.post(
|
||||
"/raclette/add",
|
||||
data={
|
||||
"date": "2016-12-31",
|
||||
"what": "red wine",
|
||||
"payer": 2,
|
||||
"payed_for": [1, 3],
|
||||
"amount": "20",
|
||||
},
|
||||
)
|
||||
|
||||
self.client.post(
|
||||
"/raclette/add",
|
||||
data={
|
||||
"date": "2017-01-01",
|
||||
"what": "refund",
|
||||
"payer": 3,
|
||||
"payed_for": [2],
|
||||
"amount": "13.33",
|
||||
},
|
||||
)
|
||||
|
||||
project = models.Project.query.get("raclette")
|
||||
|
||||
# First all converted_amount should be the same as amount, with no currency
|
||||
for bill in project.get_bills():
|
||||
assert bill.original_currency == CurrencyConverter.no_currency
|
||||
assert bill.amount == bill.converted_amount
|
||||
|
||||
# Then, switch to EUR, all bills must have been changed to this currency
|
||||
project.switch_currency("EUR")
|
||||
for bill in project.get_bills():
|
||||
assert bill.original_currency == "EUR"
|
||||
assert bill.amount == bill.converted_amount
|
||||
|
||||
# Add a bill in EUR, the current default currency
|
||||
self.client.post(
|
||||
"/raclette/add",
|
||||
data={
|
||||
"date": "2017-01-01",
|
||||
"what": "refund from EUR",
|
||||
"payer": 3,
|
||||
"payed_for": [2],
|
||||
"amount": "20",
|
||||
"original_currency": "EUR",
|
||||
},
|
||||
)
|
||||
last_bill = project.get_bills().first()
|
||||
assert last_bill.converted_amount == last_bill.amount
|
||||
|
||||
# Erase all currencies
|
||||
project.switch_currency(CurrencyConverter.no_currency)
|
||||
for bill in project.get_bills():
|
||||
assert bill.original_currency == CurrencyConverter.no_currency
|
||||
assert bill.amount == bill.converted_amount
|
||||
|
||||
# Let's go back to EUR to test conversion
|
||||
project.switch_currency("EUR")
|
||||
# This is a bill in CAD
|
||||
self.client.post(
|
||||
"/raclette/add",
|
||||
data={
|
||||
"date": "2017-01-01",
|
||||
"what": "Poutine",
|
||||
"payer": 3,
|
||||
"payed_for": [2],
|
||||
"amount": "18",
|
||||
"original_currency": "CAD",
|
||||
},
|
||||
)
|
||||
last_bill = project.get_bills().first()
|
||||
expected_amount = converter.exchange_currency(last_bill.amount, "CAD", "EUR")
|
||||
assert last_bill.converted_amount == expected_amount
|
||||
|
||||
# Switch to USD. Now, NO bill should be in USD, since they already had a currency
|
||||
project.switch_currency("USD")
|
||||
for bill in project.get_bills():
|
||||
assert bill.original_currency != "USD"
|
||||
expected_amount = converter.exchange_currency(
|
||||
bill.amount, bill.original_currency, "USD"
|
||||
)
|
||||
assert bill.converted_amount == expected_amount
|
||||
|
||||
# Switching back to no currency must fail
|
||||
with pytest.raises(ValueError):
|
||||
project.switch_currency(CurrencyConverter.no_currency)
|
||||
|
||||
# It also must fails with a nice error using the form
|
||||
resp = self.client.post(
|
||||
"/raclette/edit",
|
||||
data={
|
||||
"name": "demonstration",
|
||||
"password": "demo",
|
||||
"contact_email": "demo@notmyidea.org",
|
||||
"project_history": "y",
|
||||
"default_currency": converter.no_currency,
|
||||
},
|
||||
)
|
||||
# A user displayed error should be generated, and its currency should be the same.
|
||||
self.assertStatus(200, resp)
|
||||
self.assertIn('<p class="alert alert-danger">', resp.data.decode("utf-8"))
|
||||
self.assertEqual(models.Project.query.get("raclette").default_currency, "USD")
|
||||
|
||||
def test_currency_switch_to_bill_currency(self):
|
||||
|
||||
mock_data = {"USD": 1, "EUR": 0.8, "CAD": 1.2, CurrencyConverter.no_currency: 1}
|
||||
converter = CurrencyConverter()
|
||||
converter.get_rates = MagicMock(return_value=mock_data)
|
||||
|
||||
# Default currency is 'XXX', but we should start from a project with a currency
|
||||
self.post_project("raclette", default_currency="USD")
|
||||
|
||||
# add members
|
||||
self.client.post("/raclette/members/add", data={"name": "zorglub"})
|
||||
self.client.post("/raclette/members/add", data={"name": "fred"})
|
||||
|
||||
# Bill with a different currency than project's default
|
||||
self.client.post(
|
||||
"/raclette/add",
|
||||
data={
|
||||
"date": "2016-12-31",
|
||||
"what": "fromage à raclette",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2],
|
||||
"amount": "10.0",
|
||||
"original_currency": "EUR",
|
||||
},
|
||||
)
|
||||
|
||||
project = models.Project.query.get("raclette")
|
||||
|
||||
bill = project.get_bills().first()
|
||||
assert bill.converted_amount == converter.exchange_currency(
|
||||
bill.amount, "EUR", "USD"
|
||||
)
|
||||
|
||||
# And switch project to the currency from the bill we created
|
||||
project.switch_currency("EUR")
|
||||
bill = project.get_bills().first()
|
||||
assert bill.converted_amount == bill.amount
|
||||
|
||||
def test_currency_switch_to_no_currency(self):
|
||||
|
||||
mock_data = {"USD": 1, "EUR": 0.8, "CAD": 1.2, CurrencyConverter.no_currency: 1}
|
||||
converter = CurrencyConverter()
|
||||
converter.get_rates = MagicMock(return_value=mock_data)
|
||||
|
||||
# Default currency is 'XXX', but we should start from a project with a currency
|
||||
self.post_project("raclette", default_currency="USD")
|
||||
|
||||
# add members
|
||||
self.client.post("/raclette/members/add", data={"name": "zorglub"})
|
||||
self.client.post("/raclette/members/add", data={"name": "fred"})
|
||||
|
||||
# Bills with a different currency than project's default
|
||||
self.client.post(
|
||||
"/raclette/add",
|
||||
data={
|
||||
"date": "2016-12-31",
|
||||
"what": "fromage à raclette",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2],
|
||||
"amount": "10.0",
|
||||
"original_currency": "EUR",
|
||||
},
|
||||
)
|
||||
|
||||
self.client.post(
|
||||
"/raclette/add",
|
||||
data={
|
||||
"date": "2017-01-01",
|
||||
"what": "aspirine",
|
||||
"payer": 2,
|
||||
"payed_for": [1, 2],
|
||||
"amount": "5.0",
|
||||
"original_currency": "EUR",
|
||||
},
|
||||
)
|
||||
|
||||
project = models.Project.query.get("raclette")
|
||||
|
||||
for bill in project.get_bills_unordered():
|
||||
assert bill.converted_amount == converter.exchange_currency(
|
||||
bill.amount, "EUR", "USD"
|
||||
)
|
||||
|
||||
# And switch project to no currency: amount should be equal to what was submitted
|
||||
project.switch_currency(converter.no_currency)
|
||||
no_currency_bills = [
|
||||
(bill.amount, bill.converted_amount) for bill in project.get_bills()
|
||||
]
|
||||
assert no_currency_bills == [(5.0, 5.0), (10.0, 10.0)]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import os
|
||||
|
||||
from flask_testing import TestCase
|
||||
from werkzeug.security import generate_password_hash
|
||||
|
||||
|
@ -30,7 +32,7 @@ class BaseTestCase(TestCase):
|
|||
follow_redirects=True,
|
||||
)
|
||||
|
||||
def post_project(self, name, follow_redirects=True):
|
||||
def post_project(self, name, follow_redirects=True, default_currency="XXX"):
|
||||
"""Create a fake project"""
|
||||
# create the project
|
||||
return self.client.post(
|
||||
|
@ -40,25 +42,27 @@ class BaseTestCase(TestCase):
|
|||
"id": name,
|
||||
"password": name,
|
||||
"contact_email": f"{name}@notmyidea.org",
|
||||
"default_currency": "USD",
|
||||
"default_currency": default_currency,
|
||||
},
|
||||
follow_redirects=follow_redirects,
|
||||
)
|
||||
|
||||
def create_project(self, name):
|
||||
def create_project(self, name, default_currency="XXX"):
|
||||
project = models.Project(
|
||||
id=name,
|
||||
name=str(name),
|
||||
password=generate_password_hash(name),
|
||||
contact_email=f"{name}@notmyidea.org",
|
||||
default_currency="USD",
|
||||
default_currency=default_currency,
|
||||
)
|
||||
models.db.session.add(project)
|
||||
models.db.session.commit()
|
||||
|
||||
|
||||
class IhatemoneyTestCase(BaseTestCase):
|
||||
SQLALCHEMY_DATABASE_URI = "sqlite://"
|
||||
SQLALCHEMY_DATABASE_URI = os.environ.get(
|
||||
"TESTING_SQLALCHEMY_DATABASE_URI", "sqlite://"
|
||||
)
|
||||
TESTING = True
|
||||
WTF_CSRF_ENABLED = False # Simplifies the tests.
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ class HistoryTestCase(IhatemoneyTestCase):
|
|||
"name": "demo",
|
||||
"contact_email": "demo@notmyidea.org",
|
||||
"password": "demo",
|
||||
"default_currency": "USD",
|
||||
"default_currency": "XXX",
|
||||
}
|
||||
|
||||
if logging_preference != LoggingMode.DISABLED:
|
||||
|
@ -78,7 +78,7 @@ class HistoryTestCase(IhatemoneyTestCase):
|
|||
"contact_email": "demo2@notmyidea.org",
|
||||
"password": "123456",
|
||||
"project_history": "y",
|
||||
"default_currency": "USD",
|
||||
"default_currency": "USD", # Currency changed from default
|
||||
}
|
||||
|
||||
resp = self.client.post("/demo/edit", data=new_data, follow_redirects=True)
|
||||
|
@ -103,7 +103,7 @@ class HistoryTestCase(IhatemoneyTestCase):
|
|||
resp.data.decode("utf-8").index("Project renamed "),
|
||||
resp.data.decode("utf-8").index("Project private code changed"),
|
||||
)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 4)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 5)
|
||||
self.assertNotIn("127.0.0.1", resp.data.decode("utf-8"))
|
||||
|
||||
def test_project_privacy_edit(self):
|
||||
|
@ -284,7 +284,7 @@ class HistoryTestCase(IhatemoneyTestCase):
|
|||
self.assertIn(
|
||||
"Some entries below contain IP addresses,", resp.data.decode("utf-8")
|
||||
)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 10)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 12)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 1)
|
||||
|
||||
# Generate more operations to confirm additional IP info isn't recorded
|
||||
|
@ -292,8 +292,8 @@ class HistoryTestCase(IhatemoneyTestCase):
|
|||
|
||||
resp = self.client.get("/demo/history")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 10)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 6)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 12)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 7)
|
||||
|
||||
# Clear IP Data
|
||||
resp = self.client.post("/demo/strip_ip_addresses", follow_redirects=True)
|
||||
|
@ -311,7 +311,7 @@ class HistoryTestCase(IhatemoneyTestCase):
|
|||
"Some entries below contain IP addresses,", resp.data.decode("utf-8")
|
||||
)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 0)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 16)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 19)
|
||||
|
||||
def test_logs_for_common_actions(self):
|
||||
# adds a member to this project
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# This file is only used for test case "test_default_configuration_file"
|
||||
|
||||
DEBUG = False
|
||||
SQLALCHEMY_DATABASE_URI = 'sqlite:///budget.db'
|
||||
SQLACHEMY_ECHO = DEBUG
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# This file is only used for test case "test_env_var_configuration_file"
|
||||
|
||||
DEBUG = False
|
||||
SQLALCHEMY_DATABASE_URI = 'sqlite:///budget.db'
|
||||
SQLACHEMY_ECHO = DEBUG
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
import io
|
||||
import os
|
||||
import smtplib
|
||||
import socket
|
||||
|
@ -6,10 +5,11 @@ import unittest
|
|||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from sqlalchemy import orm
|
||||
from werkzeug.security import check_password_hash
|
||||
|
||||
from ihatemoney import models
|
||||
from ihatemoney.currency_convertor import CurrencyConverter
|
||||
from ihatemoney.manage import DeleteProject, GenerateConfig, GeneratePasswordHash
|
||||
from ihatemoney.manage import delete_project, generate_config, password_hash
|
||||
from ihatemoney.run import load_configuration
|
||||
from ihatemoney.tests.common.ihatemoney_testcase import BaseTestCase, IhatemoneyTestCase
|
||||
|
||||
|
@ -33,7 +33,8 @@ class ConfigurationTestCase(BaseTestCase):
|
|||
)
|
||||
|
||||
def test_env_var_configuration_file(self):
|
||||
"""Test that settings are loaded from the specified configuration file"""
|
||||
"""Test that settings are loaded from a configuration file specified
|
||||
with an environment variable."""
|
||||
os.environ["IHATEMONEY_SETTINGS_FILE_PATH"] = os.path.join(
|
||||
__HERE__, "ihatemoney_envvar.cfg"
|
||||
)
|
||||
|
@ -42,6 +43,7 @@ class ConfigurationTestCase(BaseTestCase):
|
|||
|
||||
# Test that the specified configuration file is loaded
|
||||
# even if the default configuration file ihatemoney.cfg exists
|
||||
# in the current directory.
|
||||
os.environ["IHATEMONEY_SETTINGS_FILE_PATH"] = os.path.join(
|
||||
__HERE__, "ihatemoney_envvar.cfg"
|
||||
)
|
||||
|
@ -52,7 +54,8 @@ class ConfigurationTestCase(BaseTestCase):
|
|||
os.environ.pop("IHATEMONEY_SETTINGS_FILE_PATH", None)
|
||||
|
||||
def test_default_configuration_file(self):
|
||||
"""Test that settings are loaded from the default configuration file"""
|
||||
"""Test that settings are loaded from a configuration file if one is found
|
||||
in the current directory."""
|
||||
self.app.config.root_path = __HERE__
|
||||
load_configuration(self.app)
|
||||
self.assertEqual(self.app.config["SECRET_KEY"], "supersecret")
|
||||
|
@ -82,28 +85,23 @@ class CommandTestCase(BaseTestCase):
|
|||
- raise no exception
|
||||
- produce something non-empty
|
||||
"""
|
||||
cmd = GenerateConfig()
|
||||
for config_file in cmd.get_options()[0].kwargs["choices"]:
|
||||
with patch("sys.stdout", new=io.StringIO()) as stdout:
|
||||
cmd.run(config_file)
|
||||
print(stdout.getvalue())
|
||||
self.assertNotEqual(len(stdout.getvalue().strip()), 0)
|
||||
runner = self.app.test_cli_runner()
|
||||
for config_file in generate_config.params[0].type.choices:
|
||||
result = runner.invoke(generate_config, config_file)
|
||||
self.assertNotEqual(len(result.output.strip()), 0)
|
||||
|
||||
def test_generate_password_hash(self):
|
||||
cmd = GeneratePasswordHash()
|
||||
with patch("sys.stdout", new=io.StringIO()) as stdout, patch(
|
||||
"getpass.getpass", new=lambda prompt: "secret"
|
||||
): # NOQA
|
||||
cmd.run()
|
||||
print(stdout.getvalue())
|
||||
self.assertEqual(len(stdout.getvalue().strip()), 189)
|
||||
runner = self.app.test_cli_runner()
|
||||
with patch("getpass.getpass", new=lambda prompt: "secret"):
|
||||
result = runner.invoke(password_hash)
|
||||
self.assertTrue(check_password_hash(result.output.strip(), "secret"))
|
||||
|
||||
def test_demo_project_deletion(self):
|
||||
self.create_project("demo")
|
||||
self.assertEquals(models.Project.query.get("demo").name, "demo")
|
||||
self.assertEqual(models.Project.query.get("demo").name, "demo")
|
||||
|
||||
cmd = DeleteProject()
|
||||
cmd.run("demo")
|
||||
runner = self.app.test_cli_runner()
|
||||
runner.invoke(delete_project, "demo")
|
||||
|
||||
self.assertEqual(len(models.Project.query.all()), 0)
|
||||
|
||||
|
@ -245,7 +243,7 @@ class EmailFailureTestCase(IhatemoneyTestCase):
|
|||
|
||||
class TestCurrencyConverter(unittest.TestCase):
|
||||
converter = CurrencyConverter()
|
||||
mock_data = {"USD": 1, "EUR": 0.8115}
|
||||
mock_data = {"USD": 1, "EUR": 0.8, "CAD": 1.2, CurrencyConverter.no_currency: 1}
|
||||
converter.get_rates = MagicMock(return_value=mock_data)
|
||||
|
||||
def test_only_one_instance(self):
|
||||
|
@ -254,11 +252,14 @@ class TestCurrencyConverter(unittest.TestCase):
|
|||
self.assertEqual(one, two)
|
||||
|
||||
def test_get_currencies(self):
|
||||
self.assertCountEqual(self.converter.get_currencies(), ["USD", "EUR"])
|
||||
self.assertCountEqual(
|
||||
self.converter.get_currencies(),
|
||||
["USD", "EUR", "CAD", CurrencyConverter.no_currency],
|
||||
)
|
||||
|
||||
def test_exchange_currency(self):
|
||||
result = self.converter.exchange_currency(100, "USD", "EUR")
|
||||
self.assertEqual(result, 81.15)
|
||||
self.assertEqual(result, 80.0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -1,30 +1,32 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-07-31 12:12+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-08-01 10:41+0000\n"
|
||||
"Last-Translator: Oymate <dhruboadittya96@gmail.com>\n"
|
||||
"Language-Team: Bengali (Bangladesh) <https://hosted.weblate.org/projects/"
|
||||
"i-hate-money/i-hate-money/bn_BD/>\n"
|
||||
"Language: bn_BD\n"
|
||||
"Language-Team: Bengali (Bangladesh) "
|
||||
"<https://hosted.weblate.org/projects/i-hate-money/i-hate-money/bn_BD/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
msgstr ""
|
||||
"কোন বৈধ পরিমাণ বা অভিব্যক্তি নয়। শুধুমাত্র সংখ্যা এবং + - * / অপারেটর গ্রহণ "
|
||||
"করা হয়।"
|
||||
"কোন বৈধ পরিমাণ বা অভিব্যক্তি নয়। শুধুমাত্র সংখ্যা এবং + - * / অপারেটর "
|
||||
"গ্রহণ করা হয়।"
|
||||
|
||||
msgid "Project name"
|
||||
msgstr "প্রকল্পের নাম"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "ব্যক্তিগত কোড"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -39,6 +41,11 @@ msgstr ""
|
|||
msgid "Default Currency"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr ""
|
||||
|
||||
|
@ -48,6 +55,9 @@ msgstr ""
|
|||
msgid "Project identifier"
|
||||
msgstr ""
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "ব্যক্তিগত কোড"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr ""
|
||||
|
||||
|
@ -309,6 +319,12 @@ msgstr ""
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr ""
|
||||
|
||||
msgid "Download Mobile Application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -591,12 +607,6 @@ msgstr ""
|
|||
msgid "Statistics"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
|
||||
|
@ -606,6 +616,12 @@ msgstr ""
|
|||
msgid "Start a new project"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -769,3 +785,4 @@ msgstr ""
|
|||
|
||||
msgid "Period"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2021-01-08 14:32+0000\n"
|
||||
"Last-Translator: Oliver Klimt <klimt.oliver@gmail.com>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/cs/>\n"
|
||||
"Language: cs\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/i-hate-money/i"
|
||||
"-hate-money/cs/>\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.4.1-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
msgstr ""
|
||||
"Neplatná částka nebo výraz. Pouze čísla a operátory + - * / jsou přípustná"
|
||||
msgstr "Neplatná částka nebo výraz. Pouze čísla a operátory + - * / jsou přípustná"
|
||||
|
||||
msgid "Project name"
|
||||
msgstr "Název projektu"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Přístupový kód"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -39,6 +39,11 @@ msgstr "Záznam IP adres pro historii projektu"
|
|||
msgid "Default Currency"
|
||||
msgstr "Výchozí měna"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Import exportovaného JSON souboru"
|
||||
|
||||
|
@ -48,6 +53,9 @@ msgstr "Import"
|
|||
msgid "Project identifier"
|
||||
msgstr "Identifikátor projektu"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Přístupový kód"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Vytvořit projekt"
|
||||
|
||||
|
@ -56,8 +64,8 @@ msgid ""
|
|||
"A project with this identifier (\"%(project)s\") already exists. Please "
|
||||
"choose a new identifier"
|
||||
msgstr ""
|
||||
"Projekt s tímto identifikátorem (\"%(project)s\") již existuje, zvolte nový "
|
||||
"identifikátor"
|
||||
"Projekt s tímto identifikátorem (\"%(project)s\") již existuje, zvolte "
|
||||
"nový identifikátor"
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Vstoupit"
|
||||
|
@ -311,6 +319,13 @@ msgstr ""
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr ""
|
||||
|
||||
msgid "Download Mobile Application"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Vstoupit"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -593,12 +608,6 @@ msgstr ""
|
|||
msgid "Statistics"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
|
||||
|
@ -608,6 +617,12 @@ msgstr ""
|
|||
msgid "Start a new project"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -787,3 +802,4 @@ msgstr ""
|
|||
#~ "is by the server, so don\\'t reuse"
|
||||
#~ " a personal password!"
|
||||
#~ msgstr ""
|
||||
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-11-04 17:27+0000\n"
|
||||
"Last-Translator: mdmdmdmdmd <exe_tmp@gmx.de>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/de/>\n"
|
||||
"Language: de\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/i-hate-money/i"
|
||||
"-hate-money/de/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.3.2-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -25,7 +25,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Projektname"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Privater Code"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -40,6 +41,11 @@ msgstr "IP-Tracking für Verlauf benutzen"
|
|||
msgid "Default Currency"
|
||||
msgstr "Standardwährung"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Zuvor exportierte JSON-Datei importieren"
|
||||
|
||||
|
@ -49,6 +55,9 @@ msgstr "Import"
|
|||
msgid "Project identifier"
|
||||
msgstr "Projektkennung"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Privater Code"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Projekt erstellen"
|
||||
|
||||
|
@ -326,6 +335,14 @@ msgstr "Zeigen"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "Das Dashboard ist aktuell deaktiviert."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Handy-Applikation"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Eintreten"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "Bist du sicher?"
|
||||
|
||||
|
@ -630,12 +647,6 @@ msgstr "Bilanz"
|
|||
msgid "Statistics"
|
||||
msgstr "Statistik"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Verlauf"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Sprachen"
|
||||
|
||||
|
@ -645,6 +656,12 @@ msgstr "Projekte"
|
|||
msgid "Start a new project"
|
||||
msgstr "Starte ein neues Projekt"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Verlauf"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Andere Projekte:"
|
||||
|
||||
|
@ -842,3 +859,4 @@ msgstr "Zeitraum"
|
|||
#~ " gesendet. Es wird als Klartext auf"
|
||||
#~ " dem Server gespeichert. Bitte verwenden"
|
||||
#~ " daher kein persönliches Passwort!"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1,18 +1,20 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"PO-Revision-Date: 2021-02-23 14:50+0000\n"
|
||||
"Last-Translator: Michalis <michalisntovas@yahoo.gr>\n"
|
||||
"Language-Team: Greek <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/el/>\n"
|
||||
"PO-Revision-Date: 2021-07-03 22:35+0000\n"
|
||||
"Last-Translator: Eugenia Russell <eugenia.russell2019@gmail.com>\n"
|
||||
"Language: el\n"
|
||||
"Language-Team: Greek <https://hosted.weblate.org/projects/i-hate-money/i"
|
||||
"-hate-money/el/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.5\n"
|
||||
"X-Generator: Weblate 4.8-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
|
||||
msgid ""
|
||||
|
@ -21,34 +23,43 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Project name"
|
||||
msgstr ""
|
||||
msgstr "Τίτλος εργασίας"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Ιδιωτικός κωδικός"
|
||||
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
msgstr "Ηλεκτρονικό ταχυδρομείο"
|
||||
|
||||
msgid "Enable project history"
|
||||
msgstr ""
|
||||
msgstr "Ενεργοποίηση ιστορικού έργων"
|
||||
|
||||
msgid "Use IP tracking for project history"
|
||||
msgstr ""
|
||||
msgstr "Χρήση παρακολούθησης IP για ιστορικό έργων"
|
||||
|
||||
msgid "Default Currency"
|
||||
msgstr "Προεπιλεγμένο Νόμισμα"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr ""
|
||||
msgstr "Εισαγωγή αρχείου JSON που έχει εξαχθεί προηγουμένως"
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
msgstr "Εισαγωγή"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr ""
|
||||
msgstr "Αναγνωριστικό έργου"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Ιδιωτικός κωδικός"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr ""
|
||||
msgstr "Δημιουργήστε το έργο"
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
|
@ -57,28 +68,28 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Get in"
|
||||
msgstr ""
|
||||
msgstr "Συνδεθείτε"
|
||||
|
||||
msgid "Admin password"
|
||||
msgstr ""
|
||||
msgstr "Κωδικός πρόσβασης διαχειριστή"
|
||||
|
||||
msgid "Send me the code by email"
|
||||
msgstr "Στείλε μου τον κωδικό μέσω εμάιλ"
|
||||
|
||||
msgid "This project does not exists"
|
||||
msgstr "Το πρότζεκτ αυτό δεν υπάρχει"
|
||||
msgstr "Το έργο αυτό δεν υφίσταται"
|
||||
|
||||
msgid "Password mismatch"
|
||||
msgstr "Ο κωδικός δεν ταιριάζει"
|
||||
msgstr "Ασυμφωνία κωδικού πρόσβασης"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Κωδικός"
|
||||
msgstr "Κωδικός πρόσβασης"
|
||||
|
||||
msgid "Password confirmation"
|
||||
msgstr "Επιβεβαίωση κωδικού"
|
||||
msgstr "Επιβεβαίωση κωδικού πρόσβασης"
|
||||
|
||||
msgid "Reset password"
|
||||
msgstr "Επαναφορά κωδικού"
|
||||
msgstr "Επαναφορά κωδικού πρόσβασης"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Ημερομηνία"
|
||||
|
@ -87,35 +98,37 @@ msgid "What?"
|
|||
msgstr "Τι?"
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Πληρωτής"
|
||||
msgstr "Φορέας πληρωμής"
|
||||
|
||||
msgid "Amount paid"
|
||||
msgstr "Πληρωμένο ποσό"
|
||||
msgstr "Καταβληθέν ποσό"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Νόμισμα"
|
||||
|
||||
msgid "External link"
|
||||
msgstr ""
|
||||
msgstr "Εξωτερική σύνδεση"
|
||||
|
||||
msgid "A link to an external document, related to this bill"
|
||||
msgstr ""
|
||||
"Ένας σύνδεσμος προς ένα εξωτερικό έγγραφο, που σχετίζεται με αυτόν τον "
|
||||
"λογαριασμό"
|
||||
|
||||
msgid "For whom?"
|
||||
msgstr "Για ποιόν?"
|
||||
msgstr "Για ποιον;"
|
||||
|
||||
msgid "Submit"
|
||||
msgstr "Υποβολή"
|
||||
msgstr "Yποβολή"
|
||||
|
||||
msgid "Submit and add a new one"
|
||||
msgstr "Υποβολή και προσθήκη νέου"
|
||||
|
||||
#, python-format
|
||||
msgid "Project default: %(currency)s"
|
||||
msgstr ""
|
||||
msgstr "Προεπιλογή έργου: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr ""
|
||||
msgstr "Οι λογαριασμοί δεν μπορούν να είναι μηδενικοί"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Όνομα"
|
||||
|
@ -133,17 +146,17 @@ msgid "User name incorrect"
|
|||
msgstr "Λανθασμένο όνομα χρήστη"
|
||||
|
||||
msgid "This project already have this member"
|
||||
msgstr "Το πρότζεκτ έχει ήδη αυτό το μέλος"
|
||||
msgstr "Αυτό το έργο έχει ήδη αυτό το μέλος"
|
||||
|
||||
msgid "People to notify"
|
||||
msgstr "Άτομα να ειδοποιήσεις"
|
||||
msgstr "Πρόσωπα προς ενημέρωση"
|
||||
|
||||
msgid "Send invites"
|
||||
msgstr "Στείλε πρόσκληση"
|
||||
msgstr "Αποστολή προσκλήσεων"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr ""
|
||||
msgstr "Το μήνυμα ηλεκτρονικού ταχυδρομείου %(email)s δεν είναι έγκυρο"
|
||||
|
||||
msgid "Participant"
|
||||
msgstr "Συμμέτοχος"
|
||||
|
@ -167,10 +180,10 @@ msgstr ""
|
|||
"προσπάθειες."
|
||||
|
||||
msgid "You either provided a bad token or no project identifier."
|
||||
msgstr ""
|
||||
msgstr "Είτε δώσατε ένα εσφαλμένο διακριτικό είτε δεν δώσατε αναγνωριστικό έργου."
|
||||
|
||||
msgid "This private code is not the right one"
|
||||
msgstr ""
|
||||
msgstr "Αυτός ο ιδιωτικός κωδικός δεν είναι ο σωστός"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
|
@ -183,12 +196,12 @@ msgid ""
|
|||
"We tried to send you an reminder email, but there was an error. You can "
|
||||
"still use the project normally."
|
||||
msgstr ""
|
||||
"Προσπαθήσαμε να σας στείλουμε ένα εμάιλ υπενθύμισης, αλλά υπήρξε ένα λάθος. "
|
||||
"Μπορείτε ακόμα να χρησιμοποιήσετε το πρότζεκτ κανονικά."
|
||||
"Προσπαθήσαμε να σας στείλουμε ένα εμάιλ υπενθύμισης, αλλά υπήρξε ένα "
|
||||
"λάθος. Μπορείτε ακόμα να χρησιμοποιήσετε το πρότζεκτ κανονικά."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr ""
|
||||
msgstr "Το αναγνωριστικό έργου είναι %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
|
@ -197,10 +210,10 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr ""
|
||||
msgstr "Δεν παρέχεται διακριτικό"
|
||||
|
||||
msgid "Invalid token"
|
||||
msgstr ""
|
||||
msgstr "Το διακριτικό δεν είναι έγκυρο"
|
||||
|
||||
msgid "Unknown project"
|
||||
msgstr "Άγνωστο πρότζεκτ"
|
||||
|
@ -209,17 +222,17 @@ msgid "Password successfully reset."
|
|||
msgstr "Επαναφορά του κωδικού επιτυχώς."
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
msgstr "Έργο που φορτώθηκε επιτυχώς"
|
||||
|
||||
msgid "Invalid JSON"
|
||||
msgstr ""
|
||||
msgstr "Η JSON δεν είναι έγκυρη"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "Το πρότζεκτ διαγράφηκε επιτυχώς"
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
msgstr "Έχετε κληθεί να μοιραστείτε τα έξοδά σας για %(project)s"
|
||||
|
||||
msgid "Your invitations have been sent"
|
||||
msgstr "Οι προσκλήσεις έχουν σταλθεί"
|
||||
|
@ -232,11 +245,11 @@ msgstr ""
|
|||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
msgstr ""
|
||||
msgstr "%(member)s έχει προστεθεί"
|
||||
|
||||
#, python-format
|
||||
msgid "%(name)s is part of this project again"
|
||||
msgstr ""
|
||||
msgstr "%(name)s είναι και πάλι μέρος αυτού του έργου"
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
|
@ -246,146 +259,159 @@ msgstr ""
|
|||
|
||||
#, python-format
|
||||
msgid "User '%(name)s' has been removed"
|
||||
msgstr ""
|
||||
msgstr "Ο χρήστης '%(name)s' έχει αφαιρεθεί"
|
||||
|
||||
#, python-format
|
||||
msgid "User '%(name)s' has been edited"
|
||||
msgstr ""
|
||||
msgstr "Ο χρήστης \"%(name)s\" έχει τροποποιηθεί"
|
||||
|
||||
msgid "The bill has been added"
|
||||
msgstr "Ο λογαριασμός προστέθηκε"
|
||||
|
||||
msgid "The bill has been deleted"
|
||||
msgstr ""
|
||||
msgstr "Ο λογαριασμός έχει διαγραφεί"
|
||||
|
||||
msgid "The bill has been modified"
|
||||
msgstr ""
|
||||
msgstr "Ο λογαριασμός έχει τροποποιηθεί"
|
||||
|
||||
msgid "Sorry, we were unable to find the page you've asked for."
|
||||
msgstr ""
|
||||
msgstr "Λυπούμαστε, δεν ήταν δυνατή η εύρεση της σελίδας που ζητήσατε."
|
||||
|
||||
msgid "The best thing to do is probably to get back to the main page."
|
||||
msgstr ""
|
||||
msgstr "Το καλύτερο που έχετε να κάνετε είναι να επιστρέψετε στην κεντρική σελίδα."
|
||||
|
||||
msgid "Back to the list"
|
||||
msgstr ""
|
||||
msgstr "Επιστροφή στη λίστα"
|
||||
|
||||
msgid "Administration tasks are currently disabled."
|
||||
msgstr ""
|
||||
msgstr "Οι εργασίες διαχείρισης είναι προς το παρόν απενεργοποιημένες."
|
||||
|
||||
msgid "The project you are trying to access do not exist, do you want to"
|
||||
msgstr ""
|
||||
"Το έργο στο οποίο προσπαθείτε να αποκτήσετε πρόσβαση δεν υπάρχει, θέλετε "
|
||||
"να"
|
||||
|
||||
msgid "create it"
|
||||
msgstr ""
|
||||
msgstr "δημιουργήστε αυτό"
|
||||
|
||||
msgid "?"
|
||||
msgstr ""
|
||||
msgstr ";"
|
||||
|
||||
msgid "Create a new project"
|
||||
msgstr ""
|
||||
msgstr "Δημιουργία νέου έργου"
|
||||
|
||||
msgid "Number of members"
|
||||
msgstr ""
|
||||
msgstr "Αριθμός μελών"
|
||||
|
||||
msgid "Number of bills"
|
||||
msgstr ""
|
||||
msgstr "Αριθμός λογαριασμών"
|
||||
|
||||
msgid "Newest bill"
|
||||
msgstr ""
|
||||
msgstr "Νεώτερος λογαριασμός"
|
||||
|
||||
msgid "Oldest bill"
|
||||
msgstr ""
|
||||
msgstr "Παλαιότερος λογαριασμός"
|
||||
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
msgstr "Ενέργειες"
|
||||
|
||||
msgid "edit"
|
||||
msgstr ""
|
||||
msgstr "επιμελειθήτε"
|
||||
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
msgstr "διαγραφή"
|
||||
|
||||
msgid "show"
|
||||
msgstr ""
|
||||
msgstr "εμφάνιση"
|
||||
|
||||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "Ο πίνακας ελέγχου είναι προς το παρόν απενεργοποιημένος."
|
||||
|
||||
msgid "Download Mobile Application"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Συνδεθείτε"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr ""
|
||||
msgstr "Είστε σίγουρος;"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr ""
|
||||
msgstr "Επεξεργασία έργου"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr ""
|
||||
msgstr "Εισαγωγή JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
msgstr "Επιλογή αρχείου"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr ""
|
||||
msgstr "Κατεβάστε τα δεδομένα του έργου"
|
||||
|
||||
msgid "Bill items"
|
||||
msgstr ""
|
||||
msgstr "Στοιχεία λογαριασμού"
|
||||
|
||||
msgid "Download the list of bills with owner, amount, reason,... "
|
||||
msgstr ""
|
||||
"Κατεβάστε τη λίστα των λογαριασμών με τον ιδιοκτήτη, το ποσό, την "
|
||||
"αιτία,... "
|
||||
|
||||
msgid "Settle plans"
|
||||
msgstr ""
|
||||
msgstr "Διευθέτηση σχεδίων"
|
||||
|
||||
msgid "Download the list of transactions needed to settle the current bills."
|
||||
msgstr ""
|
||||
"Κατεβάστε τη λίστα των συναλλαγών που απαιτούνται για την εξόφληση των "
|
||||
"τρεχόντων λογαριασμών."
|
||||
|
||||
msgid "Can't remember the password?"
|
||||
msgstr ""
|
||||
msgstr "Δεν μπορείτε να θυμηθείτε τον κωδικό πρόσβασης;"
|
||||
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Ακύρωση"
|
||||
|
||||
msgid "Privacy Settings"
|
||||
msgstr ""
|
||||
msgstr "Ρυθμίσεις απορρήτου"
|
||||
|
||||
msgid "Edit the project"
|
||||
msgstr ""
|
||||
msgstr "Επεξεργαστείτε το έργο"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr ""
|
||||
msgstr "Επεξεργαστείτε αυτόν τον λογαριασμό"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr ""
|
||||
msgstr "Προσθήκη λογαριασμού"
|
||||
|
||||
msgid "Select all"
|
||||
msgstr ""
|
||||
msgstr "Επιλογή όλων"
|
||||
|
||||
msgid "Select none"
|
||||
msgstr ""
|
||||
msgstr "Επιλογή κανενός"
|
||||
|
||||
msgid "Add participant"
|
||||
msgstr ""
|
||||
msgstr "Προσθήκη συμμετέχοντος"
|
||||
|
||||
msgid "Edit this member"
|
||||
msgstr ""
|
||||
msgstr "Επεξεργασία αυτού του μέλους"
|
||||
|
||||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr ""
|
||||
msgstr "Αποστολή των προσκλήσεων"
|
||||
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
msgstr "Κατεβάστε"
|
||||
|
||||
msgid "Disabled Project History"
|
||||
msgstr ""
|
||||
msgstr "Απενεργοποιημένο ιστορικό έργου"
|
||||
|
||||
msgid "Disabled Project History & IP Address Recording"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enabled Project History"
|
||||
msgstr ""
|
||||
msgstr "Ενεργοποιημένο ιστορικό έργου"
|
||||
|
||||
msgid "Disabled IP Address Recording"
|
||||
msgstr ""
|
||||
|
@ -397,16 +423,16 @@ msgid "Enabled IP Address Recording"
|
|||
msgstr ""
|
||||
|
||||
msgid "History Settings Changed"
|
||||
msgstr ""
|
||||
msgstr "Αλλαγή ρυθμίσεων ιστορικού"
|
||||
|
||||
msgid "changed"
|
||||
msgstr ""
|
||||
msgstr "μεταβολή"
|
||||
|
||||
msgid "from"
|
||||
msgstr ""
|
||||
msgstr "από"
|
||||
|
||||
msgid "to"
|
||||
msgstr ""
|
||||
msgstr "προς"
|
||||
|
||||
msgid "Confirm Remove IP Adresses"
|
||||
msgstr ""
|
||||
|
@ -419,13 +445,13 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
msgstr "Κλείστε"
|
||||
|
||||
msgid "Confirm Delete"
|
||||
msgstr ""
|
||||
msgstr "Επιβεβαίωση Διαγραφής;"
|
||||
|
||||
msgid "Delete Confirmation"
|
||||
msgstr ""
|
||||
msgstr "Επιβεβαίωση Διαγραφής"
|
||||
|
||||
msgid ""
|
||||
"Are you sure you want to erase all history for this project? This action "
|
||||
|
@ -433,16 +459,16 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Added"
|
||||
msgstr ""
|
||||
msgstr "Προστέθηκε"
|
||||
|
||||
msgid "Removed"
|
||||
msgstr ""
|
||||
msgstr "Καταργήθηκε"
|
||||
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
msgstr "και"
|
||||
|
||||
msgid "owers list"
|
||||
msgstr ""
|
||||
msgstr "λίστα οφειλών"
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
|
@ -469,25 +495,25 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
msgstr "Διαγραφή αποθηκευμένων διευθύνσεων IP"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr ""
|
||||
msgstr "Δεν υπάρχει ιστορία για διαγραφή"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr ""
|
||||
msgstr "Απαλοιφή ιστορικού έργου"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
msgstr "Δεν υπάρχουν διευθύνσεις IP προς διαγραφή"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
msgstr "Διαγραφή αποθηκευμένων διευθύνσεων IP"
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
msgstr "Ώρα"
|
||||
|
||||
msgid "Event"
|
||||
msgstr ""
|
||||
msgstr "Εκδήλωση"
|
||||
|
||||
msgid "IP address recording can be enabled on the settings page"
|
||||
msgstr ""
|
||||
|
@ -496,56 +522,56 @@ msgid "IP address recording can be disabled on the settings page"
|
|||
msgstr ""
|
||||
|
||||
msgid "From IP"
|
||||
msgstr ""
|
||||
msgstr "Από IP"
|
||||
|
||||
msgid "added"
|
||||
msgstr ""
|
||||
msgstr "προστέθηκε"
|
||||
|
||||
msgid "Project private code changed"
|
||||
msgstr ""
|
||||
msgstr "Ο ιδιωτικός κωδικός έργου άλλαξε"
|
||||
|
||||
msgid "Project renamed to"
|
||||
msgstr ""
|
||||
msgstr "Το έργο μετονομάστηκε σε"
|
||||
|
||||
msgid "Project contact email changed to"
|
||||
msgstr ""
|
||||
msgstr "Το μήνυμα ηλεκτρονικού ταχυδρομείου επικοινωνίας έργου άλλαξε σε"
|
||||
|
||||
msgid "Project settings modified"
|
||||
msgstr ""
|
||||
msgstr "Τροποποιημένες ρυθμίσεις έργου"
|
||||
|
||||
msgid "deactivated"
|
||||
msgstr ""
|
||||
msgstr "απενεργοποιήθη"
|
||||
|
||||
msgid "reactivated"
|
||||
msgstr ""
|
||||
msgstr "επανενεργοποιήθη"
|
||||
|
||||
msgid "renamed to"
|
||||
msgstr ""
|
||||
msgstr "μετονομάστηκε σε"
|
||||
|
||||
msgid "External link changed to"
|
||||
msgstr ""
|
||||
msgstr "Ο εξωτερικός σύνδεσμος άλλαξε σε"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
msgstr "Ποσό"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr ""
|
||||
msgstr "Ποσό σε %(currency)s"
|
||||
|
||||
msgid "modified"
|
||||
msgstr ""
|
||||
msgstr "τροποποιήθη"
|
||||
|
||||
msgid "removed"
|
||||
msgstr ""
|
||||
msgstr "αφαιρέθηκε"
|
||||
|
||||
msgid "changed in a unknown way"
|
||||
msgstr ""
|
||||
msgstr "άλλαξε με άγνωστο τρόπο"
|
||||
|
||||
msgid "Nothing to list"
|
||||
msgstr ""
|
||||
msgstr "Τίποτα προς καταγραφή"
|
||||
|
||||
msgid "Someone probably cleared the project history."
|
||||
msgstr ""
|
||||
msgstr "Κάποιος πιθανώς διέγραψε το ιστορικό του έργου."
|
||||
|
||||
msgid "Manage your shared <br />expenses, easily"
|
||||
msgstr ""
|
||||
|
@ -575,7 +601,7 @@ msgid "can't remember your password?"
|
|||
msgstr ""
|
||||
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
msgstr "Δημιουργία"
|
||||
|
||||
msgid ""
|
||||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
|
@ -594,12 +620,6 @@ msgstr ""
|
|||
msgid "Statistics"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
|
||||
|
@ -609,6 +629,12 @@ msgstr ""
|
|||
msgid "Start a new project"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -759,19 +785,19 @@ msgid "deactivate"
|
|||
msgstr ""
|
||||
|
||||
msgid "reactivate"
|
||||
msgstr ""
|
||||
msgstr "επανενεργοποιήστε το"
|
||||
|
||||
msgid "Paid"
|
||||
msgstr ""
|
||||
msgstr "Εξοφλήθη"
|
||||
|
||||
msgid "Spent"
|
||||
msgstr ""
|
||||
msgstr "Ξοδεύτηκε"
|
||||
|
||||
msgid "Expenses by Month"
|
||||
msgstr ""
|
||||
msgstr "Δαπάνες ανά μήνα"
|
||||
|
||||
msgid "Period"
|
||||
msgstr ""
|
||||
msgstr "Περίοδος"
|
||||
|
||||
#~ msgid "%(msg_compl)sThe project identifier is %(project)s"
|
||||
#~ msgstr ""
|
||||
|
@ -788,3 +814,4 @@ msgstr ""
|
|||
#~ "is by the server, so don\\'t reuse"
|
||||
#~ " a personal password!"
|
||||
#~ msgstr ""
|
||||
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
@ -1,30 +1,32 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-09-22 14:01+0200\n"
|
||||
"PO-Revision-Date: 2020-11-11 16:28+0000\n"
|
||||
"Last-Translator: Puyma <puyma@amyup.xyz>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/es/>\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2021-04-14 08:27+0000\n"
|
||||
"Last-Translator: fcoterroba <fcoterroba@gmail.com>\n"
|
||||
"Language: es\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/es/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.4-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
msgstr ""
|
||||
"Cantidad o expresión no válida. Solo se aceptan números y los operadores + - "
|
||||
"* /."
|
||||
"Cantidad o expresión no válida. Solo se aceptan números y los operadores "
|
||||
"+ - * /."
|
||||
|
||||
msgid "Project name"
|
||||
msgstr "Nombre del proyecto"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Código privado"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -34,11 +36,16 @@ msgid "Enable project history"
|
|||
msgstr "Habilitar historial del proyecto"
|
||||
|
||||
msgid "Use IP tracking for project history"
|
||||
msgstr ""
|
||||
msgstr "Usar trackeo IP para historial de proyecto"
|
||||
|
||||
msgid "Default Currency"
|
||||
msgstr "Moneda por defecto"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importar .JSON previamente exportado"
|
||||
|
||||
|
@ -48,6 +55,9 @@ msgstr "Importar"
|
|||
msgid "Project identifier"
|
||||
msgstr "Identificador del proyecto"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Código privado"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Crear proyecto"
|
||||
|
||||
|
@ -56,6 +66,8 @@ msgid ""
|
|||
"A project with this identifier (\"%(project)s\") already exists. Please "
|
||||
"choose a new identifier"
|
||||
msgstr ""
|
||||
"Un proyecto con este identificador (\"%(project)s\") ya existe. Elija un "
|
||||
"nuevo identificador, por favor."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr ""
|
||||
|
@ -309,6 +321,13 @@ msgstr "mostrar"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Aplicación móvil"
|
||||
|
||||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -578,8 +597,8 @@ msgid ""
|
|||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
"No reutilizes una contraseña personal. Escoge un código privado i envíalo a "
|
||||
"tus amigos"
|
||||
"No reutilizes una contraseña personal. Escoge un código privado i envíalo"
|
||||
" a tus amigos"
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr ""
|
||||
|
@ -593,12 +612,6 @@ msgstr ""
|
|||
msgid "Statistics"
|
||||
msgstr "Estadísticas"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historia"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ajustes"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Idiomas"
|
||||
|
||||
|
@ -608,6 +621,12 @@ msgstr "Proyectos"
|
|||
msgid "Start a new project"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historia"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ajustes"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Otros proyectos :"
|
||||
|
||||
|
@ -771,3 +790,4 @@ msgstr "Gastos por mes"
|
|||
|
||||
msgid "Period"
|
||||
msgstr "Período"
|
||||
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-11-11 16:28+0000\n"
|
||||
"Last-Translator: Puyma <puyma@amyup.xyz>\n"
|
||||
"Language-Team: Spanish (Latin America) <https://hosted.weblate.org/projects/"
|
||||
"i-hate-money/i-hate-money/es_419/>\n"
|
||||
"Language: es_419\n"
|
||||
"Language-Team: Spanish (Latin America) "
|
||||
"<https://hosted.weblate.org/projects/i-hate-money/i-hate-money/es_419/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.4-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -25,7 +25,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nombre del Proyecto"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Código privado"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -40,6 +41,11 @@ msgstr "Registrar la IPs para el historial del proyecto"
|
|||
msgid "Default Currency"
|
||||
msgstr "Moneda por defecto"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importar archivo JSON previamente exportado"
|
||||
|
||||
|
@ -49,6 +55,9 @@ msgstr "Importar"
|
|||
msgid "Project identifier"
|
||||
msgstr "Identificador de proyecto"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Código privado"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Crear proyecto"
|
||||
|
||||
|
@ -238,9 +247,9 @@ msgid ""
|
|||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Lo sentimos, hubo un error cuando intentamos enviarle correos de invitación. "
|
||||
"Por favor, revise la configuración de correo en el servidor o contactese con "
|
||||
"el administrador."
|
||||
"Lo sentimos, hubo un error cuando intentamos enviarle correos de "
|
||||
"invitación. Por favor, revise la configuración de correo en el servidor o"
|
||||
" contactese con el administrador."
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
|
@ -326,6 +335,14 @@ msgstr ""
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "El panel está desactivado actualmente."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Aplicación móvil"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Entrar"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "¿Estás seguro?"
|
||||
|
||||
|
@ -631,12 +648,6 @@ msgstr "Resolver"
|
|||
msgid "Statistics"
|
||||
msgstr "Estadísticas"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historial"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configuración"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Idiomas"
|
||||
|
||||
|
@ -646,6 +657,12 @@ msgstr "Proyectos"
|
|||
msgid "Start a new project"
|
||||
msgstr "Comenzar un nuevo proyecto"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historial"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configuración"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Otros proyectos :"
|
||||
|
||||
|
@ -842,3 +859,4 @@ msgstr "Período"
|
|||
#~ " tus amigos. El servidor lo almacena"
|
||||
#~ " tal cual, así que no reutilice "
|
||||
#~ "una contraseña personal!"
|
||||
|
||||
|
|
|
@ -7,18 +7,17 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2020-05-30 14:26+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-06-01 16:41+0000\n"
|
||||
"Last-Translator: Glandos <bugs-github@antipoul.fr>\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/i-hate-money/i"
|
||||
"-hate-money/fr/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.1-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -30,7 +29,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nom de projet"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Code d’accès"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -45,6 +45,11 @@ msgstr "Collecter les adresses IP dans l'historique de projet"
|
|||
msgid "Default Currency"
|
||||
msgstr "Devise par défaut"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importer un fichier JSON précédemment exporté"
|
||||
|
||||
|
@ -54,6 +59,9 @@ msgstr "Importer"
|
|||
msgid "Project identifier"
|
||||
msgstr "Identifiant du projet"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Code d’accès"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Créer le projet"
|
||||
|
||||
|
@ -330,6 +338,14 @@ msgstr "voir"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "Le tableau de bord est actuellement désactivée."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Application mobile"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Entrer"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "c’est sûr ?"
|
||||
|
||||
|
@ -624,8 +640,8 @@ msgid ""
|
|||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
"Ne réutilisez pas un de vos mots de passe. Choisissez un code personnel et "
|
||||
"envoyez le à vos amis"
|
||||
"Ne réutilisez pas un de vos mots de passe. Choisissez un code personnel "
|
||||
"et envoyez le à vos amis"
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr "Gestion de comptes"
|
||||
|
@ -639,12 +655,6 @@ msgstr "Remboursements"
|
|||
msgid "Statistics"
|
||||
msgstr "Statistiques"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historique"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Options"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Langues"
|
||||
|
||||
|
@ -654,6 +664,12 @@ msgstr "Projets"
|
|||
msgid "Start a new project"
|
||||
msgstr "Nouveau projet"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historique"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Options"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Autres projets :"
|
||||
|
||||
|
@ -1059,3 +1075,4 @@ msgstr "Période"
|
|||
#~ " vos amis et stocké en clair "
|
||||
#~ "sur le serveur. N’utilisez pas un "
|
||||
#~ "mot de passe personnel !"
|
||||
|
||||
|
|
|
@ -1,30 +1,32 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-06-12 06:46+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-06-14 14:41+0000\n"
|
||||
"Last-Translator: raghupalash <singhpalash0@gmail.com>\n"
|
||||
"Language-Team: Hindi <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/hi/>\n"
|
||||
"Language: hi\n"
|
||||
"Language-Team: Hindi <https://hosted.weblate.org/projects/i-hate-money/i"
|
||||
"-hate-money/hi/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.1-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
msgstr ""
|
||||
"वैध राशि या चिह्न नहीं। केवल संख्या और + - * / ऑपरेटरों को स्वीकार किया जाता "
|
||||
"है।"
|
||||
"वैध राशि या चिह्न नहीं। केवल संख्या और + - * / ऑपरेटरों को स्वीकार किया "
|
||||
"जाता है।"
|
||||
|
||||
msgid "Project name"
|
||||
msgstr "परियोजना का नाम"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "निजी कोड"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -39,6 +41,11 @@ msgstr "प्रोजेक्ट इतिहास के लिए IP ट
|
|||
msgid "Default Currency"
|
||||
msgstr "डिफ़ॉल्ट मुद्रा"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "पूर्व में निर्यात की गई JSON फ़ाइल आयात करें"
|
||||
|
||||
|
@ -48,6 +55,9 @@ msgstr "आयात"
|
|||
msgid "Project identifier"
|
||||
msgstr "परियोजना पहचानकर्ता"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "निजी कोड"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "परियोजना बनाएं"
|
||||
|
||||
|
@ -56,8 +66,8 @@ msgid ""
|
|||
"A project with this identifier (\"%(project)s\") already exists. Please "
|
||||
"choose a new identifier"
|
||||
msgstr ""
|
||||
"इस पहचानकर्ता के साथ एक परियोजना (\"%(project)s\") पहले से मौजूद है। कृपया "
|
||||
"एक नया पहचानकर्ता चुनें"
|
||||
"इस पहचानकर्ता के साथ एक परियोजना (\"%(project)s\") पहले से मौजूद है। "
|
||||
"कृपया एक नया पहचानकर्ता चुनें"
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "अंदर जाइये"
|
||||
|
@ -169,7 +179,8 @@ msgstr "यह व्यवस्थापक पासवर्ड सही
|
|||
|
||||
msgid "You either provided a bad token or no project identifier."
|
||||
msgstr ""
|
||||
"आपने या तो एक खराब टोकन प्रदान किया है या कोई प्रोजेक्ट पहचानकर्ता नहीं है।"
|
||||
"आपने या तो एक खराब टोकन प्रदान किया है या कोई प्रोजेक्ट पहचानकर्ता नहीं "
|
||||
"है।"
|
||||
|
||||
msgid "This private code is not the right one"
|
||||
msgstr "यह निजी कोड सही नहीं है"
|
||||
|
@ -185,8 +196,8 @@ msgid ""
|
|||
"We tried to send you an reminder email, but there was an error. You can "
|
||||
"still use the project normally."
|
||||
msgstr ""
|
||||
"हमने आपको एक अनुस्मारक ईमेल भेजने की कोशिश की, लेकिन कोई त्रुटि थी। आप अभी भी"
|
||||
" सामान्य रूप से प्रोजेक्ट का उपयोग कर सकते हैं।"
|
||||
"हमने आपको एक अनुस्मारक ईमेल भेजने की कोशिश की, लेकिन कोई त्रुटि थी। आप "
|
||||
"अभी भी सामान्य रूप से प्रोजेक्ट का उपयोग कर सकते हैं।"
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
|
@ -197,9 +208,9 @@ msgid ""
|
|||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"क्षमा करें, पासवर्ड रीसेट निर्देशों के साथ आपको एक ईमेल भेजते समय कोई त्रुटि "
|
||||
"हुई थी। कृपया सर्वर के ईमेल कॉन्फ़िगरेशन की जाँच करें या व्यवस्थापक से संपर्"
|
||||
"क करें।"
|
||||
"क्षमा करें, पासवर्ड रीसेट निर्देशों के साथ आपको एक ईमेल भेजते समय कोई "
|
||||
"त्रुटि हुई थी। कृपया सर्वर के ईमेल कॉन्फ़िगरेशन की जाँच करें या "
|
||||
"व्यवस्थापक से संपर्क करें।"
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "कोई टोकन प्रदान नहीं किया गया"
|
||||
|
@ -225,7 +236,8 @@ msgstr "प्रोजेक्ट सफलतापूर्वक हटा
|
|||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
"आपको %(project)s के लिए अपने खर्चों को साझा करने के लिए आमंत्रित किया गया है"
|
||||
"आपको %(project)s के लिए अपने खर्चों को साझा करने के लिए आमंत्रित किया गया"
|
||||
" है"
|
||||
|
||||
msgid "Your invitations have been sent"
|
||||
msgstr "आपके निमंत्रण भेज दिए गए हैं"
|
||||
|
@ -235,8 +247,8 @@ msgid ""
|
|||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"क्षमा करें, आमंत्रण ईमेल भेजने का प्रयास करते समय कोई त्रुटि हुई। कृपया सर्"
|
||||
"वर के ईमेल कॉन्फ़िगरेशन की जाँच करें या व्यवस्थापक से संपर्क करें।"
|
||||
"क्षमा करें, आमंत्रण ईमेल भेजने का प्रयास करते समय कोई त्रुटि हुई। कृपया "
|
||||
"सर्वर के ईमेल कॉन्फ़िगरेशन की जाँच करें या व्यवस्थापक से संपर्क करें।"
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
|
@ -251,8 +263,8 @@ msgid ""
|
|||
"User '%(name)s' has been deactivated. It will still appear in the users "
|
||||
"list until its balance becomes zero."
|
||||
msgstr ""
|
||||
"उपयोगकर्ता '%(name)s' को निष्क्रिय कर दिया गया है। यह तब भी उपयोगकर्ताओं की "
|
||||
"सूची में दिखाई देगा जब तक कि इसका संतुलन शून्य नहीं हो जाता।"
|
||||
"उपयोगकर्ता '%(name)s' को निष्क्रिय कर दिया गया है। यह तब भी उपयोगकर्ताओं "
|
||||
"की सूची में दिखाई देगा जब तक कि इसका संतुलन शून्य नहीं हो जाता।"
|
||||
|
||||
#, python-format
|
||||
msgid "User '%(name)s' has been removed"
|
||||
|
@ -285,8 +297,8 @@ msgstr "वर्तमान में प्रबंधन कार्य
|
|||
|
||||
msgid "The project you are trying to access do not exist, do you want to"
|
||||
msgstr ""
|
||||
"जिस प्रोजेक्ट पर आप पहुचने की कोशिश कर रहे हैं, वह मौजूद नहीं है, क्या आप यह "
|
||||
"करना चाहते हैं"
|
||||
"जिस प्रोजेक्ट पर आप पहुचने की कोशिश कर रहे हैं, वह मौजूद नहीं है, क्या आप"
|
||||
" यह करना चाहते हैं"
|
||||
|
||||
msgid "create it"
|
||||
msgstr "बनाइये"
|
||||
|
@ -324,6 +336,14 @@ msgstr "प्रदर्शन"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "डैशबोर्ड वर्तमान में निष्क्रिय है।"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "मोबाइल एप्लीकेशन"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "अंदर जाइये"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "आपको यकीन है?"
|
||||
|
||||
|
@ -429,9 +449,10 @@ msgid ""
|
|||
" The rest of the project history will be unaffected. This "
|
||||
"action cannot be undone."
|
||||
msgstr ""
|
||||
"क्या आप वाकई इस प्रोजेक्ट के सभी रिकॉर्ड किए गए IP पतों को हटाना चाहते हैं?\n"
|
||||
" परियोजना का बाकी इतिहास अप्रभावित रहेगा। इस कार्य को पूर्"
|
||||
"ववत नहीं किया जा सकता।"
|
||||
"क्या आप वाकई इस प्रोजेक्ट के सभी रिकॉर्ड किए गए IP पतों को हटाना चाहते "
|
||||
"हैं?\n"
|
||||
" परियोजना का बाकी इतिहास अप्रभावित रहेगा। इस कार्य को "
|
||||
"पूर्ववत नहीं किया जा सकता।"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "बंद करे"
|
||||
|
@ -446,8 +467,8 @@ msgid ""
|
|||
"Are you sure you want to erase all history for this project? This action "
|
||||
"cannot be undone."
|
||||
msgstr ""
|
||||
"क्या आप वाकई इस परियोजना के लिए सभी इतिहास मिटाना चाहते हैं? इस कार्य को पूर्"
|
||||
"ववत नहीं किया जा सकता।"
|
||||
"क्या आप वाकई इस परियोजना के लिए सभी इतिहास मिटाना चाहते हैं? इस कार्य को "
|
||||
"पूर्ववत नहीं किया जा सकता।"
|
||||
|
||||
msgid "Added"
|
||||
msgstr "जोड़ा गया"
|
||||
|
@ -470,8 +491,8 @@ msgid ""
|
|||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" <i>इस प्रोजेक्ट में इतिहास अक्षम है। नई कार्रवाइयां नीचे दिखाई "
|
||||
"नहीं देंगी। आप इतिहास को यहाँ से सक्षम कर सकते हैं</i>\n"
|
||||
" <i>इस प्रोजेक्ट में इतिहास अक्षम है। नई कार्रवाइयां नीचे "
|
||||
"दिखाई नहीं देंगी। आप इतिहास को यहाँ से सक्षम कर सकते हैं</i>\n"
|
||||
" <a href=\"%(url)s\">सेटिंग्स पृष्ठ</a>\n"
|
||||
" "
|
||||
|
||||
|
@ -485,18 +506,19 @@ msgid ""
|
|||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" <i>नीचे दी गई तालिका परियोजना इतिहास को अक्षम करने से पहले दर्ज "
|
||||
"की गई कार्रवाइयों को दर्शाती है। आप उन्हें हटाने के लिए\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
"target=\"#confirm-erase\">प्रोजेक्ट इतिहास हटा</a>सकते हैं।</i></p>\n"
|
||||
" <i>नीचे दी गई तालिका परियोजना इतिहास को अक्षम करने से पहले "
|
||||
"दर्ज की गई कार्रवाइयों को दर्शाती है। आप उन्हें हटाने के लिए\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">प्रोजेक्ट इतिहास हटा</a>सकते हैं।</i></p>"
|
||||
"\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
"recording disabled. "
|
||||
msgstr ""
|
||||
"नीचे कुछ प्रविष्टियों में IP पते हैं, भले ही इस परियोजना में IP रिकॉर्डिंग "
|
||||
"अक्षम है। "
|
||||
"नीचे कुछ प्रविष्टियों में IP पते हैं, भले ही इस परियोजना में IP "
|
||||
"रिकॉर्डिंग अक्षम है। "
|
||||
|
||||
msgid "Delete stored IP addresses"
|
||||
msgstr "संग्रहीत IP पते हटाएं"
|
||||
|
@ -611,8 +633,8 @@ msgid ""
|
|||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
"व्यक्तिगत पासवर्ड का पुन: उपयोग न करें। एक निजी कोड चुनें और इसे अपने दोस्तों"
|
||||
" को भेजें"
|
||||
"व्यक्तिगत पासवर्ड का पुन: उपयोग न करें। एक निजी कोड चुनें और इसे अपने "
|
||||
"दोस्तों को भेजें"
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr "खाता प्रबंधक"
|
||||
|
@ -626,12 +648,6 @@ msgstr "चुकता करें"
|
|||
msgid "Statistics"
|
||||
msgstr "आंकड़े"
|
||||
|
||||
msgid "History"
|
||||
msgstr "इतिहास"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "सेटिंग्स"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "भाषाएं"
|
||||
|
||||
|
@ -641,6 +657,12 @@ msgstr "परियोजनाएं"
|
|||
msgid "Start a new project"
|
||||
msgstr "नई परियोजना शुरू करें"
|
||||
|
||||
msgid "History"
|
||||
msgstr "इतिहास"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "सेटिंग्स"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "अन्य परियोजनाएँ :"
|
||||
|
||||
|
@ -757,7 +779,8 @@ msgid ""
|
|||
"You can share the project identifier and the private code by any "
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"आप किसी भी संचार माध्यम से परियोजना पहचानकर्ता और निजी कोड साझा कर सकते हैं।"
|
||||
"आप किसी भी संचार माध्यम से परियोजना पहचानकर्ता और निजी कोड साझा कर सकते "
|
||||
"हैं।"
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "पहचानकर्ता:"
|
||||
|
@ -777,10 +800,10 @@ msgid ""
|
|||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"उन ईमेल पतों की एक (अल्पविराम से अलग की गयी) सूची निर्दिष्ट करें जिन्हे आप "
|
||||
"इस \n"
|
||||
"\t\t बजट प्रबंधन परियोजना के निर्माण के बारे में सूचित करना चाहते हैं और "
|
||||
"हम उन्हें आपके लिए एक ईमेल भेजेंगे।"
|
||||
"उन ईमेल पतों की एक (अल्पविराम से अलग की गयी) सूची निर्दिष्ट करें जिन्हे "
|
||||
"आप इस \n"
|
||||
"\t\t बजट प्रबंधन परियोजना के निर्माण के बारे में सूचित करना चाहते हैं "
|
||||
"और हम उन्हें आपके लिए एक ईमेल भेजेंगे।"
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "किसे भुगतान करना है?"
|
||||
|
@ -811,3 +834,4 @@ msgstr "मासिक खर्च"
|
|||
|
||||
msgid "Period"
|
||||
msgstr "अवधि"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1,31 +1,32 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"PO-Revision-Date: 2021-02-21 04:50+0000\n"
|
||||
"Last-Translator: Reza Almanda <rezaalmanda27@gmail.com>\n"
|
||||
"Language-Team: Indonesian <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/id/>\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2021-04-14 08:27+0000\n"
|
||||
"Last-Translator: whenwesober <naomi16i_1298q@cikuh.com>\n"
|
||||
"Language: id\n"
|
||||
"Language-Team: Indonesian <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/id/>\n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.5\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
msgstr ""
|
||||
"Bukan jumlah atau operator yang valid. Hanya angka dan operator + -* / yang "
|
||||
"diterima."
|
||||
"Bukan jumlah atau operator yang valid. Hanya angka dan operator + -* / "
|
||||
"yang diterima."
|
||||
|
||||
msgid "Project name"
|
||||
msgstr "Nama proyek"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Kode pribadi"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -40,6 +41,11 @@ msgstr "Gunakan pelacakan IP untuk riwayat proyek"
|
|||
msgid "Default Currency"
|
||||
msgstr "Mata Uang Standar"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Impor file JSON yang sudah diekspor sebelumnya"
|
||||
|
||||
|
@ -49,6 +55,9 @@ msgstr "Impor"
|
|||
msgid "Project identifier"
|
||||
msgstr "Pengidentifikasi proyek"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Kode pribadi"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Buat proyek"
|
||||
|
||||
|
@ -185,8 +194,8 @@ msgid ""
|
|||
"We tried to send you an reminder email, but there was an error. You can "
|
||||
"still use the project normally."
|
||||
msgstr ""
|
||||
"Kami telah mengirimi Anda email pengingat, tetapi ada kesalahan. Anda masih "
|
||||
"dapat menggunakan proyek secara normal."
|
||||
"Kami telah mengirimi Anda email pengingat, tetapi ada kesalahan. Anda "
|
||||
"masih dapat menggunakan proyek secara normal."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
|
@ -197,8 +206,9 @@ msgid ""
|
|||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"Maaf, ada galat saat mengirim email berisi instruksi pengaturan ulang kata "
|
||||
"sandi. Silakan periksa konfigurasi email peladen atau hubungi administrator."
|
||||
"Maaf, ada galat saat mengirim email berisi instruksi pengaturan ulang "
|
||||
"kata sandi. Silakan periksa konfigurasi email peladen atau hubungi "
|
||||
"administrator."
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "Belum ada token diberikan"
|
||||
|
@ -320,6 +330,14 @@ msgstr "tampilkan"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "Dasbor sekarang ini sedang dinonaktifkan."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Aplikasi Gawai"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Masuk"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "Anda yakin?"
|
||||
|
||||
|
@ -399,10 +417,10 @@ msgid "Disabled IP Address Recording"
|
|||
msgstr "Perekaman Alamat IP Dinonaktifkan"
|
||||
|
||||
msgid "Enabled Project History & IP Address Recording"
|
||||
msgstr ""
|
||||
msgstr "Aktifkan Riwayat Proyek & Rekaman Alamat IP"
|
||||
|
||||
msgid "Enabled IP Address Recording"
|
||||
msgstr ""
|
||||
msgstr "Aktifkan Rekaman Alamat IP"
|
||||
|
||||
msgid "History Settings Changed"
|
||||
msgstr "Setelan Riwayat Diubah"
|
||||
|
@ -467,8 +485,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"\n"
|
||||
" <i> Proyek ini memiliki riwayat yang dinonaktifkan. Tindakan "
|
||||
"baru tidak akan muncul di bawah ini. Anda dapat mengaktifkan riwayat pada</i>"
|
||||
"\n"
|
||||
"baru tidak akan muncul di bawah ini. Anda dapat mengaktifkan riwayat "
|
||||
"pada</i>\n"
|
||||
" <a href=\"%(url)s\">halaman pengaturan</a>\n"
|
||||
" "
|
||||
|
||||
|
@ -481,90 +499,99 @@ msgid ""
|
|||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" <i> Tabel di bawah mencerminkan tindakan yang direkam sebelum"
|
||||
" menonaktifkan riwayat proyek. Anda bisa\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\"> membersihkan riwayat proyek </a> untuk "
|
||||
"menghapusnya. </i> </ p >\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
"recording disabled. "
|
||||
msgstr ""
|
||||
"Beberapa entri dibawah mengandung alamat IP, walaupun proyek ini "
|
||||
"menonaktifkan rekaman alamat IP. "
|
||||
|
||||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
msgstr "Hapus alamat IP yang disimpan"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr ""
|
||||
msgstr "Tidak ada riwayat untuk dihapus"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr ""
|
||||
msgstr "Bersihkan Riwayat Proyek"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
msgstr "Tidak ada Alamat IP untuk dihapus"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
msgstr "Hapus alamat IP yang disimpan"
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
msgstr "Waktu"
|
||||
|
||||
msgid "Event"
|
||||
msgstr ""
|
||||
msgstr "Peristiwa"
|
||||
|
||||
msgid "IP address recording can be enabled on the settings page"
|
||||
msgstr ""
|
||||
msgstr "Perekaman alamat IP dapat diaktifkan di halaman pengaturan"
|
||||
|
||||
msgid "IP address recording can be disabled on the settings page"
|
||||
msgstr ""
|
||||
msgstr "Perekaman alamat IP dapat dinonaktifkan di halaman pengaturan"
|
||||
|
||||
msgid "From IP"
|
||||
msgstr ""
|
||||
msgstr "Dari IP"
|
||||
|
||||
msgid "added"
|
||||
msgstr ""
|
||||
msgstr "ditambahkan"
|
||||
|
||||
msgid "Project private code changed"
|
||||
msgstr ""
|
||||
msgstr "Kode pribadi proyek berubah"
|
||||
|
||||
msgid "Project renamed to"
|
||||
msgstr ""
|
||||
msgstr "Proyek berganti nama menjadi"
|
||||
|
||||
msgid "Project contact email changed to"
|
||||
msgstr ""
|
||||
msgstr "Email kontak proyek diubah menjadi"
|
||||
|
||||
msgid "Project settings modified"
|
||||
msgstr ""
|
||||
msgstr "Pengaturan proyek diubah"
|
||||
|
||||
msgid "deactivated"
|
||||
msgstr ""
|
||||
msgstr "dinonaktifkan"
|
||||
|
||||
msgid "reactivated"
|
||||
msgstr ""
|
||||
msgstr "aktivasi ulang"
|
||||
|
||||
msgid "renamed to"
|
||||
msgstr ""
|
||||
msgstr "berganti nama menjadi"
|
||||
|
||||
msgid "External link changed to"
|
||||
msgstr ""
|
||||
msgstr "Tautan eksternal diubah menjadi"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
msgstr "Jumlah"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr ""
|
||||
msgstr "Jumlah dalam %(currency)s"
|
||||
|
||||
msgid "modified"
|
||||
msgstr ""
|
||||
msgstr "diubah"
|
||||
|
||||
msgid "removed"
|
||||
msgstr ""
|
||||
msgstr "dihapus"
|
||||
|
||||
msgid "changed in a unknown way"
|
||||
msgstr ""
|
||||
msgstr "berubah dengan cara yang tidak diketahui"
|
||||
|
||||
msgid "Nothing to list"
|
||||
msgstr ""
|
||||
msgstr "Tidak ada yang dicantumkan"
|
||||
|
||||
msgid "Someone probably cleared the project history."
|
||||
msgstr ""
|
||||
msgstr "Seseorang mungkin membersihkan riwayat proyek."
|
||||
|
||||
msgid "Manage your shared <br />expenses, easily"
|
||||
msgstr "Atur pembagian harga <br />Anda, dengan mudah"
|
||||
|
@ -600,6 +627,8 @@ msgid ""
|
|||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
"Jangan gunakan kembali kata sandi pribadi. Pilih kode pribadi dan "
|
||||
"kirimkan ke teman Anda"
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr "Pengatur akun"
|
||||
|
@ -613,12 +642,6 @@ msgstr "Atur"
|
|||
msgid "Statistics"
|
||||
msgstr "Statistik"
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Pengaturan"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Bahasa"
|
||||
|
||||
|
@ -628,6 +651,12 @@ msgstr "Proyek"
|
|||
msgid "Start a new project"
|
||||
msgstr "Mulai proyek baru"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Riwayat"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Pengaturan"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Proyek lainnya:"
|
||||
|
||||
|
@ -660,7 +689,7 @@ msgstr "kamu bisa berkontribusi dan meningkatkannya!"
|
|||
|
||||
#, python-format
|
||||
msgid "%(amount)s each"
|
||||
msgstr ""
|
||||
msgstr "%(amount)s masing-masing"
|
||||
|
||||
msgid "Invite people"
|
||||
msgstr "Undang orang"
|
||||
|
@ -672,10 +701,10 @@ msgid "Add a new bill"
|
|||
msgstr "Tambah tagihan baru"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
msgstr "Tagihan terbaru"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
msgstr "Tagihan terdahulu"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Kapan?"
|
||||
|
@ -797,10 +826,10 @@ msgid "Spent"
|
|||
msgstr "Dihabiskan"
|
||||
|
||||
msgid "Expenses by Month"
|
||||
msgstr ""
|
||||
msgstr "Pengeluaran menurut Bulan"
|
||||
|
||||
msgid "Period"
|
||||
msgstr ""
|
||||
msgstr "Periode"
|
||||
|
||||
#~ msgid "%(member)s had been added"
|
||||
#~ msgstr "%(member)s telah ditambahkan"
|
||||
|
@ -830,3 +859,4 @@ msgstr ""
|
|||
#~ "teman Anda. Kode ini disimpan dalam "
|
||||
#~ "bentuk teks biasa dalam server, jadi "
|
||||
#~ "jangan gunakan password Anda!"
|
||||
|
||||
|
|
|
@ -1,30 +1,32 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2021-03-17 15:18+0000\n"
|
||||
"Last-Translator: TomSolGit <Tommaso.solfa@gmail.com>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/it/>\n"
|
||||
"Language: it\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/it/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.5.2-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
msgstr ""
|
||||
"Quantità o espressione non valida. Solo numeri e operatori + - * / accettati."
|
||||
"Quantità o espressione non valida. Solo numeri e operatori + - * / "
|
||||
"accettati."
|
||||
|
||||
msgid "Project name"
|
||||
msgstr "Nome del progetto"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Codice privato"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -39,6 +41,11 @@ msgstr "Utilizzare la localizzazione IP per lo storico del progetto"
|
|||
msgid "Default Currency"
|
||||
msgstr "Valuta predefinita"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importare il file JSON esportato precedentemente"
|
||||
|
||||
|
@ -48,6 +55,9 @@ msgstr "Importare"
|
|||
msgid "Project identifier"
|
||||
msgstr "Identificatore del progetto"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Codice privato"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Crea il progetto"
|
||||
|
||||
|
@ -325,6 +335,14 @@ msgstr "visualizza"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "Il Cruscotto è attualmente disabilitato."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Applicazione mobile"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Entra"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "sei sicuro?"
|
||||
|
||||
|
@ -621,8 +639,8 @@ msgid ""
|
|||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
"Non riutilizzare una password personale. Scegli un codice privato e invialo "
|
||||
"ai tuoi amici"
|
||||
"Non riutilizzare una password personale. Scegli un codice privato e "
|
||||
"invialo ai tuoi amici"
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr "Gestione account"
|
||||
|
@ -636,12 +654,6 @@ msgstr "Liquidazioni"
|
|||
msgid "Statistics"
|
||||
msgstr "Statistiche"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Cronologia"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Lingue"
|
||||
|
||||
|
@ -651,6 +663,12 @@ msgstr "Progetti"
|
|||
msgid "Start a new project"
|
||||
msgstr "Avvia un nuovo progetto"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Cronologia"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Altri progetti:"
|
||||
|
||||
|
@ -844,3 +862,4 @@ msgstr "Periodo"
|
|||
#~ " ai tuoi amici. È conservato in "
|
||||
#~ "chiaro sul server, quindi non "
|
||||
#~ "riutilizzarlo come password personale!"
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-10-22 06:40+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-11-11 16:28+0000\n"
|
||||
"Last-Translator: Jwen921 <yangjingwen0921@gmail.com>\n"
|
||||
"Language-Team: Japanese <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/ja/>\n"
|
||||
"Language: ja\n"
|
||||
"Language-Team: Japanese <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/ja/>\n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.4-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -22,7 +23,8 @@ msgstr "無効な入力です。数字と「+ - * / 」の演算子しか入力
|
|||
msgid "Project name"
|
||||
msgstr "プロジェクトの名前"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "暗証コード"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -37,6 +39,11 @@ msgstr "IPでプロジェクトの歴史を追跡する"
|
|||
msgid "Default Currency"
|
||||
msgstr "初期設定にする通貨"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "以前のJSONファイルをインポートする"
|
||||
|
||||
|
@ -46,6 +53,9 @@ msgstr "インポート"
|
|||
msgid "Project identifier"
|
||||
msgstr "プロジェクトの名前"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "暗証コード"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "プロジェクトを新規作成する"
|
||||
|
||||
|
@ -189,8 +199,7 @@ msgid ""
|
|||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"申し訳ございませんが、パスワード再設定の説明メールを送った時、エラーが発生しました。メールアドレスを一度確認してまたは管理者に連絡してください。"
|
||||
msgstr "申し訳ございませんが、パスワード再設定の説明メールを送った時、エラーが発生しました。メールアドレスを一度確認してまたは管理者に連絡してください。"
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "印が入力されていない"
|
||||
|
@ -308,6 +317,14 @@ msgstr "表示"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "現在ダッシュボードは操作できません。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "携帯アプリ"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "入る"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "確認?"
|
||||
|
||||
|
@ -601,12 +618,6 @@ msgstr "解決"
|
|||
msgid "Statistics"
|
||||
msgstr "統計"
|
||||
|
||||
msgid "History"
|
||||
msgstr "歴史"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "設定"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "言語"
|
||||
|
||||
|
@ -616,6 +627,12 @@ msgstr "プロジェクト"
|
|||
msgid "Start a new project"
|
||||
msgstr "新しいプロジェクトを始める"
|
||||
|
||||
msgid "History"
|
||||
msgstr "歴史"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "設定"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "他のプロジェクト:"
|
||||
|
||||
|
@ -781,3 +798,4 @@ msgstr "月別の費用"
|
|||
|
||||
msgid "Period"
|
||||
msgstr "期間"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1,19 +1,19 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"PO-Revision-Date: 2020-06-18 10:41+0000\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2021-05-09 04:33+0000\n"
|
||||
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
|
||||
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
|
||||
"i-hate-money/i-hate-money/nb_NO/>\n"
|
||||
"Language: nb_NO\n"
|
||||
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/i"
|
||||
"-hate-money/i-hate-money/nb_NO/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.1.1-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -25,7 +25,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Prosjektnavn"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Privat kode"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -40,6 +41,11 @@ msgstr "Bruk IP-sporing for prosjekthistorikk"
|
|||
msgid "Default Currency"
|
||||
msgstr "Forvalgt valuta"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importer tidligere eksportert JSON-fil"
|
||||
|
||||
|
@ -49,6 +55,9 @@ msgstr "Importer"
|
|||
msgid "Project identifier"
|
||||
msgstr "Prosjektidentifikator"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Privat kode"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Opprett prosjektet"
|
||||
|
||||
|
@ -240,7 +249,7 @@ msgstr ""
|
|||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
msgstr ""
|
||||
msgstr "%(member)s har blitt lagt til"
|
||||
|
||||
#, python-format
|
||||
msgid "%(name)s is part of this project again"
|
||||
|
@ -319,11 +328,19 @@ msgid "delete"
|
|||
msgstr "slett"
|
||||
|
||||
msgid "show"
|
||||
msgstr ""
|
||||
msgstr "vis"
|
||||
|
||||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "Oversikten er for tiden avskrudd."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Mobilprogram"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Til prosjektet"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "er du sikker?"
|
||||
|
||||
|
@ -452,10 +469,10 @@ msgid "Added"
|
|||
msgstr ""
|
||||
|
||||
msgid "Removed"
|
||||
msgstr ""
|
||||
msgstr "Fjernet"
|
||||
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
msgstr "og"
|
||||
|
||||
msgid "owers list"
|
||||
msgstr "eierliste"
|
||||
|
@ -611,12 +628,6 @@ msgstr "Gjør opp"
|
|||
msgid "Statistics"
|
||||
msgstr "Statistikk"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historikk"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Innstillinger"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Språk"
|
||||
|
||||
|
@ -626,6 +637,12 @@ msgstr "Prosjekter"
|
|||
msgid "Start a new project"
|
||||
msgstr "Start et nytt prosjekt"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historikk"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Innstillinger"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Other projects :"
|
||||
msgstr "Andre prosjekter:"
|
||||
|
@ -673,10 +690,10 @@ msgid "Add a new bill"
|
|||
msgstr "Legg til en ny regning"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
msgstr "Nyere regninger"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
msgstr "Eldre regninger"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Når?"
|
||||
|
@ -942,3 +959,4 @@ msgstr ""
|
|||
#~ " venne dine. Den lagres som den "
|
||||
#~ "er på tjeneren, så ikke gjenbruk "
|
||||
#~ "et personlig passord."
|
||||
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2021-02-17 02:50+0000\n"
|
||||
"Last-Translator: Sander Kooijmans <weblate@gogognome.nl>\n"
|
||||
"Language-Team: Dutch <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/nl/>\n"
|
||||
"Language: nl\n"
|
||||
"Language-Team: Dutch <https://hosted.weblate.org/projects/i-hate-money/i"
|
||||
"-hate-money/nl/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.5\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -25,7 +25,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Projectnaam"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Privécode"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -40,6 +41,11 @@ msgstr "IP-tracking voor projectgeschiedenis gebruiken"
|
|||
msgid "Default Currency"
|
||||
msgstr "Standaard munteenheid"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Eerder geëxporteerd JSON-bestand importeren"
|
||||
|
||||
|
@ -49,6 +55,9 @@ msgstr "Importeren"
|
|||
msgid "Project identifier"
|
||||
msgstr "Project-id"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Privécode"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Project aanmaken"
|
||||
|
||||
|
@ -185,8 +194,8 @@ msgid ""
|
|||
"We tried to send you an reminder email, but there was an error. You can "
|
||||
"still use the project normally."
|
||||
msgstr ""
|
||||
"We hebben geprobeerd een herinneringsmail te versturen, maar er is iets fout "
|
||||
"gegaan. Je kunt het project nog steeds normaal gebruiken."
|
||||
"We hebben geprobeerd een herinneringsmail te versturen, maar er is iets "
|
||||
"fout gegaan. Je kunt het project nog steeds normaal gebruiken."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
|
@ -198,8 +207,8 @@ msgid ""
|
|||
"contact the administrator."
|
||||
msgstr ""
|
||||
"Sorry, er is iets fout gegaan bij het verzenden van een e-mail met "
|
||||
"instructies om je wachtwoord te herstellen. Controleer de e-mailinstellingen "
|
||||
"van de server of neem contact op met de beheerder."
|
||||
"instructies om je wachtwoord te herstellen. Controleer de "
|
||||
"e-mailinstellingen van de server of neem contact op met de beheerder."
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "Geen toegangssleutel opgegeven"
|
||||
|
@ -234,9 +243,9 @@ msgid ""
|
|||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Sorry, er is iets fout gegaan bij het verzenden van de uitnodigingsmails. "
|
||||
"Controleer de e-mailinstellingen van de server of neem contact op met de "
|
||||
"beheerder."
|
||||
"Sorry, er is iets fout gegaan bij het verzenden van de uitnodigingsmails."
|
||||
" Controleer de e-mailinstellingen van de server of neem contact op met de"
|
||||
" beheerder."
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
|
@ -322,6 +331,14 @@ msgstr "tonen"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "De overzichtspagina is momenteel uitgeschakeld."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Mobiele app"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Inloggen"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "weet je het zeker?"
|
||||
|
||||
|
@ -429,10 +446,10 @@ msgid ""
|
|||
" The rest of the project history will be unaffected. This "
|
||||
"action cannot be undone."
|
||||
msgstr ""
|
||||
"Weet je zeker dat je alle vastgelegde IP-adressen wilt verwijderen van dit "
|
||||
"project?\n"
|
||||
"De rest van de projectgeschiedenis blijft onveranderd. Deze actie kan niet "
|
||||
"ongedaan worden gemaakt."
|
||||
"Weet je zeker dat je alle vastgelegde IP-adressen wilt verwijderen van "
|
||||
"dit project?\n"
|
||||
"De rest van de projectgeschiedenis blijft onveranderd. Deze actie kan "
|
||||
"niet ongedaan worden gemaakt."
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Sluiten"
|
||||
|
@ -472,8 +489,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"\n"
|
||||
" <i>Dit project heeft de geschiedenis uitgeschakeld. Nieuwe "
|
||||
"acties zullen niet hieronder verschijnen. Je kunt de geschiedenis aanzetten "
|
||||
"op de </i>\n"
|
||||
"acties zullen niet hieronder verschijnen. Je kunt de geschiedenis "
|
||||
"aanzetten op de </i>\n"
|
||||
" <a href=\"%(url)s\">instellingen-pagina</a>\n"
|
||||
" "
|
||||
|
||||
|
@ -605,8 +622,8 @@ msgid ""
|
|||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
"Hergebruik geen persoonlijk wachtwoord. Kies een privécode en stuur het naar "
|
||||
"je vrienden"
|
||||
"Hergebruik geen persoonlijk wachtwoord. Kies een privécode en stuur het "
|
||||
"naar je vrienden"
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr "Accountbeheer"
|
||||
|
@ -620,12 +637,6 @@ msgstr "Schikken"
|
|||
msgid "Statistics"
|
||||
msgstr "Statistieken"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Geschiedenis"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Talen"
|
||||
|
||||
|
@ -635,6 +646,12 @@ msgstr "Projecten"
|
|||
msgid "Start a new project"
|
||||
msgstr "Nieuw project starten"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Geschiedenis"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Overige projecten:"
|
||||
|
||||
|
@ -826,3 +843,4 @@ msgstr "Periode"
|
|||
#~ " vrienden. Deze wordt in platte tekst"
|
||||
#~ " opgeslagen op de server, dus gebruik"
|
||||
#~ " geen persoonlijk wachtwoord!"
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-06-03 15:41+0000\n"
|
||||
"Last-Translator: Szylu <chipolade@gmail.com>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/pl/>\n"
|
||||
"Language: pl\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/i-hate-money/i"
|
||||
"-hate-money/pl/>\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && "
|
||||
"(n%100<10 || n%100>=20) ? 1 : 2\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.1-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -26,7 +26,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nazwa projektu"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Kod prywatny"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -41,6 +42,11 @@ msgstr "Użyj śledzenia IP do historii projektu"
|
|||
msgid "Default Currency"
|
||||
msgstr "Domyślna waluta"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Zaimportuj wcześniej wyeksportowany plik JSON"
|
||||
|
||||
|
@ -50,6 +56,9 @@ msgstr "Importuj"
|
|||
msgid "Project identifier"
|
||||
msgstr "Identyfikator projektu"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Kod prywatny"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Stwórz projekt"
|
||||
|
||||
|
@ -186,8 +195,8 @@ msgid ""
|
|||
"We tried to send you an reminder email, but there was an error. You can "
|
||||
"still use the project normally."
|
||||
msgstr ""
|
||||
"Próbowaliśmy wysłać Ci wiadomość e-mail z przypomnieniem, ale wystąpił błąd. "
|
||||
"Nadal możesz normalnie korzystać z projektu."
|
||||
"Próbowaliśmy wysłać Ci wiadomość e-mail z przypomnieniem, ale wystąpił "
|
||||
"błąd. Nadal możesz normalnie korzystać z projektu."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
|
@ -325,6 +334,14 @@ msgstr "pokaż"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "Pulpit nawigacyjny jest obecnie dezaktywowany."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Aplikacja mobilna"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Wejdź"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "jesteś pewny?"
|
||||
|
||||
|
@ -629,12 +646,6 @@ msgstr "Rozliczenia"
|
|||
msgid "Statistics"
|
||||
msgstr "Statystyki"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historia"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ustawienia"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Języki"
|
||||
|
||||
|
@ -644,6 +655,12 @@ msgstr "Projekty"
|
|||
msgid "Start a new project"
|
||||
msgstr "Rozpocznij nowy projekt"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historia"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ustawienia"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Inne projekty:"
|
||||
|
||||
|
@ -837,3 +854,4 @@ msgstr "Okres"
|
|||
#~ "znajomych. Jest przechowywany w stanie "
|
||||
#~ "niezmienionym przez serwer, więc nie "
|
||||
#~ "używaj ponownie osobistego hasła!"
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-08-23 21:43+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-10-05 12:12+0000\n"
|
||||
"Last-Translator: ssantos <ssantos@web.de>\n"
|
||||
"Language-Team: Portuguese <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/pt/>\n"
|
||||
"Language: pt\n"
|
||||
"Language-Team: Portuguese <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/pt/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.3-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -24,7 +25,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nome do projeto"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Código privado"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -39,6 +41,11 @@ msgstr "Usar rastreamento de IP para o histórico do projeto"
|
|||
msgid "Default Currency"
|
||||
msgstr "Moeda predefinida"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importar ficheiro JSON exportado anteriormente"
|
||||
|
||||
|
@ -48,6 +55,9 @@ msgstr "Importar"
|
|||
msgid "Project identifier"
|
||||
msgstr "Identificador do projeto"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Código privado"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Criar o projeto"
|
||||
|
||||
|
@ -161,8 +171,7 @@ msgid "No Currency"
|
|||
msgstr "Sem Moeda"
|
||||
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr ""
|
||||
"Muitas tentativas de login falhas, por favor, tente novamente mais tarde."
|
||||
msgstr "Muitas tentativas de login falhas, por favor, tente novamente mais tarde."
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
|
@ -200,8 +209,8 @@ msgid ""
|
|||
"contact the administrator."
|
||||
msgstr ""
|
||||
"Desculpe, houve um erro ao te enviar um email com as instruções de "
|
||||
"redefinição de palavra-passe. Por favor, confira a configuração de e-mail do "
|
||||
"servidor ou entre em contato com um administrador."
|
||||
"redefinição de palavra-passe. Por favor, confira a configuração de e-mail"
|
||||
" do servidor ou entre em contato com um administrador."
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "Nenhum token fornecido"
|
||||
|
@ -236,8 +245,9 @@ msgid ""
|
|||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Desculpe, houve um erro ao enviar os convites via e-mail. Por favor, confira "
|
||||
"a configuração de email do servidor ou entre em contato com um administrador."
|
||||
"Desculpe, houve um erro ao enviar os convites via e-mail. Por favor, "
|
||||
"confira a configuração de email do servidor ou entre em contato com um "
|
||||
"administrador."
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
|
@ -252,8 +262,8 @@ msgid ""
|
|||
"User '%(name)s' has been deactivated. It will still appear in the users "
|
||||
"list until its balance becomes zero."
|
||||
msgstr ""
|
||||
"Utilizador '%(name)s' foi desativado. Ele continuará aparecendo na lista de "
|
||||
"utilizadores até que o seu balanço seja zero."
|
||||
"Utilizador '%(name)s' foi desativado. Ele continuará aparecendo na lista "
|
||||
"de utilizadores até que o seu balanço seja zero."
|
||||
|
||||
#, python-format
|
||||
msgid "User '%(name)s' has been removed"
|
||||
|
@ -276,8 +286,7 @@ msgid "Sorry, we were unable to find the page you've asked for."
|
|||
msgstr "Desculpe, não foi possível encontrar a página que solicitou."
|
||||
|
||||
msgid "The best thing to do is probably to get back to the main page."
|
||||
msgstr ""
|
||||
"É provável que a melhor coisa a fazer seja voltar para a página inicial."
|
||||
msgstr "É provável que a melhor coisa a fazer seja voltar para a página inicial."
|
||||
|
||||
msgid "Back to the list"
|
||||
msgstr "Voltar para a lista"
|
||||
|
@ -324,6 +333,14 @@ msgstr "exibir"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "O Painel de Controle atualmente está desativado."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Aplicação Mobile"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Entrar"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "tem certeza?"
|
||||
|
||||
|
@ -350,7 +367,8 @@ msgstr "Estabelecer planos"
|
|||
|
||||
msgid "Download the list of transactions needed to settle the current bills."
|
||||
msgstr ""
|
||||
"Descarregar a lista de transações necessárias para liquidar as contas atuais."
|
||||
"Descarregar a lista de transações necessárias para liquidar as contas "
|
||||
"atuais."
|
||||
|
||||
msgid "Can't remember the password?"
|
||||
msgstr "Esqueceu a palavra-passe?"
|
||||
|
@ -430,9 +448,10 @@ msgid ""
|
|||
" The rest of the project history will be unaffected. This "
|
||||
"action cannot be undone."
|
||||
msgstr ""
|
||||
"Tem certeza que deseja apagar todos os endereços IP gravados deste projeto?\n"
|
||||
" O resto do histórico do projeto não será afetado. Esta ação "
|
||||
"não pode ser desfeita."
|
||||
"Tem certeza que deseja apagar todos os endereços IP gravados deste "
|
||||
"projeto?\n"
|
||||
" O resto do histórico do projeto não será afetado. Esta "
|
||||
"ação não pode ser desfeita."
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
@ -447,8 +466,8 @@ msgid ""
|
|||
"Are you sure you want to erase all history for this project? This action "
|
||||
"cannot be undone."
|
||||
msgstr ""
|
||||
"Tem certeza que deseja apagar todo o histórico deste projeto? Esta ação não "
|
||||
"pode ser desfeita."
|
||||
"Tem certeza que deseja apagar todo o histórico deste projeto? Esta ação "
|
||||
"não pode ser desfeita."
|
||||
|
||||
msgid "Added"
|
||||
msgstr "Adicionado"
|
||||
|
@ -488,8 +507,8 @@ msgstr ""
|
|||
"\n"
|
||||
" <i>A tabela abaixo reflete as ações registadas antes da "
|
||||
"desativação do histórico do projeto. Pode\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
"target=\"#confirm-erase\">limpar o histórico do projeto</a> para "
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">limpar o histórico do projeto</a> para "
|
||||
"removê-las.</i></p>\n"
|
||||
" "
|
||||
|
||||
|
@ -497,8 +516,8 @@ msgid ""
|
|||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
"recording disabled. "
|
||||
msgstr ""
|
||||
"Algumas das entradas abaixo contém endereços IP, mesmo este projeto tendo a "
|
||||
"gravação de IP desativada. "
|
||||
"Algumas das entradas abaixo contém endereços IP, mesmo este projeto tendo"
|
||||
" a gravação de IP desativada. "
|
||||
|
||||
msgid "Delete stored IP addresses"
|
||||
msgstr "Deletar endereços IP gravados"
|
||||
|
@ -525,8 +544,7 @@ msgid "IP address recording can be enabled on the settings page"
|
|||
msgstr "A gravação do endereço IP pode ser ativada na página de configurações"
|
||||
|
||||
msgid "IP address recording can be disabled on the settings page"
|
||||
msgstr ""
|
||||
"A gravação do endereço IP pode ser desativada na página de configurações"
|
||||
msgstr "A gravação do endereço IP pode ser desativada na página de configurações"
|
||||
|
||||
msgid "From IP"
|
||||
msgstr "Do IP"
|
||||
|
@ -614,8 +632,8 @@ msgid ""
|
|||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
"Não reutilize uma palavra-passe pessoal. Escolha um código privado e envie-o "
|
||||
"para seus amigos"
|
||||
"Não reutilize uma palavra-passe pessoal. Escolha um código privado e "
|
||||
"envie-o para seus amigos"
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr "Gestor de contas"
|
||||
|
@ -629,12 +647,6 @@ msgstr "Estabelecer"
|
|||
msgid "Statistics"
|
||||
msgstr "Estatísticas"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Histórico"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configurações"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Linguagens"
|
||||
|
||||
|
@ -644,6 +656,12 @@ msgstr "Projetos"
|
|||
msgid "Start a new project"
|
||||
msgstr "Começar um novo projeto"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Histórico"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configurações"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Outros projetos:"
|
||||
|
||||
|
@ -738,8 +756,8 @@ msgid ""
|
|||
"A link to reset your password has been sent to you, please check your "
|
||||
"emails."
|
||||
msgstr ""
|
||||
"Uma ligação para redefinir a sua palavra-passe foi enviado a si, por favor "
|
||||
"verifique os seus e-mails."
|
||||
"Uma ligação para redefinir a sua palavra-passe foi enviado a si, por "
|
||||
"favor verifique os seus e-mails."
|
||||
|
||||
msgid "Return to home page"
|
||||
msgstr "Retornar à pagina inicial"
|
||||
|
@ -760,8 +778,8 @@ msgid ""
|
|||
"You can share the project identifier and the private code by any "
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"Pode compartilhar o identificador do projeto e o código privado por qualquer "
|
||||
"meio de comunicação."
|
||||
"Pode compartilhar o identificador do projeto e o código privado por "
|
||||
"qualquer meio de comunicação."
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "Identificador:"
|
||||
|
@ -785,8 +803,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Especifique uma lista (separada por vírgulas) de endereços de e-mail que "
|
||||
"deseja notificar sobre a\n"
|
||||
" criação deste projeto de gestão orçamental e enviaremos um e-"
|
||||
"mail para si."
|
||||
" criação deste projeto de gestão orçamental e enviaremos "
|
||||
"um e-mail para si."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Quem paga?"
|
||||
|
@ -817,3 +835,4 @@ msgstr "Despesas por mês"
|
|||
|
||||
msgid "Period"
|
||||
msgstr "Período"
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-06-27 02:02+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-08-27 19:22+0000\n"
|
||||
"Last-Translator: André Oliveira <andre_pinto_oliveira@outlook.pt>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
|
||||
"i-hate-money/i-hate-money/pt_BR/>\n"
|
||||
"Language: pt_BR\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/i"
|
||||
"-hate-money/i-hate-money/pt_BR/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.2.1-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -24,7 +25,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nome do projeto"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Código privado"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -39,6 +41,11 @@ msgstr "Usar rastreamento de IP para o histórico do projeto"
|
|||
msgid "Default Currency"
|
||||
msgstr "Moeda Padrão"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importar arquivo JSON exportado anteriormente"
|
||||
|
||||
|
@ -48,6 +55,9 @@ msgstr "Importar"
|
|||
msgid "Project identifier"
|
||||
msgstr "Identificador do projeto"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Código privado"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Criar o projeto"
|
||||
|
||||
|
@ -161,8 +171,7 @@ msgid "No Currency"
|
|||
msgstr "Sem Moeda"
|
||||
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr ""
|
||||
"Muitas tentativas de login falhas, por favor, tente novamente mais tarde."
|
||||
msgstr "Muitas tentativas de login falhas, por favor, tente novamente mais tarde."
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
|
@ -236,8 +245,9 @@ msgid ""
|
|||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Desculpe, houve um erro ao enviar os convites via e-mail. Por favor, confira "
|
||||
"a configuração de email do servidor ou entre em contato com um administrador."
|
||||
"Desculpe, houve um erro ao enviar os convites via e-mail. Por favor, "
|
||||
"confira a configuração de email do servidor ou entre em contato com um "
|
||||
"administrador."
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
|
@ -276,8 +286,7 @@ msgid "Sorry, we were unable to find the page you've asked for."
|
|||
msgstr "Desculpe, não foi possível encontrar a página que você solicitou."
|
||||
|
||||
msgid "The best thing to do is probably to get back to the main page."
|
||||
msgstr ""
|
||||
"É provável que a melhor coisa a fazer seja voltar para a página inicial."
|
||||
msgstr "É provável que a melhor coisa a fazer seja voltar para a página inicial."
|
||||
|
||||
msgid "Back to the list"
|
||||
msgstr "Voltar para a lista"
|
||||
|
@ -324,6 +333,14 @@ msgstr "exibir"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "O Painel de Controle atualmente está desativado."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Aplicação Mobile"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Entrar"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "tem certeza?"
|
||||
|
||||
|
@ -349,8 +366,7 @@ msgid "Settle plans"
|
|||
msgstr "Estabelecer planos"
|
||||
|
||||
msgid "Download the list of transactions needed to settle the current bills."
|
||||
msgstr ""
|
||||
"Baixar a lista de transações necessárias para liquidar as contas atuais."
|
||||
msgstr "Baixar a lista de transações necessárias para liquidar as contas atuais."
|
||||
|
||||
msgid "Can't remember the password?"
|
||||
msgstr "Esqueceu a senha?"
|
||||
|
@ -432,8 +448,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Você tem certeza que deseja deletar todos os endereços IP gravados deste "
|
||||
"projeto?\n"
|
||||
" O resto do histórico do projeto não será afetado. Esta ação "
|
||||
"não pode ser desfeita."
|
||||
" O resto do histórico do projeto não será afetado. Esta "
|
||||
"ação não pode ser desfeita."
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
@ -448,8 +464,8 @@ msgid ""
|
|||
"Are you sure you want to erase all history for this project? This action "
|
||||
"cannot be undone."
|
||||
msgstr ""
|
||||
"Tem certeza que deseja apagar todo o histórico deste projeto? Esta ação não "
|
||||
"pode ser desfeita."
|
||||
"Tem certeza que deseja apagar todo o histórico deste projeto? Esta ação "
|
||||
"não pode ser desfeita."
|
||||
|
||||
msgid "Added"
|
||||
msgstr "Adicionado"
|
||||
|
@ -489,8 +505,8 @@ msgstr ""
|
|||
"\n"
|
||||
" <i>A tabela abaixo reflete as ações registradas antes da "
|
||||
"desativação do histórico do projeto. Você pode\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
"target=\"#confirm-erase\">limpar o histórico do projeto</a> para "
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">limpar o histórico do projeto</a> para "
|
||||
"removê-las.</i></p>\n"
|
||||
" "
|
||||
|
||||
|
@ -498,8 +514,8 @@ msgid ""
|
|||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
"recording disabled. "
|
||||
msgstr ""
|
||||
"Algumas das entradas abaixo contém endereços IP, mesmo este projeto tendo a "
|
||||
"gravação de IP desativada. "
|
||||
"Algumas das entradas abaixo contém endereços IP, mesmo este projeto tendo"
|
||||
" a gravação de IP desativada. "
|
||||
|
||||
msgid "Delete stored IP addresses"
|
||||
msgstr "Deletar endereços IP salvos"
|
||||
|
@ -526,8 +542,7 @@ msgid "IP address recording can be enabled on the settings page"
|
|||
msgstr "A gravação do endereço IP pode ser ativada na página de configurações"
|
||||
|
||||
msgid "IP address recording can be disabled on the settings page"
|
||||
msgstr ""
|
||||
"A gravação do endereço IP pode ser desativada na página de configurações"
|
||||
msgstr "A gravação do endereço IP pode ser desativada na página de configurações"
|
||||
|
||||
msgid "From IP"
|
||||
msgstr "Do IP"
|
||||
|
@ -615,8 +630,8 @@ msgid ""
|
|||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
"Não reutilize uma senha pessoal. Escolha um código privado e envie-o para "
|
||||
"seus amigos"
|
||||
"Não reutilize uma senha pessoal. Escolha um código privado e envie-o para"
|
||||
" seus amigos"
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr "Gerenciador de contas"
|
||||
|
@ -630,12 +645,6 @@ msgstr "Estabelecer"
|
|||
msgid "Statistics"
|
||||
msgstr "Estatísticas"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Histórico"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configurações"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Linguagens"
|
||||
|
||||
|
@ -645,6 +654,12 @@ msgstr "Projetos"
|
|||
msgid "Start a new project"
|
||||
msgstr "Começar um novo projeto"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Histórico"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configurações"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Outros projetos:"
|
||||
|
||||
|
@ -784,10 +799,10 @@ msgid ""
|
|||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"Especifica uma lista de endereços de email (separados por vírgula) que você "
|
||||
"quer notificar acerca da\n"
|
||||
" criação deste projeto de gestão de saldo e nós iremos enviar "
|
||||
"um email por si."
|
||||
"Especifica uma lista de endereços de email (separados por vírgula) que "
|
||||
"você quer notificar acerca da\n"
|
||||
" criação deste projeto de gestão de saldo e nós iremos "
|
||||
"enviar um email por si."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Quem paga?"
|
||||
|
@ -818,3 +833,4 @@ msgstr "Gastos por Mês"
|
|||
|
||||
msgid "Period"
|
||||
msgstr "Período"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1,20 +1,20 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"PO-Revision-Date: 2020-08-17 17:32+0000\n"
|
||||
"Last-Translator: Alexey Napalkov <flynbit@gmail.com>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/ru/>\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2021-05-10 11:33+0000\n"
|
||||
"Last-Translator: Vsevolod <sevauserg.com@gmail.com>\n"
|
||||
"Language: ru\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/ru/>\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.2-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -26,7 +26,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Имя проекта"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Приватный код"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -41,6 +42,11 @@ msgstr "Использовать отслеживание по IP для ист
|
|||
msgid "Default Currency"
|
||||
msgstr "Валюта по умолчанию"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Импортировать ранее экспортированный JSON файл"
|
||||
|
||||
|
@ -50,6 +56,9 @@ msgstr "Импортировать"
|
|||
msgid "Project identifier"
|
||||
msgstr "Идентификатор проекта"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Приватный код"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Создать проект"
|
||||
|
||||
|
@ -188,8 +197,9 @@ msgid ""
|
|||
"We tried to send you an reminder email, but there was an error. You can "
|
||||
"still use the project normally."
|
||||
msgstr ""
|
||||
"Мы попытались отправить вам напоминание по электронной почте, но произошла "
|
||||
"ошибка. Вы по-прежнему можете использовать проект в обычном режиме."
|
||||
"Мы попытались отправить вам напоминание по электронной почте, но "
|
||||
"произошла ошибка. Вы по-прежнему можете использовать проект в обычном "
|
||||
"режиме."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
|
@ -200,9 +210,9 @@ msgid ""
|
|||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"К сожалению, при отправке вам электронного письма с инструкциями по сбросу "
|
||||
"пароля произошла ошибка. Пожалуйста, проверьте конфигурацию электронной "
|
||||
"почты сервера или свяжитесь с администратором."
|
||||
"К сожалению, при отправке вам электронного письма с инструкциями по "
|
||||
"сбросу пароля произошла ошибка. Пожалуйста, проверьте конфигурацию "
|
||||
"электронной почты сервера или свяжитесь с администратором."
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "Не предоставлен токен"
|
||||
|
@ -325,6 +335,14 @@ msgstr "показать"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "Панель инструментов в данный момент отключена."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Мобильное приложение"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Войти"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "вы уверены?"
|
||||
|
||||
|
@ -347,7 +365,7 @@ msgid "Download the list of bills with owner, amount, reason,... "
|
|||
msgstr "Скачать список счетов с владельцем, суммой, причиной, .. "
|
||||
|
||||
msgid "Settle plans"
|
||||
msgstr "Урегулировать планы"
|
||||
msgstr "Планы оплаты"
|
||||
|
||||
msgid "Download the list of transactions needed to settle the current bills."
|
||||
msgstr "Скачать список переводов нужных, чтобы урегулировать данные счета."
|
||||
|
@ -614,8 +632,8 @@ msgid ""
|
|||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
"Не используйте повторно личный пароль. Выберите приватный код и отправьте "
|
||||
"его своим друзьям"
|
||||
"Не используйте повторно личный пароль. Выберите приватный код и отправьте"
|
||||
" его своим друзьям"
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr "Менеджер аккаунтов"
|
||||
|
@ -624,17 +642,11 @@ msgid "Bills"
|
|||
msgstr "Счета"
|
||||
|
||||
msgid "Settle"
|
||||
msgstr "Отрегулировать"
|
||||
msgstr "Оплаты"
|
||||
|
||||
msgid "Statistics"
|
||||
msgstr "Статистика"
|
||||
|
||||
msgid "History"
|
||||
msgstr "История"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Настройки"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Языки"
|
||||
|
||||
|
@ -644,6 +656,12 @@ msgstr "Проекты"
|
|||
msgid "Start a new project"
|
||||
msgstr "Начать новый проект"
|
||||
|
||||
msgid "History"
|
||||
msgstr "История"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Настройки"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Остальные проекты :"
|
||||
|
||||
|
@ -833,3 +851,4 @@ msgstr "Период"
|
|||
#~ " друзьям. Он хранится на сервере как"
|
||||
#~ " есть, поэтому не используйте личный "
|
||||
#~ "пароль!"
|
||||
|
||||
|
|
|
@ -1,19 +1,20 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-04-08 13:59+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2021-04-09 13:26+0000\n"
|
||||
"Last-Translator: Rastko Sarcevic <ralesarcevic@gmail.com>\n"
|
||||
"Language-Team: Serbian <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/sr/>\n"
|
||||
"Language: sr\n"
|
||||
"Language-Team: Serbian <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/sr/>\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.6-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -23,7 +24,7 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Private code"
|
||||
msgid "New private code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Email"
|
||||
|
@ -38,6 +39,11 @@ msgstr ""
|
|||
msgid "Default Currency"
|
||||
msgstr "Podrazumevana Valuta"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr ""
|
||||
|
||||
|
@ -47,6 +53,9 @@ msgstr "Uvezi"
|
|||
msgid "Project identifier"
|
||||
msgstr ""
|
||||
|
||||
msgid "Private code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr ""
|
||||
|
||||
|
@ -308,6 +317,13 @@ msgstr "prikaži"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Mobilna Aplikacija"
|
||||
|
||||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -590,12 +606,6 @@ msgstr ""
|
|||
msgid "Statistics"
|
||||
msgstr "Statistika"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Istorija"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Podešavanja"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Jezici"
|
||||
|
||||
|
@ -605,6 +615,12 @@ msgstr ""
|
|||
msgid "Start a new project"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr "Istorija"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Podešavanja"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -768,3 +784,4 @@ msgstr "Mesečni troškovi"
|
|||
|
||||
msgid "Period"
|
||||
msgstr "Period"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1,18 +1,20 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-10-30 01:37+0200\n"
|
||||
"PO-Revision-Date: 2020-10-31 01:26+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/sv/>\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2021-05-26 07:33+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström "
|
||||
"<swedishsailfishosuser@tutanota.com>\n"
|
||||
"Language: sv\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/sv/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.3.2-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -22,7 +24,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Namn på projektet"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Privat kod"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -32,158 +35,172 @@ msgid "Enable project history"
|
|||
msgstr "Aktiva projekthistorik"
|
||||
|
||||
msgid "Use IP tracking for project history"
|
||||
msgstr ""
|
||||
msgstr "Använd IP-spårning för projekthistorik"
|
||||
|
||||
msgid "Default Currency"
|
||||
msgstr "Standardvaluta"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr ""
|
||||
msgstr "Importera tidigare exporterad JSON-fil"
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
msgstr "Importera"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr ""
|
||||
msgstr "Projektidentifierare"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Privat kod"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr ""
|
||||
msgstr "Skapa projektet"
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"A project with this identifier (\"%(project)s\") already exists. Please "
|
||||
"choose a new identifier"
|
||||
msgstr ""
|
||||
"Ett projekt med den här identifieraren (\"%(project)s\") finns redan. "
|
||||
"Vänligen välj en annan identifierare"
|
||||
|
||||
msgid "Get in"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin password"
|
||||
msgstr ""
|
||||
msgstr "Lösenord för admin"
|
||||
|
||||
msgid "Send me the code by email"
|
||||
msgstr ""
|
||||
msgstr "Skicka koden till mig via e-post"
|
||||
|
||||
msgid "This project does not exists"
|
||||
msgstr ""
|
||||
msgstr "Det här projektet finns inte"
|
||||
|
||||
msgid "Password mismatch"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
msgstr "Lösenord"
|
||||
|
||||
msgid "Password confirmation"
|
||||
msgstr ""
|
||||
msgstr "Lösenordsbekräftelse"
|
||||
|
||||
msgid "Reset password"
|
||||
msgstr ""
|
||||
msgstr "Återställ lösenord"
|
||||
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
msgstr "Datum"
|
||||
|
||||
msgid "What?"
|
||||
msgstr ""
|
||||
msgstr "Vad?"
|
||||
|
||||
msgid "Payer"
|
||||
msgstr ""
|
||||
msgstr "Betalare"
|
||||
|
||||
msgid "Amount paid"
|
||||
msgstr ""
|
||||
msgstr "Betald summa"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr ""
|
||||
msgstr "Valuta"
|
||||
|
||||
msgid "External link"
|
||||
msgstr ""
|
||||
msgstr "Extern länk"
|
||||
|
||||
msgid "A link to an external document, related to this bill"
|
||||
msgstr ""
|
||||
msgstr "En länk till ett externt dokument, relaterad till den här räkningen"
|
||||
|
||||
msgid "For whom?"
|
||||
msgstr ""
|
||||
msgstr "För vem?"
|
||||
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
msgstr "Skicka in"
|
||||
|
||||
msgid "Submit and add a new one"
|
||||
msgstr ""
|
||||
msgstr "Skicka in och lägg till en ny"
|
||||
|
||||
#, python-format
|
||||
msgid "Project default: %(currency)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr ""
|
||||
msgstr "Räkningar kan inte vara null"
|
||||
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
msgstr "Namn"
|
||||
|
||||
msgid "Weights should be positive"
|
||||
msgstr ""
|
||||
msgstr "Vikter borde vara positiva"
|
||||
|
||||
msgid "Weight"
|
||||
msgstr ""
|
||||
msgstr "Vikt"
|
||||
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
msgstr "Lägg till"
|
||||
|
||||
msgid "User name incorrect"
|
||||
msgstr ""
|
||||
msgstr "Användarnamnet felaktigt"
|
||||
|
||||
msgid "This project already have this member"
|
||||
msgstr ""
|
||||
msgstr "Det här projektet har redan den här medlemmen"
|
||||
|
||||
msgid "People to notify"
|
||||
msgstr ""
|
||||
msgstr "Personer att meddela"
|
||||
|
||||
msgid "Send invites"
|
||||
msgstr ""
|
||||
msgstr "Skicka inbjudningar"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Participant"
|
||||
msgstr ""
|
||||
msgstr "Deltagare"
|
||||
|
||||
msgid "Bill"
|
||||
msgstr ""
|
||||
msgstr "Räkning"
|
||||
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
msgstr "Projekt"
|
||||
|
||||
msgid "No Currency"
|
||||
msgstr ""
|
||||
msgstr "Ingen valuta"
|
||||
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr ""
|
||||
msgstr "För många misslyckade inloggningsförsök, försök igen senare."
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
msgstr ""
|
||||
"Det här lösenordet för admin är inte det rätta. Endast %(num)d försök "
|
||||
"kvar."
|
||||
|
||||
msgid "You either provided a bad token or no project identifier."
|
||||
msgstr ""
|
||||
|
||||
msgid "This private code is not the right one"
|
||||
msgstr ""
|
||||
msgstr "Den här privata koden är inte den rätta"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
msgstr "Du har just skapat '%(project)s' för att dela ut dina kostnader"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr ""
|
||||
msgstr "Ett e-postmeddelande med påminnelse har just skickats till dig"
|
||||
|
||||
msgid ""
|
||||
"We tried to send you an reminder email, but there was an error. You can "
|
||||
"still use the project normally."
|
||||
msgstr ""
|
||||
"Vi försökte skicka en påminnelse till din e-postadress, men det uppstod "
|
||||
"ett fel. Du kan fortfarande använda det här projektet normalt."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr ""
|
||||
msgstr "Projektets identifierare är %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
|
@ -192,32 +209,32 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr ""
|
||||
msgstr "Ingen symbol tillhandahölls"
|
||||
|
||||
msgid "Invalid token"
|
||||
msgstr ""
|
||||
msgstr "Ogiltig symbol"
|
||||
|
||||
msgid "Unknown project"
|
||||
msgstr ""
|
||||
msgstr "Okänt projekt"
|
||||
|
||||
msgid "Password successfully reset."
|
||||
msgstr ""
|
||||
msgstr "Återställningen av lösenordet lyckades."
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
msgstr "Uppladdningen av projektet lyckades"
|
||||
|
||||
msgid "Invalid JSON"
|
||||
msgstr ""
|
||||
msgstr "Ogiltig JSON"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr ""
|
||||
msgstr "Borttagningen av projektet lyckades"
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
msgstr "Du har bjudits in att dela ut dina kostnader för %(project)s"
|
||||
|
||||
msgid "Your invitations have been sent"
|
||||
msgstr ""
|
||||
msgstr "Dina inbjudningar har skickats"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
|
@ -227,11 +244,11 @@ msgstr ""
|
|||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
msgstr ""
|
||||
msgstr "%(member)s har lagts till"
|
||||
|
||||
#, python-format
|
||||
msgid "%(name)s is part of this project again"
|
||||
msgstr ""
|
||||
msgstr "%(name)s är en del av det här projektet igen"
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
|
@ -241,86 +258,93 @@ msgstr ""
|
|||
|
||||
#, python-format
|
||||
msgid "User '%(name)s' has been removed"
|
||||
msgstr ""
|
||||
msgstr "Användaren '%(name)s' har tagits bort"
|
||||
|
||||
#, python-format
|
||||
msgid "User '%(name)s' has been edited"
|
||||
msgstr ""
|
||||
msgstr "Användaren '%(name)s' har blivit redigerad"
|
||||
|
||||
msgid "The bill has been added"
|
||||
msgstr ""
|
||||
msgstr "Räkningen har lagts till"
|
||||
|
||||
msgid "The bill has been deleted"
|
||||
msgstr ""
|
||||
msgstr "Räkningen har tagits bort"
|
||||
|
||||
msgid "The bill has been modified"
|
||||
msgstr ""
|
||||
msgstr "Räkningen har blivit modifierad"
|
||||
|
||||
msgid "Sorry, we were unable to find the page you've asked for."
|
||||
msgstr ""
|
||||
msgstr "Ledsen, men vi kunde inte hitta sidan som du frågade efter."
|
||||
|
||||
msgid "The best thing to do is probably to get back to the main page."
|
||||
msgstr ""
|
||||
msgstr "Det bästa du kan göra är förmodligen att gå tillbaka till huvudsidan."
|
||||
|
||||
msgid "Back to the list"
|
||||
msgstr ""
|
||||
msgstr "Tillbaka till listan"
|
||||
|
||||
msgid "Administration tasks are currently disabled."
|
||||
msgstr ""
|
||||
|
||||
msgid "The project you are trying to access do not exist, do you want to"
|
||||
msgstr ""
|
||||
msgstr "Projektet som du försöker komma åt finns inte, vill du"
|
||||
|
||||
msgid "create it"
|
||||
msgstr ""
|
||||
msgstr "skapa det"
|
||||
|
||||
msgid "?"
|
||||
msgstr ""
|
||||
msgstr "?"
|
||||
|
||||
msgid "Create a new project"
|
||||
msgstr ""
|
||||
msgstr "Skapa ett nytt projekt"
|
||||
|
||||
msgid "Number of members"
|
||||
msgstr ""
|
||||
msgstr "Antalet medlemmar"
|
||||
|
||||
msgid "Number of bills"
|
||||
msgstr ""
|
||||
msgstr "Antalet räkningar"
|
||||
|
||||
msgid "Newest bill"
|
||||
msgstr ""
|
||||
msgstr "Nyaste räkningen"
|
||||
|
||||
msgid "Oldest bill"
|
||||
msgstr ""
|
||||
msgstr "Äldsta räkningen"
|
||||
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
msgstr "Åtgärder"
|
||||
|
||||
msgid "edit"
|
||||
msgstr ""
|
||||
msgstr "redigera"
|
||||
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
msgstr "ta bort"
|
||||
|
||||
msgid "show"
|
||||
msgstr ""
|
||||
msgstr "visa"
|
||||
|
||||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "Instrumentpanelen är för närvarande inaktiverad."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Mobilapplikation"
|
||||
|
||||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr ""
|
||||
msgstr "säker?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr ""
|
||||
msgstr "Redigera projekt"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr ""
|
||||
msgstr "Importera JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
msgstr "Välj fil"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr ""
|
||||
msgstr "Ladda ner projektets data"
|
||||
|
||||
msgid "Bill items"
|
||||
msgstr ""
|
||||
|
@ -335,61 +359,61 @@ msgid "Download the list of transactions needed to settle the current bills."
|
|||
msgstr ""
|
||||
|
||||
msgid "Can't remember the password?"
|
||||
msgstr ""
|
||||
msgstr "Kan du inte komma ihåg lösenordet?"
|
||||
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Avbryt"
|
||||
|
||||
msgid "Privacy Settings"
|
||||
msgstr ""
|
||||
msgstr "Inställningar för privatliv"
|
||||
|
||||
msgid "Edit the project"
|
||||
msgstr ""
|
||||
msgstr "Redigera projektet"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr ""
|
||||
msgstr "Redigera den här räkningen"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr ""
|
||||
msgstr "Lägg till en räkning"
|
||||
|
||||
msgid "Select all"
|
||||
msgstr ""
|
||||
msgstr "Välj alla"
|
||||
|
||||
msgid "Select none"
|
||||
msgstr ""
|
||||
msgstr "Välj ingen"
|
||||
|
||||
msgid "Add participant"
|
||||
msgstr ""
|
||||
msgstr "Lägg till deltagare"
|
||||
|
||||
msgid "Edit this member"
|
||||
msgstr ""
|
||||
msgstr "Redigera det här numret"
|
||||
|
||||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
msgstr "john.doe@exempel.com, mary.moe@sida.com"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr ""
|
||||
msgstr "Skicka inbjudningarna"
|
||||
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
msgstr "Ladda ner"
|
||||
|
||||
msgid "Disabled Project History"
|
||||
msgstr ""
|
||||
msgstr "Inaktiverade projekthistorik"
|
||||
|
||||
msgid "Disabled Project History & IP Address Recording"
|
||||
msgstr ""
|
||||
msgstr "Inaktiverade projekthistorik och inspelning av IP-adress"
|
||||
|
||||
msgid "Enabled Project History"
|
||||
msgstr ""
|
||||
msgstr "Aktiverade projekthistorik"
|
||||
|
||||
msgid "Disabled IP Address Recording"
|
||||
msgstr ""
|
||||
msgstr "Inaktiverade inspelning av IP-adress"
|
||||
|
||||
msgid "Enabled Project History & IP Address Recording"
|
||||
msgstr ""
|
||||
msgstr "Aktiverade projekthistorik & inspelning av IP-adress"
|
||||
|
||||
msgid "Enabled IP Address Recording"
|
||||
msgstr ""
|
||||
msgstr "Aktiverade inspelning av IP-adress"
|
||||
|
||||
msgid "History Settings Changed"
|
||||
msgstr ""
|
||||
|
@ -398,10 +422,10 @@ msgid "changed"
|
|||
msgstr ""
|
||||
|
||||
msgid "from"
|
||||
msgstr ""
|
||||
msgstr "från"
|
||||
|
||||
msgid "to"
|
||||
msgstr ""
|
||||
msgstr "till"
|
||||
|
||||
msgid "Confirm Remove IP Adresses"
|
||||
msgstr ""
|
||||
|
@ -414,27 +438,29 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
msgstr "Stäng"
|
||||
|
||||
msgid "Confirm Delete"
|
||||
msgstr ""
|
||||
msgstr "Bekräfta borttagning"
|
||||
|
||||
msgid "Delete Confirmation"
|
||||
msgstr ""
|
||||
msgstr "Ta bort bekräftelse"
|
||||
|
||||
msgid ""
|
||||
"Are you sure you want to erase all history for this project? This action "
|
||||
"cannot be undone."
|
||||
msgstr ""
|
||||
"Är du säker på att du vill ta bort alla historik för det här projektet? "
|
||||
"Den här åtgärden kan inte göras ogjord."
|
||||
|
||||
msgid "Added"
|
||||
msgstr ""
|
||||
msgstr "Lades till"
|
||||
|
||||
msgid "Removed"
|
||||
msgstr ""
|
||||
msgstr "Togs bort"
|
||||
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
msgstr "och"
|
||||
|
||||
msgid "owers list"
|
||||
msgstr ""
|
||||
|
@ -462,27 +488,29 @@ msgid ""
|
|||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
"recording disabled. "
|
||||
msgstr ""
|
||||
"Några poster här nedan innehåller IP-adresser, fastän det här projektet "
|
||||
"har IP-inspelning inaktiverat. "
|
||||
|
||||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
msgstr "Ta bort lagrade IP-adresser"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr ""
|
||||
msgstr "Ingen historik att ta bort"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr ""
|
||||
msgstr "Rensa projektets historik"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
msgstr "Inga IP-adresser att ta bort"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
msgstr "Tid"
|
||||
|
||||
msgid "Event"
|
||||
msgstr ""
|
||||
msgstr "Händelse"
|
||||
|
||||
msgid "IP address recording can be enabled on the settings page"
|
||||
msgstr ""
|
||||
|
@ -491,86 +519,86 @@ msgid "IP address recording can be disabled on the settings page"
|
|||
msgstr ""
|
||||
|
||||
msgid "From IP"
|
||||
msgstr ""
|
||||
msgstr "Från IP"
|
||||
|
||||
msgid "added"
|
||||
msgstr ""
|
||||
msgstr "lades till"
|
||||
|
||||
msgid "Project private code changed"
|
||||
msgstr ""
|
||||
msgstr "Projektets privata kod ändrades"
|
||||
|
||||
msgid "Project renamed to"
|
||||
msgstr ""
|
||||
msgstr "Projektet döptes om till"
|
||||
|
||||
msgid "Project contact email changed to"
|
||||
msgstr ""
|
||||
msgstr "Projektets e-post för kontakt ändrades till"
|
||||
|
||||
msgid "Project settings modified"
|
||||
msgstr ""
|
||||
msgstr "Projektets inställningar ändrades"
|
||||
|
||||
msgid "deactivated"
|
||||
msgstr ""
|
||||
msgstr "inaktiverades"
|
||||
|
||||
msgid "reactivated"
|
||||
msgstr ""
|
||||
msgstr "återaktiverades"
|
||||
|
||||
msgid "renamed to"
|
||||
msgstr ""
|
||||
msgstr "döptes om till"
|
||||
|
||||
msgid "External link changed to"
|
||||
msgstr ""
|
||||
msgstr "Extern länk ändrades till"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
msgstr "Summa"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr ""
|
||||
msgstr "Summa i %(currency)s"
|
||||
|
||||
msgid "modified"
|
||||
msgstr ""
|
||||
msgstr "ändrades"
|
||||
|
||||
msgid "removed"
|
||||
msgstr ""
|
||||
msgstr "togs bort"
|
||||
|
||||
msgid "changed in a unknown way"
|
||||
msgstr ""
|
||||
msgstr "ändrades på ett okänt sätt"
|
||||
|
||||
msgid "Nothing to list"
|
||||
msgstr ""
|
||||
msgstr "Inget att lista"
|
||||
|
||||
msgid "Someone probably cleared the project history."
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage your shared <br />expenses, easily"
|
||||
msgstr ""
|
||||
msgstr "Hantera dina utdelade <br />kostnader, lätt"
|
||||
|
||||
msgid "Try out the demo"
|
||||
msgstr ""
|
||||
msgstr "Prova demot"
|
||||
|
||||
msgid "You're sharing a house?"
|
||||
msgstr ""
|
||||
msgstr "Delar du ett hus?"
|
||||
|
||||
msgid "Going on holidays with friends?"
|
||||
msgstr ""
|
||||
msgstr "Ska du på semester med dina vänner?"
|
||||
|
||||
msgid "Simply sharing money with others?"
|
||||
msgstr ""
|
||||
msgstr "Delar du helt enkelt pengar med andra?"
|
||||
|
||||
msgid "We can help!"
|
||||
msgstr ""
|
||||
msgstr "Vi kan hjälpa!"
|
||||
|
||||
msgid "Log in to an existing project"
|
||||
msgstr ""
|
||||
msgstr "Logga in i ett befintligt projekt"
|
||||
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
msgstr "Logga in"
|
||||
|
||||
msgid "can't remember your password?"
|
||||
msgstr ""
|
||||
msgstr "kan du inte komma ihåg ditt lösenord?"
|
||||
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
msgstr "Skapa"
|
||||
|
||||
msgid ""
|
||||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
|
@ -578,121 +606,121 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr ""
|
||||
msgstr "Kontoansvarig"
|
||||
|
||||
msgid "Bills"
|
||||
msgstr ""
|
||||
msgstr "Räkningar"
|
||||
|
||||
msgid "Settle"
|
||||
msgstr ""
|
||||
|
||||
msgid "Statistics"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
msgstr "Statistik"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
msgstr "Språk"
|
||||
|
||||
msgid "Projects"
|
||||
msgstr ""
|
||||
msgstr "Projekt"
|
||||
|
||||
msgid "Start a new project"
|
||||
msgstr ""
|
||||
msgstr "Starta ett nytt projekt"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Historik"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Inställningar"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
msgstr "Andra projekt :"
|
||||
|
||||
msgid "switch to"
|
||||
msgstr ""
|
||||
msgstr "byt till"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
msgstr "Instrumentpanel"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
msgstr "Logga ut"
|
||||
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
msgstr "Kod"
|
||||
|
||||
msgid "Mobile Application"
|
||||
msgstr ""
|
||||
msgstr "Mobilapplikation"
|
||||
|
||||
msgid "Documentation"
|
||||
msgstr ""
|
||||
msgstr "Dokumentation"
|
||||
|
||||
msgid "Administation Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "\"I hate money\" is a free software"
|
||||
msgstr ""
|
||||
msgstr "\"Jag hatar pengar\" är en fri mjukvara"
|
||||
|
||||
msgid "you can contribute and improve it!"
|
||||
msgstr ""
|
||||
msgstr "du kan bidra och förbättra det!"
|
||||
|
||||
#, python-format
|
||||
msgid "%(amount)s each"
|
||||
msgstr ""
|
||||
msgstr "%(amount)s var"
|
||||
|
||||
msgid "Invite people"
|
||||
msgstr ""
|
||||
msgstr "Bjud in personer"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr ""
|
||||
msgstr "Du borde börja med att lägga till deltagare"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr ""
|
||||
msgstr "Lägg till en ny räkning"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
msgstr "Nyare räkningar"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
msgstr "Äldre räkningar"
|
||||
|
||||
msgid "When?"
|
||||
msgstr ""
|
||||
msgstr "När?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr ""
|
||||
msgstr "Vem betalade?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr ""
|
||||
msgstr "För vad?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr ""
|
||||
msgstr "Hur mycket?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr ""
|
||||
msgstr "Lades till %(date)s"
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr ""
|
||||
msgstr "Alla"
|
||||
|
||||
#, python-format
|
||||
msgid "Everyone but %(excluded)s"
|
||||
msgstr ""
|
||||
msgstr "Alla förutom %(excluded)s"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr ""
|
||||
msgstr "Inga räkningar"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr ""
|
||||
msgstr "Ingenting att lista än."
|
||||
|
||||
msgid "You probably want to"
|
||||
msgstr ""
|
||||
msgstr "Du kanske vill"
|
||||
|
||||
msgid "add a bill"
|
||||
msgstr ""
|
||||
msgstr "lägg till en räkning"
|
||||
|
||||
msgid "add participants"
|
||||
msgstr ""
|
||||
msgstr "lägg till deltagare"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr ""
|
||||
msgstr "Lösenordspåminnare"
|
||||
|
||||
msgid ""
|
||||
"A link to reset your password has been sent to you, please check your "
|
||||
|
@ -700,19 +728,19 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Return to home page"
|
||||
msgstr ""
|
||||
msgstr "Återgå till första-sidan"
|
||||
|
||||
msgid "Your projects"
|
||||
msgstr ""
|
||||
msgstr "Dina projekt"
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
msgstr "Återställ ditt lösenord"
|
||||
|
||||
msgid "Invite people to join this project"
|
||||
msgstr ""
|
||||
msgstr "Bjud in personer att ansluta till det här projektet"
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
msgstr "Dela ut identifierare & kod"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
|
@ -720,13 +748,13 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
msgstr "Identifierare:"
|
||||
|
||||
msgid "Share the Link"
|
||||
msgstr ""
|
||||
msgstr "Dela ut länken"
|
||||
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
msgstr "Du kan direkt dela ut följande länk via föredraget media"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr ""
|
||||
|
@ -739,31 +767,32 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr ""
|
||||
msgstr "Vem betalar?"
|
||||
|
||||
msgid "To whom?"
|
||||
msgstr ""
|
||||
msgstr "Till vem?"
|
||||
|
||||
msgid "Who?"
|
||||
msgstr ""
|
||||
msgstr "Vem?"
|
||||
|
||||
msgid "Balance"
|
||||
msgstr ""
|
||||
msgstr "Saldo"
|
||||
|
||||
msgid "deactivate"
|
||||
msgstr ""
|
||||
msgstr "inaktivera"
|
||||
|
||||
msgid "reactivate"
|
||||
msgstr ""
|
||||
msgstr "återaktivera"
|
||||
|
||||
msgid "Paid"
|
||||
msgstr ""
|
||||
msgstr "Betald"
|
||||
|
||||
msgid "Spent"
|
||||
msgstr ""
|
||||
|
||||
msgid "Expenses by Month"
|
||||
msgstr ""
|
||||
msgstr "Kostnader per månad"
|
||||
|
||||
msgid "Period"
|
||||
msgstr ""
|
||||
msgstr "Period"
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-06-30 19:34+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-07-01 18:41+0000\n"
|
||||
"Last-Translator: rohitn01 <rohitmen01@gmail.com>\n"
|
||||
"Language-Team: Tamil <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/ta/>\n"
|
||||
"Language: ta\n"
|
||||
"Language-Team: Tamil <https://hosted.weblate.org/projects/i-hate-money/i"
|
||||
"-hate-money/ta/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -24,7 +25,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "திட்டத்தின் பெயர்"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "தனியார் குறியீடு"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -39,6 +41,11 @@ msgstr "திட்ட வரலாற்றுக்கு ஐபி கண்
|
|||
msgid "Default Currency"
|
||||
msgstr "இயல்புநிலை நாணயம்"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "முன்னர் ஏற்றுமதி செய்யப்பட்ட JSON கோப்பை இறக்குமதி செய்க"
|
||||
|
||||
|
@ -48,6 +55,9 @@ msgstr "இறக்குமதி"
|
|||
msgid "Project identifier"
|
||||
msgstr "திட்ட அடையாளங்காட்டி"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "தனியார் குறியீடு"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "திட்டத்தை உருவாக்கவும்"
|
||||
|
||||
|
@ -56,8 +66,8 @@ msgid ""
|
|||
"A project with this identifier (\"%(project)s\") already exists. Please "
|
||||
"choose a new identifier"
|
||||
msgstr ""
|
||||
"இந்த அடையாளங்காட்டியுடன் ஒரு திட்டம் (\"%(project)s\") ஏற்கனவே இருக்கிறது. "
|
||||
"புதிய அடையாளங்காட்டியைத் தேர்ந்தெடுக்கவும்"
|
||||
"இந்த அடையாளங்காட்டியுடன் ஒரு திட்டம் (\"%(project)s\") ஏற்கனவே "
|
||||
"இருக்கிறது. புதிய அடையாளங்காட்டியைத் தேர்ந்தெடுக்கவும்"
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "உள்ளே வா"
|
||||
|
@ -180,8 +190,8 @@ msgstr "இந்த தனிப்பட்ட குறியீடு சர
|
|||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
"நீங்கள் இப்போது உருவாக்கியுள்ளீர்கள் '%(project)s' உங்கள் செலவுகளை பகிர்ந்து "
|
||||
"கொள்ள"
|
||||
"நீங்கள் இப்போது உருவாக்கியுள்ளீர்கள் '%(project)s' உங்கள் செலவுகளை "
|
||||
"பகிர்ந்து கொள்ள"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "ஒரு நினைவூட்டல் மின்னஞ்சல் உங்களுக்கு அனுப்பப்பட்டுள்ளது"
|
||||
|
@ -190,8 +200,8 @@ msgid ""
|
|||
"We tried to send you an reminder email, but there was an error. You can "
|
||||
"still use the project normally."
|
||||
msgstr ""
|
||||
"உங்களுக்கு நினைவூட்டல் மின்னஞ்சலை அனுப்ப முயற்சித்தோம், ஆனால் பிழை ஏற்பட்டது"
|
||||
". நீங்கள் இன்னும் திட்டத்தை சாதாரணமாக பயன்படுத்தலாம்."
|
||||
"உங்களுக்கு நினைவூட்டல் மின்னஞ்சலை அனுப்ப முயற்சித்தோம், ஆனால் பிழை "
|
||||
"ஏற்பட்டது. நீங்கள் இன்னும் திட்டத்தை சாதாரணமாக பயன்படுத்தலாம்."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
|
@ -203,8 +213,8 @@ msgid ""
|
|||
"contact the administrator."
|
||||
msgstr ""
|
||||
"மன்னிக்கவும், கடவுச்சொல் மீட்டமைப்பு வழிமுறைகளுடன் உங்களுக்கு மின்னஞ்சல் "
|
||||
"அனுப்பும்போது பிழை ஏற்பட்டது. சேவையகத்தின் மின்னஞ்சல் உள்ளமைவை சரிபார்க்கவும்"
|
||||
" அல்லது நிர்வாகியைத் தொடர்பு கொள்ளவும்."
|
||||
"அனுப்பும்போது பிழை ஏற்பட்டது. சேவையகத்தின் மின்னஞ்சல் உள்ளமைவை "
|
||||
"சரிபார்க்கவும் அல்லது நிர்வாகியைத் தொடர்பு கொள்ளவும்."
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "டோக்கன் வழங்கப்படவில்லை"
|
||||
|
@ -325,6 +335,13 @@ msgstr ""
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr ""
|
||||
|
||||
msgid "Download Mobile Application"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "உள்ளே வா"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -607,12 +624,6 @@ msgstr ""
|
|||
msgid "Statistics"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
|
||||
|
@ -622,6 +633,12 @@ msgstr ""
|
|||
msgid "Start a new project"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -785,3 +802,4 @@ msgstr ""
|
|||
|
||||
msgid "Period"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-06-01 16:41+0000\n"
|
||||
"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
|
||||
"Language-Team: Turkish <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/tr/>\n"
|
||||
"Language: tr\n"
|
||||
"Language-Team: Turkish <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/tr/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.1-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -25,7 +25,8 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Proje adı"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Özel kod"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -40,6 +41,11 @@ msgstr "Proje geçmişi için IP izlemeyi kullan"
|
|||
msgid "Default Currency"
|
||||
msgstr "Öntanımlı Para Birimi"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Önceden dışa aktarılan JSON dosyasını içe aktar"
|
||||
|
||||
|
@ -49,6 +55,9 @@ msgstr "İçe aktar"
|
|||
msgid "Project identifier"
|
||||
msgstr "Proje tanımlayıcısı"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Özel kod"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Proje oluştur"
|
||||
|
||||
|
@ -324,6 +333,14 @@ msgstr "göster"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "Gösterge paneli şu anda devre dışı."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Telefon Uygulaması"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Alın"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "emin misiniz?"
|
||||
|
||||
|
@ -629,12 +646,6 @@ msgstr "Öde"
|
|||
msgid "Statistics"
|
||||
msgstr "İstatistikler"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Geçmiş"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ayarlar"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Diller"
|
||||
|
||||
|
@ -644,6 +655,12 @@ msgstr "Projeler"
|
|||
msgid "Start a new project"
|
||||
msgstr "Yeni bir proje başlat"
|
||||
|
||||
msgid "History"
|
||||
msgstr "Geçmiş"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ayarlar"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Diğer projeler:"
|
||||
|
||||
|
@ -837,3 +854,4 @@ msgstr "Dönem"
|
|||
#~ " Sunucu tarafından olduğu gibi "
|
||||
#~ "saklanmaktadır, bu yüzden kişisel bir "
|
||||
#~ "parolayı tekrar kullanmayın!"
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-05-21 18:48+0000\n"
|
||||
"Last-Translator: Andrew Zaplitnyak <zaplitnyak@gmail.com>\n"
|
||||
"Language: uk\n"
|
||||
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -24,7 +24,8 @@ msgstr "Не вірна сума чи вираз. Приймаються тіл
|
|||
msgid "Project name"
|
||||
msgstr "Назва проєкту"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Приватний код"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -39,6 +40,11 @@ msgstr "Слідкувати за мережевою адресою(IP) для
|
|||
msgid "Default Currency"
|
||||
msgstr "Стандартна валюта"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Імпортувати попередньо експортований JSON файл"
|
||||
|
||||
|
@ -48,6 +54,9 @@ msgstr "Імпортувати"
|
|||
msgid "Project identifier"
|
||||
msgstr "Ідентифікатор проєкту"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Приватний код"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Створити проєкт"
|
||||
|
||||
|
@ -311,6 +320,13 @@ msgstr ""
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr ""
|
||||
|
||||
msgid "Download Mobile Application"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Отримати в"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr ""
|
||||
|
||||
|
@ -593,12 +609,6 @@ msgstr ""
|
|||
msgid "Statistics"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
|
||||
|
@ -608,6 +618,12 @@ msgstr ""
|
|||
msgid "Start a new project"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -1,19 +1,20 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-30 21:50+0200\n"
|
||||
"POT-Creation-Date: 2021-07-07 01:01+0200\n"
|
||||
"PO-Revision-Date: 2020-10-12 04:47+0000\n"
|
||||
"Last-Translator: Jwen921 <yangjingwen0921@gmail.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
|
||||
"i-hate-money/i-hate-money/zh_Hans/>\n"
|
||||
"Language: zh_Hans\n"
|
||||
"Language-Team: Chinese (Simplified) "
|
||||
"<https://hosted.weblate.org/projects/i-hate-money/i-hate-money/zh_Hans/>"
|
||||
"\n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.3-dev\n"
|
||||
"Generated-By: Babel 2.8.0\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -23,7 +24,8 @@ msgstr "金额或符号无效。仅限数字与+-*/符号。"
|
|||
msgid "Project name"
|
||||
msgstr "账目名称"
|
||||
|
||||
msgid "Private code"
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "共享密钥"
|
||||
|
||||
msgid "Email"
|
||||
|
@ -38,6 +40,11 @@ msgstr "用IP追踪项目历史"
|
|||
msgid "Default Currency"
|
||||
msgstr "默认货币"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "导入之前的JSON 文件"
|
||||
|
||||
|
@ -47,6 +54,9 @@ msgstr "导入"
|
|||
msgid "Project identifier"
|
||||
msgstr "账目名称"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "共享密钥"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "创建账目明细"
|
||||
|
||||
|
@ -308,6 +318,14 @@ msgstr "显示"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "操作面板失效"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "手机软件"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "进入"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "确定?"
|
||||
|
||||
|
@ -602,12 +620,6 @@ msgstr "解决"
|
|||
msgid "Statistics"
|
||||
msgstr "统计"
|
||||
|
||||
msgid "History"
|
||||
msgstr "历史"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "设置"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "语言"
|
||||
|
||||
|
@ -617,6 +629,12 @@ msgstr "项目"
|
|||
msgid "Start a new project"
|
||||
msgstr "开始一个新项目"
|
||||
|
||||
msgid "History"
|
||||
msgstr "历史"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "设置"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "其他项目:"
|
||||
|
||||
|
@ -798,3 +816,4 @@ msgstr "期间"
|
|||
#~ "is by the server, so don\\'t reuse"
|
||||
#~ " a personal password!"
|
||||
#~ msgstr "进入码已发送给朋友,会被保存在服务器,不要重复使用私人密码!"
|
||||
|
||||
|
|
|
@ -36,7 +36,6 @@ from sqlalchemy_continuum import Operation
|
|||
from werkzeug.exceptions import NotFound
|
||||
from werkzeug.security import check_password_hash, generate_password_hash
|
||||
|
||||
from ihatemoney.currency_convertor import CurrencyConverter
|
||||
from ihatemoney.forms import (
|
||||
AdminAuthenticationForm,
|
||||
AuthenticationForm,
|
||||
|
@ -161,7 +160,7 @@ def admin():
|
|||
client_ip = request.remote_addr
|
||||
if not login_throttler.is_login_allowed(client_ip):
|
||||
msg = _("Too many failed login attempts, please retry later.")
|
||||
form.errors["admin_password"] = [msg]
|
||||
form["admin_password"].errors = [msg]
|
||||
return render_template(
|
||||
"admin.html",
|
||||
form=form,
|
||||
|
@ -183,7 +182,7 @@ def admin():
|
|||
"This admin password is not the right one. Only %(num)d attempts left.",
|
||||
num=login_throttler.get_remaining_attempts(client_ip),
|
||||
)
|
||||
form.errors["admin_password"] = [msg]
|
||||
form["admin_password"].errors = [msg]
|
||||
return render_template(
|
||||
"admin.html",
|
||||
form=form,
|
||||
|
@ -210,7 +209,7 @@ def authenticate(project_id=None):
|
|||
# User doesn't provide project identifier or a valid token
|
||||
# return to authenticate form
|
||||
msg = _("You either provided a bad token or no project identifier.")
|
||||
form.errors["id"] = [msg]
|
||||
form["id"].errors = [msg]
|
||||
return render_template("authenticate.html", form=form)
|
||||
|
||||
project = Project.query.get(project_id)
|
||||
|
@ -246,7 +245,7 @@ def authenticate(project_id=None):
|
|||
return redirect(url_for(".list_bills"))
|
||||
if is_post_auth and not check_password_hash(project.password, form.password.data):
|
||||
msg = _("This private code is not the right one")
|
||||
form.errors["password"] = [msg]
|
||||
form["password"].errors = [msg]
|
||||
|
||||
return render_template("authenticate.html", form=form)
|
||||
|
||||
|
@ -400,7 +399,7 @@ def reset_password():
|
|||
|
||||
@main.route("/<project_id>/edit", methods=["GET", "POST"])
|
||||
def edit_project():
|
||||
edit_form = EditProjectForm()
|
||||
edit_form = EditProjectForm(id=g.project.id)
|
||||
import_form = UploadForm()
|
||||
# Import form
|
||||
if import_form.validate_on_submit():
|
||||
|
@ -415,17 +414,6 @@ def edit_project():
|
|||
# Edit form
|
||||
if edit_form.validate_on_submit():
|
||||
project = edit_form.update(g.project)
|
||||
# Update converted currency
|
||||
if project.default_currency != CurrencyConverter.no_currency:
|
||||
for bill in project.get_bills():
|
||||
|
||||
if bill.original_currency == CurrencyConverter.no_currency:
|
||||
bill.original_currency = project.default_currency
|
||||
|
||||
bill.converted_amount = CurrencyConverter().exchange_currency(
|
||||
bill.amount, bill.original_currency, project.default_currency
|
||||
)
|
||||
db.session.add(bill)
|
||||
|
||||
db.session.add(project)
|
||||
db.session.commit()
|
||||
|
@ -549,7 +537,7 @@ def export_project(file, format):
|
|||
|
||||
return send_file(
|
||||
file2export,
|
||||
attachment_filename=f"{g.project.id}-{file}.{format}",
|
||||
download_name=f"{g.project.id}-{file}.{format}",
|
||||
as_attachment=True,
|
||||
)
|
||||
|
||||
|
|
25
setup.cfg
25
setup.cfg
|
@ -27,18 +27,17 @@ install_requires =
|
|||
cachetools~=4.1
|
||||
debts~=0.5
|
||||
email_validator~=1.0
|
||||
Flask-Babel~=1.0
|
||||
Flask-Babel>=1,<3
|
||||
Flask-Cors~=3.0
|
||||
Flask-Mail~=0.9
|
||||
Flask-Migrate>=2.5.3 # Not following semantic versioning (e.g. https://github.com/miguelgrinberg/flask-migrate/commit/1af28ba273de6c88544623b8dc02dd539340294b)
|
||||
Flask-Migrate>=2.5.3,<4 # Not following semantic versioning (e.g. https://github.com/miguelgrinberg/flask-migrate/commit/1af28ba273de6c88544623b8dc02dd539340294b)
|
||||
Flask-RESTful~=0.3
|
||||
Flask-Script~=2.0
|
||||
Flask-SQLAlchemy~=2.4
|
||||
Flask-WTF~=0.14,>=0.14.3 # See b76da172652da94c1f9c4b2fdd965375da8a2c3f
|
||||
WTForms~=2.2.1,<2.3 # See #567
|
||||
Flask~=1.1
|
||||
itsdangerous~=1.1
|
||||
Jinja2~=2.11
|
||||
WTForms>=2.3.1,<2.4
|
||||
Flask>=1.1,<3.0
|
||||
itsdangerous>=1.1,<3.0
|
||||
Jinja2>=3.0,<4.0
|
||||
requests~=2.22
|
||||
SQLAlchemy-Continuum~=1.3
|
||||
SQLAlchemy~=1.3.0 # New 1.4 changes API, see #728
|
||||
|
@ -52,10 +51,20 @@ dev =
|
|||
pytest>=5.4.1
|
||||
tox>=3.14.6
|
||||
zest.releaser>=6.20.1
|
||||
psycopg2-binary>=2.8.5
|
||||
PyMySQL>=0.9,<0.10
|
||||
|
||||
doc =
|
||||
Sphinx==4.0.3
|
||||
docutils==0.17.1
|
||||
|
||||
[options.entry_points]
|
||||
flask.commands =
|
||||
generate_password_hash = ihatemoney.manage:password_hash
|
||||
generate-config = ihatemoney.manage:generate_config
|
||||
|
||||
console_scripts =
|
||||
ihatemoney = ihatemoney.manage:main
|
||||
ihatemoney = ihatemoney.manage:cli
|
||||
|
||||
paste.app_factory =
|
||||
main = ihatemoney.run:main
|
||||
|
|
23
tox.ini
23
tox.ini
|
@ -1,8 +1,9 @@
|
|||
[tox]
|
||||
envlist = py39,py38,py37,py36,docs,flake8,black
|
||||
envlist = py39,py38,py37,py36,lint_docs
|
||||
skip_missing_interpreters = True
|
||||
|
||||
[testenv]
|
||||
passenv = TESTING_SQLALCHEMY_DATABASE_URI
|
||||
|
||||
commands =
|
||||
python --version
|
||||
|
@ -14,20 +15,14 @@ deps =
|
|||
# To be sure we are importing ihatemoney pkg from pip-installed version
|
||||
changedir = /tmp
|
||||
|
||||
[testenv:docs]
|
||||
commands = sphinx-build -a -n -b html -d docs/_build/doctrees docs docs/_build/html
|
||||
deps =
|
||||
-rdocs/requirements.txt
|
||||
changedir = {toxinidir}
|
||||
|
||||
[testenv:black]
|
||||
[testenv:lint_docs]
|
||||
commands =
|
||||
black --check --target-version=py36 .
|
||||
isort -c -rc .
|
||||
changedir = {toxinidir}
|
||||
|
||||
[testenv:flake8]
|
||||
commands = flake8 ihatemoney
|
||||
isort -c .
|
||||
flake8 ihatemoney
|
||||
sphinx-build -a -n -b html -d docs/_build/doctrees docs docs/_build/html
|
||||
deps =
|
||||
-e.[dev,doc]
|
||||
changedir = {toxinidir}
|
||||
|
||||
[flake8]
|
||||
|
@ -41,5 +36,5 @@ extend-ignore =
|
|||
python =
|
||||
3.6: py36
|
||||
3.7: py37
|
||||
3.8: py38, docs, black, flake8
|
||||
3.8: py38, lint_docs
|
||||
3.9: py39
|
||||
|
|
Loading…
Reference in a new issue