mirror of
https://github.com/spiral-project/ihatemoney.git
synced 2025-05-14 08:21:49 +02:00
Compare commits
1 commit
cff8d8335e
...
7ba6e81344
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7ba6e81344 |
129 changed files with 7037 additions and 14159 deletions
|
@ -14,7 +14,9 @@ CONTRIBUTORS
|
|||
docker-compose.*
|
||||
Dockerfile
|
||||
docs
|
||||
LICENSE
|
||||
Makefile
|
||||
MANIFEST.in
|
||||
README.md
|
||||
SECURITY.md
|
||||
tox.ini
|
||||
|
|
26
.github/workflows/check-doc.yml
vendored
26
.github/workflows/check-doc.yml
vendored
|
@ -1,26 +0,0 @@
|
|||
name: Check doc
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ 'master', 'stable-*' ]
|
||||
pull_request:
|
||||
branches: [ 'master', 'stable-*' ]
|
||||
|
||||
jobs:
|
||||
|
||||
test_doc:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.11"
|
||||
cache: 'pip'
|
||||
cache-dependency-path: '**/pyproject.toml'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install tox
|
||||
- name: Check we can generate documentation
|
||||
run: tox -e docs
|
10
.github/workflows/dockerhub.yml
vendored
10
.github/workflows/dockerhub.yml
vendored
|
@ -1,11 +1,11 @@
|
|||
name: Docker build
|
||||
name: CI to Docker Hub
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ['*']
|
||||
branches: [ 'master', 'stable-*' ]
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ 'master', 'stable-*' ]
|
||||
branches: [ master ]
|
||||
|
||||
|
||||
jobs:
|
||||
|
@ -18,7 +18,7 @@ jobs:
|
|||
- name: Test image # Checks we are able to run the container.
|
||||
run: docker compose -f docker-compose.test.yml run sut
|
||||
|
||||
build_upload:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
needs: test
|
||||
if: github.event_name != 'pull_request'
|
||||
|
@ -61,7 +61,7 @@ jobs:
|
|||
tags: ${{ steps.meta.outputs.tags }}
|
||||
cache-from: type=local,src=/tmp/.buildx-cache
|
||||
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
platform: linux/amd64,linux/arm64,linux/arm/v7
|
||||
|
||||
- name: Image digest
|
||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
||||
|
|
|
@ -1,37 +1,20 @@
|
|||
name: Lint & unit tests
|
||||
name: Test & Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ 'master', 'stable-*' ]
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ 'master', 'stable-*' ]
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.11"
|
||||
cache: 'pip'
|
||||
cache-dependency-path: '**/pyproject.toml'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install tox
|
||||
- name: Run Lint
|
||||
run: tox -e lint
|
||||
build:
|
||||
|
||||
test:
|
||||
# Dependency on linting to avoid running our expensive matrix test for nothing
|
||||
needs: lint
|
||||
runs-on: ubuntu-latest
|
||||
# Use postgresql and MariaDB versions of Debian bookworm
|
||||
|
||||
# Use postgresql and MariaDB versions of Debian buster
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15
|
||||
image: postgres:11
|
||||
ports:
|
||||
- 5432:5432
|
||||
env:
|
||||
|
@ -41,7 +24,7 @@ jobs:
|
|||
options:
|
||||
--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
||||
mariadb:
|
||||
image: mariadb:10.11
|
||||
image: mariadb:10.3
|
||||
env:
|
||||
MARIADB_ROOT_PASSWORD: ihatemoney
|
||||
MARIADB_DATABASE: ihatemoney_ci
|
||||
|
@ -53,27 +36,27 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python-version: [3.7, 3.8, 3.9, "3.10", "3.11", "3.12"]
|
||||
python-version: [3.7, 3.8, 3.9, "3.10", "3.11"]
|
||||
dependencies: [normal]
|
||||
database: [sqlite]
|
||||
# Test other databases with only a few versions of Python (Debian bullseye has 3.9, bookworm has 3.11)
|
||||
# Test other databases only with one version of Python (Debian buster has 3.7)
|
||||
include:
|
||||
- python-version: 3.9
|
||||
- python-version: 3.7
|
||||
dependencies: normal
|
||||
database: postgresql
|
||||
- python-version: 3.9
|
||||
dependencies: normal
|
||||
database: mariadb
|
||||
- python-version: 3.11
|
||||
dependencies: normal
|
||||
database: postgresql
|
||||
- python-version: 3.11
|
||||
- python-version: 3.7
|
||||
dependencies: normal
|
||||
database: mariadb
|
||||
# Try a few variants with the minimal versions supported
|
||||
- python-version: 3.7
|
||||
dependencies: minimal
|
||||
database: sqlite
|
||||
- python-version: 3.7
|
||||
dependencies: minimal
|
||||
database: postgresql
|
||||
- python-version: 3.7
|
||||
dependencies: minimal
|
||||
database: mariadb
|
||||
- python-version: 3.9
|
||||
dependencies: minimal
|
||||
database: sqlite
|
||||
|
@ -83,15 +66,6 @@ jobs:
|
|||
- python-version: "3.11"
|
||||
dependencies: minimal
|
||||
database: sqlite
|
||||
- python-version: "3.11"
|
||||
dependencies: minimal
|
||||
database: postgresql
|
||||
- python-version: "3.11"
|
||||
dependencies: minimal
|
||||
database: mariadb
|
||||
- python-version: "3.12"
|
||||
dependencies: minimal
|
||||
database: sqlite
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
@ -100,9 +74,9 @@ jobs:
|
|||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: 'pip'
|
||||
cache-dependency-path: '**/pyproject.toml'
|
||||
cache-dependency-path: '**/setup.cfg'
|
||||
- name: Change dependencies to minimal supported versions
|
||||
run: sed -i -e 's/>=/==/g; s/~=.*==\(.*\)/==\1/g; s/~=/==/g;' pyproject.toml
|
||||
run: sed -i -e 's/>=/==/g; s/~=.*==\(.*\)/==\1/g; s/~=/==/g;' setup.cfg
|
||||
if: matrix.dependencies == 'minimal'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
|
@ -124,3 +98,6 @@ jobs:
|
|||
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.11'
|
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,6 +1,5 @@
|
|||
*.pyc
|
||||
*.egg-info
|
||||
*.mo
|
||||
dist
|
||||
.venv
|
||||
docs/_build/
|
||||
|
@ -17,5 +16,4 @@ ihatemoney/budget.db
|
|||
.DS_Store
|
||||
.idea
|
||||
.python-version
|
||||
.coverage*
|
||||
prof
|
||||
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
version: 2
|
||||
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "3.11"
|
||||
|
||||
python:
|
||||
version: "3.7"
|
||||
install:
|
||||
- method: pip
|
||||
path: .
|
||||
|
|
11
.travis.yml
Normal file
11
.travis.yml
Normal file
|
@ -0,0 +1,11 @@
|
|||
sudo: false
|
||||
language: python
|
||||
python:
|
||||
- "3.7"
|
||||
- "3.8"
|
||||
- "3.9"
|
||||
script: tox
|
||||
before_install:
|
||||
- python -m pip install --upgrade pip virtualenv
|
||||
install:
|
||||
- pip install tox-travis
|
105
CHANGELOG.md
105
CHANGELOG.md
|
@ -2,91 +2,9 @@
|
|||
|
||||
This document describes changes between each past release.
|
||||
|
||||
## 6.2.0 (unreleased)
|
||||
## 6.0.0 (unreleased)
|
||||
|
||||
- Add support for python 3.12 (#757)
|
||||
|
||||
|
||||
## 6.1.5 (2024-03-19)
|
||||
|
||||
- Fix README and changelog not being displayed on PyPI
|
||||
- Fix ability to change project settings when project has existing currency (#1292)
|
||||
- Update translations for Dutch and German
|
||||
|
||||
|
||||
## 6.1.4 (2023-12-14)
|
||||
|
||||
- Fix missing markdown include in manifest (#1274)
|
||||
- Update translations for Chinese, Turkish, Czech, Spanish (Latin America), Swedish
|
||||
|
||||
|
||||
## 6.1.3 (2023-11-23)
|
||||
|
||||
- Revert update to flask and werkzeug 2.3 because of a regression (see #1272)
|
||||
|
||||
|
||||
## 6.1.2 (2023-11-19)
|
||||
|
||||
- Fix password generation command line crash (#1242)
|
||||
- Update to flask and werkzeug 2.3 (#1244)
|
||||
|
||||
|
||||
## 6.1.1 (2023-10-04)
|
||||
|
||||
### Currency conversion API workarounds
|
||||
|
||||
We are using an external API for currency conversion. This API recently
|
||||
started requiring an API key, and this broke I Hate Money in many ways.
|
||||
|
||||
This release adds a set of workarounds for this issue. This should restore
|
||||
basic functionality such as adding bills. However, we had to disable
|
||||
some operations to prevent crashing:
|
||||
|
||||
- Setting or changing the default currency on an existing project is no longer possible.
|
||||
However, setting a project to "No currency" is still possible.
|
||||
- Adding or editing a bill with a currency that differs from the default currency
|
||||
of the project is no longer possible
|
||||
|
||||
[Longer-term solutions are being discussed](https://github.com/spiral-project/ihatemoney/issues/1232).
|
||||
If you are using currencies in your projects, your input is welcome.
|
||||
|
||||
### Added
|
||||
|
||||
- Simplifies adding a bill with keyboard only (#1221)
|
||||
- Add details of bills in history (#1223)
|
||||
- Remember last "For whom?" field when adding a new bill (#1222)
|
||||
- Speed up unit tests (#1214)
|
||||
- Update translations for Spanish, Russian, Kannada, Swedish, Polish, German, and Italian
|
||||
|
||||
### Fixed
|
||||
- Fix remembering the last selected payer when switching project (#1224)
|
||||
|
||||
|
||||
## 6.1.0 (2023-07-29)
|
||||
|
||||
### Added
|
||||
- Add RSS feed for each project (#1158)
|
||||
- Security: require private code to edit a project settings (#1204)
|
||||
|
||||
### Fixed
|
||||
- Fix 404 page crash (#1201)
|
||||
|
||||
|
||||
## 6.0.1 (2023-07-22)
|
||||
|
||||
### Added
|
||||
- Add support for `APPLICATION_ROOT` in Docker container (#1189)
|
||||
- Improve docker-compose example: admin password and volume for database (#1169)
|
||||
|
||||
### Fixed
|
||||
- Fix docker-compose example quoting (#1164)
|
||||
- Fix crash when using existing sessions (migrate them to dict) (#1194)
|
||||
- Add newly created projects to the list of projects (#1193)
|
||||
|
||||
|
||||
## 6.0.0 (2023-07-13)
|
||||
|
||||
### Breaking changes
|
||||
### Breaking
|
||||
- Drop Python 3.6 support
|
||||
- Add Python 3.11 support
|
||||
|
||||
|
@ -94,23 +12,12 @@ The minimum supported version is now Python 3.7, and the project is
|
|||
tested with up to Python 3.11
|
||||
|
||||
### Added
|
||||
- Enable new languages: Catalan, Czech, Spanish, Persian, Hebrew, Hungarian, Kannada, Serbian, Telugu, Thai
|
||||
- Build ARM64 and ARMv7 Docker image (#1141)
|
||||
- Allow bills with an amount of zero (#1133)
|
||||
- Add confirmation for expense deletion (#1096)
|
||||
- Display a QR code when inviting people (#1000)
|
||||
- Add a cancel button when editing a bill for better UX (#1013)
|
||||
|
||||
### Fixed
|
||||
- Fix project deletion in the dashboard (#1094)
|
||||
- Fix duplicate project name in dropdown list (#1082)
|
||||
- Fix captcha validation, it should be case insensitive on both side (#1061)
|
||||
- Fix CSRF on logout (#1040)
|
||||
- Fix XSS when inviting people by email (#1044)
|
||||
- Build ARM64 and ARMv7 Docker image
|
||||
|
||||
### Changed
|
||||
- Use a better quality favicon (#1102)
|
||||
- Use Flask-Limiter to implement rate limiting (#1054)
|
||||
- Add a cancel button when editing a bill for better UX
|
||||
- Translations: Bengali, Indonesian, Polish
|
||||
- Pin Werkzeug to avoid dropping Python 3.6 compatibility
|
||||
|
||||
## 5.2.0 (2022-04-07)
|
||||
|
||||
|
|
|
@ -17,15 +17,12 @@ bmatticus
|
|||
Brice Maron
|
||||
Byron Ullauri
|
||||
Carey Metcalfe
|
||||
cbrosnan
|
||||
Daniel Schreiber
|
||||
DavidRThrashJr
|
||||
donkers
|
||||
Edwin Smulders
|
||||
Elizabeth Sherrock
|
||||
Éloi Rivard
|
||||
eMerzh
|
||||
Erwan Lacoudre
|
||||
Feth AREZKI
|
||||
Frédéric Sureau
|
||||
Gianluca De Cola
|
||||
|
@ -33,8 +30,6 @@ Glandos
|
|||
Heimen Stoffels
|
||||
James Leong
|
||||
Jocelyn Delalande
|
||||
Jojo144
|
||||
Lod
|
||||
Luc Didry
|
||||
Lucas Verney
|
||||
Marien Fressinaud
|
||||
|
@ -51,12 +46,10 @@ Quentin Roy
|
|||
Rémy HUBSCHER
|
||||
Richard Coates
|
||||
Salamandar
|
||||
Saroj Regmi
|
||||
THANOS SIOURDAKIS
|
||||
Toover
|
||||
Xavier Mehrenberger
|
||||
Youe Graillot
|
||||
zorun
|
||||
Zottelchen
|
||||
|
||||
The manual drawings are from Coline Billon, they are under CC BY 4.0.
|
||||
|
|
|
@ -26,7 +26,6 @@ ENV DEBUG="False" \
|
|||
SHOW_ADMIN_EMAIL="True" \
|
||||
SQLALCHEMY_DATABASE_URI="sqlite:////database/ihatemoney.db" \
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS="False" \
|
||||
APPLICATION_ROOT="/" \
|
||||
ENABLE_CAPTCHA="False" \
|
||||
LEGAL_LINK=""
|
||||
|
||||
|
|
3
MANIFEST.in
Normal file
3
MANIFEST.in
Normal file
|
@ -0,0 +1,3 @@
|
|||
include *.rst
|
||||
recursive-include ihatemoney *.rst *.py *.yaml *.po *.mo *.html *.css *.js *.eot *.svg *.woff *.txt *.png *.webp *.ini *.cfg *.j2 *.jpg *.gif *.ico
|
||||
include LICENSE CONTRIBUTORS CHANGELOG.rst
|
12
Makefile
12
Makefile
|
@ -11,7 +11,7 @@ MAGICK_MOGRIFY := mogrify
|
|||
.PHONY: all
|
||||
all: install ## Alias for install
|
||||
.PHONY: install
|
||||
install: virtualenv pyproject.toml $(INSTALL_STAMP) ## Install dependencies
|
||||
install: virtualenv setup.cfg $(INSTALL_STAMP) ## Install dependencies
|
||||
$(INSTALL_STAMP):
|
||||
$(VENV)/bin/pip install -U pip
|
||||
$(VENV)/bin/pip install -e .
|
||||
|
@ -23,7 +23,7 @@ $(PYTHON):
|
|||
$(VIRTUALENV) $(VENV)
|
||||
|
||||
.PHONY: install-dev
|
||||
install-dev: virtualenv pyproject.toml $(INSTALL_STAMP) $(DEV_STAMP) ## Install development dependencies
|
||||
install-dev: virtualenv setup.cfg $(INSTALL_STAMP) $(DEV_STAMP) ## Install development dependencies
|
||||
$(DEV_STAMP): $(PYTHON)
|
||||
$(VENV)/bin/pip install -Ue .[dev]
|
||||
touch $(DEV_STAMP)
|
||||
|
@ -36,9 +36,9 @@ remove-install-stamp:
|
|||
update: remove-install-stamp install ## Update the dependencies
|
||||
|
||||
.PHONY: serve
|
||||
serve: install build-translations ## Run the ihatemoney server
|
||||
serve: install ## Run the ihatemoney server
|
||||
@echo 'Running ihatemoney on http://localhost:5000'
|
||||
FLASK_DEBUG=1 FLASK_APP=ihatemoney.wsgi $(VENV)/bin/flask run --host=0.0.0.0
|
||||
FLASK_DEBUG=1 FLASK_ENV=development FLASK_APP=ihatemoney.wsgi $(VENV)/bin/flask run --host=0.0.0.0
|
||||
|
||||
.PHONY: test
|
||||
test: install-dev ## Run the tests
|
||||
|
@ -74,8 +74,8 @@ compress-assets: compress-showcase ## Compress static assets
|
|||
build-translations: ## Build the translations
|
||||
$(VENV)/bin/pybabel compile -d ihatemoney/translations
|
||||
|
||||
.PHONY: extract-translations
|
||||
extract-translations: ## Extract new translations from source code
|
||||
.PHONY: update-translations
|
||||
update-translations: ## Extract new translations from source code
|
||||
$(VENV)/bin/pybabel extract --add-comments "I18N:" --strip-comments --omit-header --no-location --mapping-file ihatemoney/babel.cfg -o ihatemoney/messages.pot ihatemoney
|
||||
$(VENV)/bin/pybabel update -i ihatemoney/messages.pot -d ihatemoney/translations/
|
||||
|
||||
|
|
33
README.md
33
README.md
|
@ -22,41 +22,10 @@ highly encouraged to do so.
|
|||
|
||||
## Requirements
|
||||
|
||||
- **Python**: version 3.7 to 3.12.
|
||||
- **Python**: version 3.7 to 3.11.
|
||||
- **Backends**: SQLite, PostgreSQL, MariaDB (version 10.3.2 or above),
|
||||
Memory.
|
||||
|
||||
## Current direction (as of 2024)
|
||||
|
||||
Ihatemoney was started in 2011, and we believe the project has reached a certain
|
||||
level of maturity now. The overall energy of contributors is not as high as it
|
||||
used to be.
|
||||
|
||||
In addition, there are now several self-hosted alternatives (for instance
|
||||
[cospend](https://github.com/julien-nc/cospend-nc/tree/main),
|
||||
[spliit](https://github.com/spliit-app/spliit)).
|
||||
|
||||
As maintainers, we believe that the project is still relevant but should gear
|
||||
towards some kind of "maintenance mode":
|
||||
|
||||
* **Simplicity** is now the main goal of the project. It has always been a compass
|
||||
for the project, and the resulting software is appreciated by both users and
|
||||
server administrators. For us, "simplicity" is positive and encompasses both
|
||||
technical aspects (very few javascript code, manageable dependencies, small code
|
||||
size...) and user-visible aspects (straightforward interface, no need to create
|
||||
accounts for people you invite, same web interface on mobile...)
|
||||
|
||||
* **Stability** is prioritized over adding major new features. We found ourselves
|
||||
complexifying the codebase (and the interface) while accepting some
|
||||
contributions. Our goal now is to have a minimal set of features that do most of
|
||||
the job. We believe this will help lower the maintainance burden.
|
||||
|
||||
* **User interface and user experience improvements** are always super welcome !
|
||||
|
||||
It is still possible to propose new features, but they should fit into
|
||||
this new direction. Simplicity of the UI/UX and simplicity of the technical
|
||||
implementation will be the main factors when deciding to accept new features.
|
||||
|
||||
## Contributing
|
||||
|
||||
Do you wish to contribute to IHateMoney? Fantastic! There's a lot of
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 6.2.x | :heavy_check_mark: |
|
||||
| 6.1.x | :heavy_check_mark: |
|
||||
| <= 6.0 | :x: |
|
||||
| 5.0.x | :heavy_check_mark: |
|
||||
| 4.1.x | :heavy_check_mark: |
|
||||
| <= 4.0 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
|
|
|
@ -23,7 +23,6 @@ SHOW_ADMIN_EMAIL = $SHOW_ADMIN_EMAIL
|
|||
SQLACHEMY_DEBUG = DEBUG
|
||||
SQLALCHEMY_DATABASE_URI = "$SQLALCHEMY_DATABASE_URI"
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS = $SQLALCHEMY_TRACK_MODIFICATIONS
|
||||
APPLICATION_ROOT = "$APPLICATION_ROOT"
|
||||
ENABLE_CAPTCHA = $ENABLE_CAPTCHA
|
||||
LEGAL_LINK = "$LEGAL_LINK"
|
||||
EOF
|
||||
|
|
|
@ -1,14 +1,4 @@
|
|||
# This is an example. Please change the configuration variables listed here.
|
||||
#
|
||||
# This example uses a volume to persist the sqlite database outside of the container,
|
||||
# please adapt the local path. If you use a custom PUID and PGID, you need to create
|
||||
# the local path beforehand with the correct user/group.
|
||||
#
|
||||
# You can generate an admin password with: docker run -it --rm --entrypoint ihatemoney ihatemoney/ihatemoney:latest generate_password_hash
|
||||
# IMPORTANT: replace every dollar character in the result with a double dollar ($ -> $$)
|
||||
# To disable admin access, simply set the password to an empty string (ADMIN_PASSWORD=)
|
||||
#
|
||||
# See https://ihatemoney.readthedocs.io/en/latest/configuration.html to understand all settings.
|
||||
|
||||
version: "3.9"
|
||||
|
||||
|
@ -17,13 +7,13 @@ services:
|
|||
image: ihatemoney/ihatemoney:latest
|
||||
environment:
|
||||
- DEBUG=False
|
||||
- ACTIVATE_DEMO_PROJECT=True
|
||||
- ACTIVATE_ADMIN_DASHBOARD=False
|
||||
- ACTIVATE_DEMO_PROJECT=True
|
||||
- ADMIN_PASSWORD=
|
||||
- ALLOW_PUBLIC_PROJECT_CREATION=True
|
||||
- BABEL_DEFAULT_TIMEZONE=UTC
|
||||
- GREENLET_TEST_CPP=no
|
||||
- MAIL_DEFAULT_SENDER=Budget manager <admin@example.com>
|
||||
- MAIL_DEFAULT_SENDER="Budget manager <admin@example.com>"
|
||||
- MAIL_PASSWORD=
|
||||
- MAIL_PORT=25
|
||||
- MAIL_SERVER=localhost
|
||||
|
@ -35,13 +25,10 @@ services:
|
|||
- SHOW_ADMIN_EMAIL=True
|
||||
- SQLALCHEMY_DATABASE_URI=sqlite:////database/ihatemoney.db
|
||||
- SQLALCHEMY_TRACK_MODIFICATIONS=False
|
||||
- APPLICATION_ROOT=/
|
||||
- ENABLE_CAPTCHA=False
|
||||
- LEGAL_LINK=
|
||||
- PORT=8000
|
||||
- PUID=0
|
||||
- PGID=0
|
||||
volumes:
|
||||
- /path/to/local/dir/for/sqlite/db:/database
|
||||
ports:
|
||||
- "8000:8000"
|
||||
|
|
26
docs/api.md
26
docs/api.md
|
@ -34,9 +34,9 @@ the token (of course, you need to authenticate):
|
|||
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/token
|
||||
{"token": "WyJ0ZXN0Il0.Rt04fNMmxp9YslCRq8hB6jE9s1Q"}
|
||||
|
||||
Make sure to store this token securely: it allows almost full access to the
|
||||
Make sure to store this token securely: it allows full access to the
|
||||
project. For instance, use it to obtain information about the project
|
||||
(replace `PROJECT_TOKEN` with the actual token):
|
||||
(replace PROJECT_TOKEN with the actual token):
|
||||
|
||||
$ curl --oauth2-bearer "PROJECT_TOKEN" https://ihatemoney.org/api/projects/demo
|
||||
|
||||
|
@ -51,8 +51,7 @@ simply create an URL of the form:
|
|||
|
||||
https://ihatemoney.org/demo/join/PROJECT_TOKEN
|
||||
|
||||
Such a link grants read-write access to the project associated with the token,
|
||||
but it does not allow to change project settings.
|
||||
Such a link grants full access to the project associated with the token.
|
||||
|
||||
### Projects
|
||||
|
||||
|
@ -68,8 +67,8 @@ A project needs the following arguments:
|
|||
- `name`: the project name (string)
|
||||
- `id`: the project identifier (string without special chars or
|
||||
spaces)
|
||||
- `password`: the project password / private code (string)
|
||||
- `contact_email`: the contact email, used to recover the private code (string)
|
||||
- `password`: the project password / secret code (string)
|
||||
- `contact_email`: the contact email (string)
|
||||
|
||||
Optional arguments:
|
||||
|
||||
|
@ -84,9 +83,7 @@ Here is the command:
|
|||
-d 'name=yay&id=yay&password=yay&contact_email=yay@notmyidea.org'
|
||||
"yay"
|
||||
|
||||
As you can see, the API returns the identifier of the project. It might be different
|
||||
from what you requested, because the ID is normalized (remove special characters,
|
||||
change to lowercase, etc).
|
||||
As you can see, the API returns the identifier of the project.
|
||||
|
||||
#### Getting information about the project
|
||||
|
||||
|
@ -111,12 +108,7 @@ Updating a project is done with the `PUT` verb:
|
|||
|
||||
$ curl --basic -u yay:yay -X PUT\
|
||||
https://ihatemoney.org/api/projects/yay -d\
|
||||
'name=yay&id=yay¤t_password=yay&password=newyay&contact_email=youpi@notmyidea.org'
|
||||
|
||||
You need to give the current private code as the `current_password` field. This is a security
|
||||
measure to ensure that knowledge of an auth token is not enough to update settings.
|
||||
|
||||
Note that in any case you can never change the ID of a project.
|
||||
'name=yay&id=yay&password=yay&contact_email=youpi@notmyidea.org'
|
||||
|
||||
#### Deleting a project
|
||||
|
||||
|
@ -133,7 +125,7 @@ You can get all the members with a `GET` on
|
|||
[{"weight": 1, "activated": true, "id": 31, "name": "Arnaud"},
|
||||
{"weight": 1, "activated": true, "id": 32, "name": "Alexis"},
|
||||
{"weight": 1, "activated": true, "id": 33, "name": "Olivier"},
|
||||
{"weight": 1, "activated": true, "id": 34, "name": "Jeanne"}]
|
||||
{"weight": 1, "activated": true, "id": 34, "name": "Fred"}]
|
||||
|
||||
Add a member with a `POST` request on `/api/projects/<id>/members`:
|
||||
|
||||
|
@ -244,7 +236,7 @@ You can get some project stats with a `GET` on
|
|||
"balance": 10.5
|
||||
},
|
||||
{
|
||||
"member": {"activated": true, "id": 2, "name": "jeanne", "weight": 1.0},
|
||||
"member": {"activated": true, "id": 2, "name": "fred", "weight": 1.0},
|
||||
"paid": 5,
|
||||
"spent": 15.5,
|
||||
"balance": -10.5
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
import datetime
|
||||
|
||||
templates_path = ["_templates"]
|
||||
source_suffix = ".rst"
|
||||
master_doc = "index"
|
||||
|
||||
project = "I hate money"
|
||||
year = datetime.datetime.now().strftime("%Y")
|
||||
copyright = f"2011-{year}, The 'I hate money' team"
|
||||
copyright = "2011-2021, The 'I hate money' team"
|
||||
|
||||
version = "5.0"
|
||||
release = "5.0"
|
||||
|
|
|
@ -30,9 +30,9 @@ Specifies the type of backend to use and its location. More information
|
|||
on the format used can be found on [the SQLAlchemy
|
||||
documentation](http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls).
|
||||
|
||||
- **Default value:** `sqlite:////tmp/ihatemoney.db`
|
||||
- **Default value:** `sqlite:///tmp/ihatemoney.db`
|
||||
- **Production value:** Set it to some path on your disk. Typically
|
||||
`sqlite:////home/ihatemoney/ihatemoney.db`. Do *not* store it under
|
||||
`sqlite:///home/ihatemoney/ihatemoney.db`. Do *not* store it under
|
||||
`/tmp` as this folder is cleared at each boot.
|
||||
|
||||
For example, if you're using MariaDB, use a configuration similar to
|
||||
|
@ -127,11 +127,11 @@ ADMIN_PASSWORD needs to be set.
|
|||
|
||||
## APPLICATION_ROOT
|
||||
|
||||
By default, ihatemoney will be served at domain root (e.g:
|
||||
*http://domain.tld*), if set to `"/somestring"`, it will be served from a
|
||||
If empty, ihatemoney will be served at domain root (e.g:
|
||||
*http://domain.tld*), if set to `"somestring"`, it will be served from a
|
||||
"folder" (e.g: *http://domain.tld/somestring*).
|
||||
|
||||
- **Default value:** `"/"`
|
||||
- **Default value:** `""` (empty string)
|
||||
|
||||
## BABEL_DEFAULT_TIMEZONE
|
||||
|
||||
|
@ -188,12 +188,3 @@ project](https://pythonhosted.org/flask-mail/#configuring-flask-mail)
|
|||
- **MAIL_USERNAME** : default **None**
|
||||
- **MAIL_PASSWORD** : default **None**
|
||||
- **DEFAULT_MAIL_SENDER** : default **None**
|
||||
|
||||
## Configuring password hashes
|
||||
|
||||
The werkzeug [generate_password_hash](https://werkzeug.palletsprojects.com/utils/#werkzeug.security.generate_password_hash)
|
||||
is used to create password hashes. By default the default werkzeug values
|
||||
are used, however you can customize those values with:
|
||||
|
||||
- **PASSWORD_HASH_METHOD** : default **None**
|
||||
- **PASSWORD_HASH_SALT_LENGTH** : default **None**
|
||||
|
|
|
@ -1,37 +1,5 @@
|
|||
# Contributing
|
||||
|
||||
## Current direction (as of 2024)
|
||||
|
||||
Ihatemoney was started in 2011, and we believe the project has reached a certain
|
||||
level of maturity now. The overall energy of contributors is not as high as it
|
||||
used to be.
|
||||
|
||||
In addition, there are now several self-hosted alternatives (for instance
|
||||
[cospend](https://github.com/julien-nc/cospend-nc/tree/main),
|
||||
[spliit](https://github.com/spliit-app/spliit)).
|
||||
|
||||
As maintainers, we believe that the project is still relevant but should gear
|
||||
towards some kind of "maintenance mode":
|
||||
|
||||
* **Simplicity** is now the main goal of the project. It has always been a compass
|
||||
for the project, and the resulting software is appreciated by both users and
|
||||
server administrators. For us, "simplicity" is positive and encompasses both
|
||||
technical aspects (very few javascript code, manageable dependencies, small code
|
||||
size...) and user-visible aspects (straightforward interface, no need to create
|
||||
accounts for people you invite, same web interface on mobile...)
|
||||
|
||||
* **Stability** is prioritized over adding major new features. We found ourselves
|
||||
complexifying the codebase (and the interface) while accepting some
|
||||
contributions. Our goal now is to have a minimal set of features that do most of
|
||||
the job. We believe this will help lower the maintainance burden.
|
||||
|
||||
* **User interface and user experience improvements** are always super welcome !
|
||||
|
||||
It is still possible to propose new features, but they should fit into
|
||||
this new direction. Simplicity of the UI/UX and simplicity of the technical
|
||||
implementation will be the main factors when deciding to accept new features.
|
||||
|
||||
|
||||
## How to contribute
|
||||
|
||||
You would like to contribute? First, thanks a bunch! This project is a
|
||||
|
@ -222,19 +190,6 @@ revision file which can be created with the following command:
|
|||
|
||||
You then need to write the migration steps yourself.
|
||||
|
||||
## Repository rules
|
||||
|
||||
- Please, try to keep it to **one pull request per feature:** if you want to do more
|
||||
than one thing, send multiple pull requests. It will be easier for us to review and
|
||||
merge.
|
||||
- **Document your code:** if you add a new feature, please document it in the
|
||||
- All the people working on this project do it on their spare time. So please, be
|
||||
patient if we don't answer right away.
|
||||
- We try to have two maintainers review the pull requests before merging it. So please,
|
||||
be patient if we don't merge it right away. After one week, only one maintainer approval
|
||||
is required.
|
||||
|
||||
|
||||
## How to build the documentation ?
|
||||
|
||||
The documentation is using
|
||||
|
@ -306,9 +261,10 @@ In order to issue a new release, follow the following steps:
|
|||
|
||||
make compress-assets
|
||||
|
||||
- Extract the translations:
|
||||
- Build the translations:
|
||||
|
||||
make extract-translations
|
||||
make update-translations
|
||||
make build-translations
|
||||
|
||||
- If you're not completely sure of yourself at this point, you can
|
||||
optionally: create a new branch, push it, open a pull request, check
|
||||
|
@ -325,7 +281,7 @@ Index](https://pypi.org) (PyPI) and publish a tag in the git repository.
|
|||
::: {note}
|
||||
|
||||
The above command will prompt for version number, handle
|
||||
`CHANGELOG.md` and `pyproject.toml` updates, package creation,
|
||||
`CHANGELOG.md` and `setup.cfg` updates, package creation,
|
||||
pypi upload. It will prompt you before each step to get your consent.
|
||||
:::
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ hub](https://hub.docker.com/r/ihatemoney/ihatemoney/).
|
|||
This is probably the simplest way to get something running. Once you
|
||||
have Docker installed on your system, just issue :
|
||||
|
||||
docker run -d -p 8000:8000 ihatemoney/ihatemoney:latest
|
||||
docker run -d -p 8000:8000 ihatemoney/ihatemoney
|
||||
|
||||
Ihatemoney is now available on <http://localhost:8000>.
|
||||
|
||||
|
@ -54,10 +54,6 @@ To enable the Admin dashboard, first generate a hashed password with:
|
|||
|
||||
docker run -it --rm --entrypoint ihatemoney ihatemoney/ihatemoney generate_password_hash
|
||||
|
||||
:::{note}
|
||||
The generated password hash is salted. Which means that the same password will generate a different hash each time. This is normal and expected behavior.
|
||||
:::
|
||||
|
||||
At the prompt, enter a password to use for the admin dashboard. The
|
||||
command will print the hashed password string.
|
||||
|
||||
|
@ -66,18 +62,12 @@ Add these additional environment variables to the docker run invocation:
|
|||
-e ACTIVATE_ADMIN_DASHBOARD=True \
|
||||
-e ADMIN_PASSWORD=<hashed_password_string> \
|
||||
|
||||
:::{note}
|
||||
If you are using a `docker-compose.yml` file and need to include a password hash, use `$$` instead of `$` to escape the dollar sign. This ensures that the hash is treated as a literal string rather than a variable in Bash.
|
||||
:::
|
||||
|
||||
Additional gunicorn parameters can be passed using the docker `CMD`
|
||||
parameter. For example, use the following command to add more gunicorn
|
||||
workers:
|
||||
|
||||
docker run -d -p 8000:8000 ihatemoney/ihatemoney -w 3
|
||||
|
||||
If needed, there is a `docker-compose.yml` file available as an example on the [project repository](https://github.com/spiral-project/ihatemoney/blob/master/docker-compose.yml)
|
||||
|
||||
(cloud)=
|
||||
## On a Cloud Provider
|
||||
|
||||
|
@ -93,7 +83,7 @@ Some Paas (Platform-as-a-Service), provide a documentation or even a quick insta
|
|||
|
||||
«Ihatemoney» depends on:
|
||||
|
||||
- **Python**: any version from 3.7 to 3.12 will work.
|
||||
- **Python**: any version from 3.7 to 3.11 will work.
|
||||
- **A database backend**: choose among SQLite, PostgreSQL, MariaDB (>=
|
||||
10.3.2).
|
||||
- **Virtual environment** (recommended): [python3-venv]{.title-ref}
|
||||
|
|
|
@ -11,48 +11,39 @@ expenses in the first place!
|
|||
That being said, there are a few mechanisms to limit the impact of a
|
||||
malicious member and to manage changes in membership (e.g. ensuring that
|
||||
a previous member can no longer access the project). But these
|
||||
mechanisms don't prevent a malicious member from breaking things in
|
||||
mechanisms don\'t prevent a malicious member from breaking things in
|
||||
your project!
|
||||
|
||||
## Security model
|
||||
|
||||
A project has four main parameters when it comes to security:
|
||||
A project has three main parameters when it comes to security:
|
||||
|
||||
- **project identifier** (equivalent to a \"login\")
|
||||
- **private code** (equivalent to a \"password\")
|
||||
- **auth token** (cryptographically derived from the private code)
|
||||
- **feed token** (also cryptographically derived from the private code)
|
||||
- **token** (cryptographically derived from the private code)
|
||||
|
||||
Somebody with the **private code** can:
|
||||
Somebody with the private code can:
|
||||
|
||||
- access the project through the web interface or the API
|
||||
- add, modify or remove participants
|
||||
- add, modify or remove bills
|
||||
- view statistics of the project
|
||||
- view project history
|
||||
- change basic settings of the project
|
||||
- change the email address associated to the project
|
||||
- change the private code of the project
|
||||
- delete the project
|
||||
|
||||
Somebody with the **auth token** can manipulate the project through the API:
|
||||
Somebody with the token can manipulate the project through the API to do
|
||||
essentially the same thing:
|
||||
|
||||
- access the project
|
||||
- add, modify or remove participants
|
||||
- add, modify or remove bills
|
||||
- view statistics of the project
|
||||
- delete the project
|
||||
- change basic settings of the project
|
||||
- change the email address associated to the project
|
||||
- change the private code of the project
|
||||
|
||||
The auth token is not enough to change basic settings of the project,
|
||||
or to change the email address or the private code.
|
||||
|
||||
The auth token can also be used to build "invitation links". These links
|
||||
The token can also be used to build \"invitation links\". These links
|
||||
allow to login on the web interface without knowing the private code,
|
||||
see below.
|
||||
|
||||
Somebody with the **feed token** can only access a read-only view of the project
|
||||
through a RSS feed (at `/<project_id>/feed/<token>.xml`).
|
||||
|
||||
## Giving access to a project
|
||||
|
||||
There are two main ways to give access to a project to a new person:
|
||||
|
@ -66,36 +57,25 @@ The second method is interesting because it does not reveal the private
|
|||
code. In particular, somebody that is logged-in through the invitation
|
||||
link will not be able to change the private code, because the web
|
||||
interface requires a confirmation of the existing private code to change
|
||||
it. Similarly, changing other important settings or deleting the project
|
||||
from the web interface requires knowledge of the private code.
|
||||
|
||||
However, a motivated person could extract the auth token from the
|
||||
it. However, a motivated person could extract the token from the
|
||||
invitation link, use it to access the project through the API, and
|
||||
delete the project through the API. This is a [known issue](https://github.com/spiral-project/ihatemoney/issues/1206).
|
||||
change the private code through the API.
|
||||
|
||||
## Removing access to a project
|
||||
|
||||
If a person should no longer be able to access a project, the only way
|
||||
is to change the private code for the whole project.
|
||||
is to change the private code.
|
||||
|
||||
This will prevent anybody from logging in with the old private code.
|
||||
However, anybody with an existing session cookie will still have
|
||||
access to the project. This is a [known issue](https://github.com/spiral-project/ihatemoney/issues/857)
|
||||
that should be fixed.
|
||||
|
||||
Changing the private code will automatically change the auth token:
|
||||
old invitation links won't work anymore, and anybody with the old token
|
||||
will no longer be able to access the project through the API.
|
||||
|
||||
This will also automatically change the feed token, so that existing
|
||||
links to the RSS feed for the project will no longer work.
|
||||
This will also automatically change the token: old invitation links
|
||||
won\'t work anymore, and anybody with the old token will no longer be
|
||||
able to access the project through the API.
|
||||
|
||||
## Recovering access to a project
|
||||
|
||||
If the private code is no longer known, the creator of the project can
|
||||
still recover access. He/she must have provided an email address when
|
||||
creating the project, and Ihatemoney can send a reset link to this email
|
||||
address (classical "forgot your password" functionality).
|
||||
address (classical \"forgot your password\" functionality).
|
||||
|
||||
Note, however, that somebody with the private code could have changed
|
||||
the email address in the settings at any time.
|
||||
|
@ -111,6 +91,6 @@ Note, however, that the history feature is primarily meant to protect
|
|||
against mistakes: a malicious member can easily remove all entries from
|
||||
the history!
|
||||
|
||||
The best defense against this kind of issues is... backups! All data
|
||||
The best defense against this kind of issues is\... backups! All data
|
||||
for a project can be exported through the settings page or through the
|
||||
API. The server administrator can also backup the database.
|
||||
API.
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
import sys
|
||||
|
||||
from hatchling.builders.hooks.plugin.interface import BuildHookInterface
|
||||
|
||||
|
||||
class CustomBuildHook(BuildHookInterface):
|
||||
def initialize(self, version, build_data):
|
||||
sys.path.insert(0, "./ihatemoney")
|
||||
from babel_utils import compile_catalogs
|
||||
|
||||
compile_catalogs()
|
|
@ -1,2 +1,3 @@
|
|||
[python: **.py]
|
||||
[jinja2: **/templates/**.html]
|
||||
extensions=jinja2.ext.autoescape,jinja2.ext.with_
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
from pathlib import Path
|
||||
|
||||
from babel.messages.frontend import compile_catalog
|
||||
|
||||
|
||||
def compile_catalogs():
|
||||
cmd = compile_catalog()
|
||||
cmd.directory = Path(__file__).parent / "translations"
|
||||
cmd.statistics = True
|
||||
cmd.finalize_options()
|
||||
cmd.run()
|
|
@ -47,14 +47,11 @@ ACTIVATE_ADMIN_DASHBOARD = False
|
|||
# service over plain HTTP.
|
||||
SESSION_COOKIE_SECURE = True
|
||||
|
||||
# Set this to a URL path under which the application will be served. Defaults to "/"
|
||||
APPLICATION_ROOT = "/"
|
||||
|
||||
# You can activate an optional CAPTCHA if you want to. It can be helpful
|
||||
# to filter spammer bots.
|
||||
ENABLE_CAPTCHA = False
|
||||
# ENABLE_CAPTCHA = True
|
||||
|
||||
# You may want to point to a special legal page, for instance to give information
|
||||
# about GDPR, or how you handle the data of your users.
|
||||
# Set this variable to the URL you want.
|
||||
LEGAL_LINK = ""
|
||||
# LEGAL_LINK = ""
|
||||
|
|
|
@ -36,181 +36,13 @@ class CurrencyConverter(object, metaclass=Singleton):
|
|||
return rates
|
||||
|
||||
def get_currencies(self, with_no_currency=True):
|
||||
currencies = [
|
||||
"AED",
|
||||
"AFN",
|
||||
"ALL",
|
||||
"AMD",
|
||||
"ANG",
|
||||
"AOA",
|
||||
"ARS",
|
||||
"AUD",
|
||||
"AWG",
|
||||
"AZN",
|
||||
"BAM",
|
||||
"BBD",
|
||||
"BDT",
|
||||
"BGN",
|
||||
"BHD",
|
||||
"BIF",
|
||||
"BMD",
|
||||
"BND",
|
||||
"BOB",
|
||||
"BRL",
|
||||
"BSD",
|
||||
"BTC",
|
||||
"BTN",
|
||||
"BWP",
|
||||
"BYN",
|
||||
"BZD",
|
||||
"CAD",
|
||||
"CDF",
|
||||
"CHF",
|
||||
"CLF",
|
||||
"CLP",
|
||||
"CNH",
|
||||
"CNY",
|
||||
"COP",
|
||||
"CRC",
|
||||
"CUC",
|
||||
"CUP",
|
||||
"CVE",
|
||||
"CZK",
|
||||
"DJF",
|
||||
"DKK",
|
||||
"DOP",
|
||||
"DZD",
|
||||
"EGP",
|
||||
"ERN",
|
||||
"ETB",
|
||||
"EUR",
|
||||
"FJD",
|
||||
"FKP",
|
||||
"GBP",
|
||||
"GEL",
|
||||
"GGP",
|
||||
"GHS",
|
||||
"GIP",
|
||||
"GMD",
|
||||
"GNF",
|
||||
"GTQ",
|
||||
"GYD",
|
||||
"HKD",
|
||||
"HNL",
|
||||
"HRK",
|
||||
"HTG",
|
||||
"HUF",
|
||||
"IDR",
|
||||
"ILS",
|
||||
"IMP",
|
||||
"INR",
|
||||
"IQD",
|
||||
"IRR",
|
||||
"ISK",
|
||||
"JEP",
|
||||
"JMD",
|
||||
"JOD",
|
||||
"JPY",
|
||||
"KES",
|
||||
"KGS",
|
||||
"KHR",
|
||||
"KMF",
|
||||
"KPW",
|
||||
"KRW",
|
||||
"KWD",
|
||||
"KYD",
|
||||
"KZT",
|
||||
"LAK",
|
||||
"LBP",
|
||||
"LKR",
|
||||
"LRD",
|
||||
"LSL",
|
||||
"LYD",
|
||||
"MAD",
|
||||
"MDL",
|
||||
"MGA",
|
||||
"MKD",
|
||||
"MMK",
|
||||
"MNT",
|
||||
"MOP",
|
||||
"MRU",
|
||||
"MUR",
|
||||
"MVR",
|
||||
"MWK",
|
||||
"MXN",
|
||||
"MYR",
|
||||
"MZN",
|
||||
"NAD",
|
||||
"NGN",
|
||||
"NIO",
|
||||
"NOK",
|
||||
"NPR",
|
||||
"NZD",
|
||||
"OMR",
|
||||
"PAB",
|
||||
"PEN",
|
||||
"PGK",
|
||||
"PHP",
|
||||
"PKR",
|
||||
"PLN",
|
||||
"PYG",
|
||||
"QAR",
|
||||
"RON",
|
||||
"RSD",
|
||||
"RUB",
|
||||
"RWF",
|
||||
"SAR",
|
||||
"SBD",
|
||||
"SCR",
|
||||
"SDG",
|
||||
"SEK",
|
||||
"SGD",
|
||||
"SHP",
|
||||
"SLL",
|
||||
"SOS",
|
||||
"SRD",
|
||||
"SSP",
|
||||
"STD",
|
||||
"STN",
|
||||
"SVC",
|
||||
"SYP",
|
||||
"SZL",
|
||||
"THB",
|
||||
"TJS",
|
||||
"TMT",
|
||||
"TND",
|
||||
"TOP",
|
||||
"TRY",
|
||||
"TTD",
|
||||
"TWD",
|
||||
"TZS",
|
||||
"UAH",
|
||||
"UGX",
|
||||
"USD",
|
||||
"UYU",
|
||||
"UZS",
|
||||
"VEF",
|
||||
"VES",
|
||||
"VND",
|
||||
"VUV",
|
||||
"WST",
|
||||
"XAF",
|
||||
"XAG",
|
||||
"XAU",
|
||||
"XCD",
|
||||
"XDR",
|
||||
"XOF",
|
||||
"XPD",
|
||||
"XPF",
|
||||
"XPT",
|
||||
"YER",
|
||||
"ZAR",
|
||||
"ZMW",
|
||||
"ZWL",
|
||||
rates = [
|
||||
rate
|
||||
for rate in self.get_rates()
|
||||
if with_no_currency or rate != self.no_currency
|
||||
]
|
||||
if with_no_currency:
|
||||
currencies.append(self.no_currency)
|
||||
return currencies
|
||||
rates.sort(key=lambda rate: "" if rate == self.no_currency else rate)
|
||||
return rates
|
||||
|
||||
def exchange_currency(self, amount, source_currency, dest_currency):
|
||||
if (
|
||||
|
|
|
@ -6,43 +6,32 @@ SECRET_KEY = "tralala"
|
|||
MAIL_DEFAULT_SENDER = "Budget manager <admin@example.com>"
|
||||
SHOW_ADMIN_EMAIL = True
|
||||
ACTIVATE_DEMO_PROJECT = True
|
||||
ACTIVATE_ADMIN_DASHBOARD = False
|
||||
ADMIN_PASSWORD = ""
|
||||
ALLOW_PUBLIC_PROJECT_CREATION = True
|
||||
ACTIVATE_ADMIN_DASHBOARD = False
|
||||
SESSION_COOKIE_SECURE = True
|
||||
APPLICATION_ROOT = "/"
|
||||
ENABLE_CAPTCHA = False
|
||||
LEGAL_LINK = ""
|
||||
SUPPORTED_LANGUAGES = [
|
||||
"ca",
|
||||
"cs",
|
||||
"de",
|
||||
"el",
|
||||
"en",
|
||||
"eo",
|
||||
"es",
|
||||
"es_419",
|
||||
"fa",
|
||||
"fr",
|
||||
"he",
|
||||
"hi",
|
||||
"hu",
|
||||
"id",
|
||||
"it",
|
||||
"ja",
|
||||
"kn",
|
||||
"nb_NO",
|
||||
"nl",
|
||||
"pl",
|
||||
"pt",
|
||||
"pt_BR",
|
||||
"ru",
|
||||
"sr",
|
||||
"sv",
|
||||
"ta",
|
||||
"te",
|
||||
"th",
|
||||
"tr",
|
||||
"uk",
|
||||
"zh_Hans",
|
||||
]
|
||||
ENABLE_CAPTCHA = False
|
||||
LEGAL_LINK = ""
|
||||
|
|
|
@ -9,7 +9,7 @@ from flask_babel import lazy_gettext as _
|
|||
from flask_wtf.file import FileAllowed, FileField, FileRequired
|
||||
from flask_wtf.form import FlaskForm
|
||||
from markupsafe import Markup
|
||||
from werkzeug.security import check_password_hash
|
||||
from werkzeug.security import check_password_hash, generate_password_hash
|
||||
from wtforms.fields import (
|
||||
BooleanField,
|
||||
DateField,
|
||||
|
@ -39,11 +39,10 @@ from wtforms.validators import (
|
|||
)
|
||||
|
||||
from ihatemoney.currency_convertor import CurrencyConverter
|
||||
from ihatemoney.models import Bill, BillType, LoggingMode, Person, Project
|
||||
from ihatemoney.models import Bill, LoggingMode, Person, Project
|
||||
from ihatemoney.utils import (
|
||||
em_surround,
|
||||
eval_arithmetic_expression,
|
||||
generate_password_hash,
|
||||
render_localized_currency,
|
||||
slugify,
|
||||
)
|
||||
|
@ -67,9 +66,6 @@ def get_billform_for(project, set_default=True, **kwargs):
|
|||
if form.original_currency.data is None:
|
||||
form.original_currency.data = project.default_currency
|
||||
|
||||
# Used in validate_original_currency
|
||||
form.project_currency = project.default_currency
|
||||
|
||||
show_no_currency = form.original_currency.data == CurrencyConverter.no_currency
|
||||
|
||||
form.original_currency.choices = [
|
||||
|
@ -125,11 +121,6 @@ class CalculatorStringField(StringField):
|
|||
|
||||
class EditProjectForm(FlaskForm):
|
||||
name = StringField(_("Project name"), validators=[DataRequired()])
|
||||
current_password = PasswordField(
|
||||
_("Current private code"),
|
||||
description=_("Enter existing private code to edit project"),
|
||||
validators=[DataRequired()],
|
||||
)
|
||||
# If empty -> don't change the password
|
||||
password = PasswordField(
|
||||
_("New private code"),
|
||||
|
@ -163,13 +154,6 @@ class EditProjectForm(FlaskForm):
|
|||
for currency_name in self.currency_helper.get_currencies()
|
||||
]
|
||||
|
||||
def validate_current_password(self, field):
|
||||
project = Project.query.get(self.id.data)
|
||||
if project is None:
|
||||
raise ValidationError(_("Unknown error"))
|
||||
if not check_password_hash(project.password, self.current_password.data):
|
||||
raise ValidationError(_("Invalid private code."))
|
||||
|
||||
@property
|
||||
def logging_preference(self):
|
||||
"""Get the LoggingMode object corresponding to current form data."""
|
||||
|
@ -188,20 +172,12 @@ class EditProjectForm(FlaskForm):
|
|||
and field.data == CurrencyConverter.no_currency
|
||||
and project.has_multiple_currencies()
|
||||
):
|
||||
msg = _(
|
||||
raise ValidationError(
|
||||
_(
|
||||
"This project cannot be set to 'no currency'"
|
||||
" because it contains bills in multiple currencies."
|
||||
)
|
||||
raise ValidationError(msg)
|
||||
if (
|
||||
project is not None
|
||||
and field.data != project.default_currency
|
||||
and project.has_bills()
|
||||
):
|
||||
msg = _(
|
||||
"Cannot change project currency because currency conversion is broken"
|
||||
)
|
||||
raise ValidationError(msg)
|
||||
|
||||
def update(self, project):
|
||||
"""Update the project with the information from the form"""
|
||||
|
@ -236,9 +212,7 @@ class ImportProjectForm(FlaskForm):
|
|||
|
||||
class ProjectForm(EditProjectForm):
|
||||
id = StringField(_("Project identifier"), validators=[DataRequired()])
|
||||
# Remove this field that is inherited from EditProjectForm
|
||||
current_password = None
|
||||
# This field overrides the one from EditProjectForm (to make it mandatory)
|
||||
# This field overrides the one from EditProjectForm
|
||||
password = PasswordField(_("Private code"), validators=[DataRequired()])
|
||||
submit = SubmitField(_("Create the project"))
|
||||
|
||||
|
@ -364,12 +338,6 @@ class BillForm(FlaskForm):
|
|||
payed_for = SelectMultipleField(
|
||||
_("For whom?"), validators=[DataRequired()], coerce=int
|
||||
)
|
||||
bill_type = SelectField(
|
||||
_("Bill Type"),
|
||||
choices=BillType.choices(),
|
||||
coerce=BillType,
|
||||
default=BillType.EXPENSE,
|
||||
)
|
||||
submit = SubmitField(_("Submit"))
|
||||
submit2 = SubmitField(_("Submit and add a new one"))
|
||||
|
||||
|
@ -383,14 +351,12 @@ class BillForm(FlaskForm):
|
|||
payer_id=self.payer.data,
|
||||
project_default_currency=project.default_currency,
|
||||
what=self.what.data,
|
||||
bill_type=self.bill_type.data,
|
||||
)
|
||||
|
||||
def save(self, bill, project):
|
||||
bill.payer_id = self.payer.data
|
||||
bill.amount = self.amount.data
|
||||
bill.what = self.what.data
|
||||
bill.bill_type = BillType(self.bill_type.data)
|
||||
bill.external_link = self.external_link.data
|
||||
bill.date = self.date.data
|
||||
bill.owers = Person.query.get_by_ids(self.payed_for.data, project)
|
||||
|
@ -404,7 +370,6 @@ class BillForm(FlaskForm):
|
|||
self.payer.data = bill.payer_id
|
||||
self.amount.data = bill.amount
|
||||
self.what.data = bill.what
|
||||
self.bill_type.data = bill.bill_type
|
||||
self.external_link.data = bill.external_link
|
||||
self.original_currency.data = bill.original_currency
|
||||
self.date.data = bill.date
|
||||
|
@ -426,17 +391,6 @@ class BillForm(FlaskForm):
|
|||
# See https://github.com/python-babel/babel/issues/821
|
||||
raise ValidationError(f"Result is too high: {field.data}")
|
||||
|
||||
def validate_original_currency(self, field):
|
||||
# Workaround for currency API breakage
|
||||
# See #1232
|
||||
if field.data not in [CurrencyConverter.no_currency, self.project_currency]:
|
||||
msg = _(
|
||||
"Failed to convert from %(bill_currency)s currency to %(project_currency)s",
|
||||
bill_currency=field.data,
|
||||
project_currency=self.project_currency,
|
||||
)
|
||||
raise ValidationError(msg)
|
||||
|
||||
|
||||
class MemberForm(FlaskForm):
|
||||
name = StringField(_("Name"), validators=[DataRequired()], filters=[strip_filter])
|
||||
|
@ -478,7 +432,7 @@ class MemberForm(FlaskForm):
|
|||
|
||||
class InviteForm(FlaskForm):
|
||||
emails = StringField(_("People to notify"), render_kw={"class": "tag"})
|
||||
submit = SubmitField(_("Send the invitations"))
|
||||
submit = SubmitField(_("Send invites"))
|
||||
|
||||
def validate_emails(self, field):
|
||||
for email in [email.strip() for email in self.emails.data.split(",")]:
|
||||
|
|
|
@ -83,26 +83,10 @@ def get_history(project, human_readable_names=True):
|
|||
"time": version.transaction.issued_at,
|
||||
"operation_type": version.operation_type,
|
||||
"object_type": object_type,
|
||||
"bill_details": None,
|
||||
"object_desc": object_str,
|
||||
"ip": version.transaction.remote_addr,
|
||||
}
|
||||
|
||||
if object_type == "Bill":
|
||||
if version.operation_type == Operation.INSERT or not version.previous:
|
||||
detailed_version = version
|
||||
else:
|
||||
detailed_version = version.previous
|
||||
details = {
|
||||
"date": detailed_version.date,
|
||||
"payer": describe_version(detailed_version.payer),
|
||||
"amount": detailed_version.amount,
|
||||
"owers": [describe_version(o) for o in detailed_version.owers],
|
||||
"external_link": detailed_version.external_link,
|
||||
"original_currency": detailed_version.original_currency,
|
||||
}
|
||||
common_properties["bill_details"] = details
|
||||
|
||||
if version.operation_type == Operation.UPDATE:
|
||||
# Only iterate the changeset if the previous version
|
||||
# Was logged
|
||||
|
|
|
@ -7,10 +7,11 @@ import sys
|
|||
|
||||
import click
|
||||
from flask.cli import FlaskGroup
|
||||
from werkzeug.security import generate_password_hash
|
||||
|
||||
from ihatemoney.models import Project, db
|
||||
from ihatemoney.run import create_app
|
||||
from ihatemoney.utils import create_jinja_env, generate_password_hash
|
||||
from ihatemoney.utils import create_jinja_env
|
||||
|
||||
|
||||
@click.group(cls=FlaskGroup, create_app=create_app)
|
||||
|
@ -32,14 +33,14 @@ def runserver(ctx):
|
|||
ctx.forward(run)
|
||||
|
||||
|
||||
@cli.command(name="generate_password_hash")
|
||||
@click.command(name="generate_password_hash")
|
||||
def password_hash():
|
||||
"""Get password from user and hash it without printing it in clear text."""
|
||||
password = getpass.getpass(prompt="Password: ")
|
||||
print(generate_password_hash(password))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.command()
|
||||
@click.argument(
|
||||
"config_file",
|
||||
type=click.Choice(
|
||||
|
|
|
@ -10,12 +10,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Current private code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "New private code"
|
||||
msgstr ""
|
||||
|
||||
|
@ -37,12 +31,6 @@ msgstr ""
|
|||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
|
@ -78,6 +66,12 @@ msgstr ""
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Get in"
|
||||
msgstr ""
|
||||
|
||||
|
@ -136,6 +130,9 @@ msgstr ""
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr ""
|
||||
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
|
@ -157,7 +154,7 @@ msgstr ""
|
|||
msgid "People to notify"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgid "Send invites"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -241,9 +238,6 @@ msgstr ""
|
|||
msgid "Password successfully reset."
|
||||
msgstr ""
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
|
@ -388,6 +382,9 @@ msgstr ""
|
|||
msgid " show"
|
||||
msgstr ""
|
||||
|
||||
msgid "show"
|
||||
msgstr ""
|
||||
|
||||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr ""
|
||||
|
||||
|
@ -427,7 +424,7 @@ msgstr ""
|
|||
msgid "Privacy Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save changes"
|
||||
msgid "Edit the project"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
|
@ -466,6 +463,9 @@ msgstr ""
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
|
@ -530,18 +530,23 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -734,9 +739,6 @@ msgstr ""
|
|||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -759,7 +761,7 @@ msgstr ""
|
|||
msgid "Documentation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -813,10 +815,13 @@ msgstr ""
|
|||
msgid "Nothing to list yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add the first participant"
|
||||
msgid "add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "add participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password reminder"
|
||||
|
@ -839,48 +844,40 @@ msgstr ""
|
|||
msgid "Invite people to join this project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Share the Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"On a mobile device, with <a href=\"%(download_mobile)s\">a compatible app"
|
||||
" installed</a>."
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Private code:"
|
||||
msgstr ""
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
"""new bill type attribute added
|
||||
|
||||
Revision ID: 7a9b38559992
|
||||
Revises: 927ed575acbd
|
||||
Create Date: 2022-12-10 17:25:38.387643
|
||||
|
||||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "7a9b38559992"
|
||||
down_revision = "927ed575acbd"
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from ihatemoney.models import BillType
|
||||
|
||||
|
||||
def upgrade():
|
||||
billtype_enum = sa.Enum(BillType)
|
||||
billtype_enum.create(op.get_bind(), checkfirst=True)
|
||||
|
||||
op.add_column(
|
||||
"bill",
|
||||
sa.Column("bill_type", billtype_enum, server_default=BillType.EXPENSE.name),
|
||||
)
|
||||
op.add_column("bill_version", sa.Column("bill_type", sa.UnicodeText()))
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.drop_column("bill", "bill_type")
|
||||
op.drop_column("bill_version", "bill_type")
|
||||
|
||||
billtype_enum = sa.Enum(BillType)
|
||||
billtype_enum.drop(op.get_bind())
|
|
@ -1,6 +1,5 @@
|
|||
from collections import defaultdict
|
||||
import datetime
|
||||
from enum import Enum
|
||||
import itertools
|
||||
|
||||
from dateutil.parser import parse
|
||||
|
@ -19,10 +18,11 @@ from sqlalchemy import orm
|
|||
from sqlalchemy.sql import func
|
||||
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.monkeypath_continuum import PatchedTransactionFactory
|
||||
from ihatemoney.utils import generate_password_hash, get_members, same_bill
|
||||
from ihatemoney.utils import get_members, same_bill
|
||||
from ihatemoney.versioning import (
|
||||
ConditionalVersioningManager,
|
||||
LoggingMode,
|
||||
|
@ -51,16 +51,6 @@ make_versioned(
|
|||
],
|
||||
)
|
||||
|
||||
|
||||
class BillType(Enum):
|
||||
EXPENSE = "Expense"
|
||||
REIMBURSEMENT = "Reimbursement"
|
||||
|
||||
@classmethod
|
||||
def choices(cls):
|
||||
return [(choice.value, choice.value) for choice in cls]
|
||||
|
||||
|
||||
db = SQLAlchemy()
|
||||
|
||||
|
||||
|
@ -123,33 +113,22 @@ class Project(db.Model):
|
|||
- dict mapping each member to how much he/she should be paid by
|
||||
others (i.e. how much he/she has paid for bills)
|
||||
|
||||
balance spent paid
|
||||
"""
|
||||
balances, should_pay, should_receive = (defaultdict(int) for time in (1, 2, 3))
|
||||
for bill in self.get_bills_unordered().all():
|
||||
total_weight = sum(ower.weight for ower in bill.owers)
|
||||
|
||||
if bill.bill_type == BillType.EXPENSE:
|
||||
for bill in self.get_bills_unordered().all():
|
||||
should_receive[bill.payer.id] += bill.converted_amount
|
||||
total_weight = sum(ower.weight for ower in bill.owers)
|
||||
for ower in bill.owers:
|
||||
should_pay[ower.id] += (
|
||||
ower.weight * bill.converted_amount / total_weight
|
||||
)
|
||||
|
||||
if bill.bill_type == BillType.REIMBURSEMENT:
|
||||
should_receive[bill.payer.id] += bill.converted_amount
|
||||
for ower in bill.owers:
|
||||
should_receive[ower.id] -= bill.converted_amount
|
||||
|
||||
for person in self.members:
|
||||
balance = should_receive[person.id] - should_pay[person.id]
|
||||
balances[person.id] = balance
|
||||
|
||||
return (
|
||||
balances,
|
||||
should_pay,
|
||||
should_receive,
|
||||
)
|
||||
return balances, should_pay, should_receive
|
||||
|
||||
@property
|
||||
def balance(self):
|
||||
|
@ -182,7 +161,6 @@ class Project(db.Model):
|
|||
"""
|
||||
monthly = defaultdict(lambda: defaultdict(float))
|
||||
for bill in self.get_bills_unordered().all():
|
||||
if bill.bill_type == BillType.EXPENSE:
|
||||
monthly[bill.date.year][bill.date.month] += bill.converted_amount
|
||||
return monthly
|
||||
|
||||
|
@ -209,6 +187,7 @@ class Project(db.Model):
|
|||
)
|
||||
return pretty_transactions
|
||||
|
||||
# cache value for better performance
|
||||
members = {person.id: person for person in self.members}
|
||||
settle_plan = settle(self.balance.items()) or []
|
||||
|
||||
|
@ -224,6 +203,22 @@ class Project(db.Model):
|
|||
|
||||
return prettify(transactions, pretty_output)
|
||||
|
||||
def exactmatch(self, credit, debts):
|
||||
"""Recursively try and find subsets of 'debts' whose sum is equal to credit"""
|
||||
if not debts:
|
||||
return None
|
||||
if debts[0]["balance"] > credit:
|
||||
return self.exactmatch(credit, debts[1:])
|
||||
elif debts[0]["balance"] == credit:
|
||||
return [debts[0]]
|
||||
else:
|
||||
match = self.exactmatch(credit - debts[0]["balance"], debts[1:])
|
||||
if match:
|
||||
match.append(debts[0])
|
||||
else:
|
||||
match = self.exactmatch(credit, debts[1:])
|
||||
return match
|
||||
|
||||
def has_bills(self):
|
||||
"""return if the project do have bills or not"""
|
||||
return self.get_bills_unordered().count() > 0
|
||||
|
@ -342,7 +337,6 @@ class Project(db.Model):
|
|||
pretty_bills.append(
|
||||
{
|
||||
"what": bill.what,
|
||||
"bill_type": bill.bill_type.value,
|
||||
"amount": round(bill.amount, 2),
|
||||
"currency": bill.original_currency,
|
||||
"date": str(bill.date),
|
||||
|
@ -414,7 +408,6 @@ class Project(db.Model):
|
|||
new_bill = Bill(
|
||||
amount=b["amount"],
|
||||
date=parse(b["date"]),
|
||||
bill_type=b["bill_type"],
|
||||
external_link="",
|
||||
original_currency=b["currency"],
|
||||
owers=Person.query.get_by_names(b["owers"], self),
|
||||
|
@ -460,8 +453,7 @@ class Project(db.Model):
|
|||
"""Generate a timed and serialized JsonWebToken
|
||||
|
||||
:param token_type: Either "auth" for authentication (invalidated when project code changed),
|
||||
or "reset" for password reset (invalidated after expiration),
|
||||
or "feed" for project feeds (invalidated when project code changed)
|
||||
or "reset" for password reset (invalidated after expiration)
|
||||
"""
|
||||
|
||||
if token_type == "reset":
|
||||
|
@ -484,10 +476,9 @@ class Project(db.Model):
|
|||
|
||||
:param token: Serialized TimedJsonWebToken
|
||||
:param token_type: Either "auth" for authentication (invalidated when project code changed),
|
||||
or "reset" for password reset (invalidated after expiration),
|
||||
or "feed" for project feeds (invalidated when project code changed)
|
||||
:param project_id: Project ID. Used for token_type "auth" and "feed" to use the password
|
||||
as serializer secret key.
|
||||
or "reset" for password reset (invalidated after expiration)
|
||||
:param project_id: Project ID. Used for token_type "auth" to use the password as serializer
|
||||
secret key.
|
||||
:param max_age: Token expiration time (in seconds). Only used with token_type "reset"
|
||||
"""
|
||||
loads_kwargs = {}
|
||||
|
@ -545,15 +536,14 @@ class Project(db.Model):
|
|||
db.session.commit()
|
||||
|
||||
operations = (
|
||||
("Georg", 200, ("Amina", "Georg", "Alice"), "Food shopping", "Expense"),
|
||||
("Alice", 20, ("Amina", "Alice"), "Beer !", "Expense"),
|
||||
("Amina", 50, ("Amina", "Alice", "Georg"), "AMAP", "Expense"),
|
||||
("Georg", 200, ("Amina", "Georg", "Alice"), "Food shopping"),
|
||||
("Alice", 20, ("Amina", "Alice"), "Beer !"),
|
||||
("Amina", 50, ("Amina", "Alice", "Georg"), "AMAP"),
|
||||
)
|
||||
for payer, amount, owers, what, bill_type in operations:
|
||||
for payer, amount, owers, what in operations:
|
||||
db.session.add(
|
||||
Bill(
|
||||
amount=amount,
|
||||
bill_type=bill_type,
|
||||
original_currency=project.default_currency,
|
||||
owers=[members[name] for name in owers],
|
||||
payer_id=members[payer].id,
|
||||
|
@ -686,7 +676,6 @@ class Bill(db.Model):
|
|||
date = db.Column(db.Date, default=datetime.datetime.now)
|
||||
creation_date = db.Column(db.Date, default=datetime.datetime.now)
|
||||
what = db.Column(db.UnicodeText)
|
||||
bill_type = db.Column(db.Enum(BillType))
|
||||
external_link = db.Column(db.UnicodeText)
|
||||
|
||||
original_currency = db.Column(db.String(3))
|
||||
|
@ -706,7 +695,6 @@ class Bill(db.Model):
|
|||
payer_id: int = None,
|
||||
project_default_currency: str = "",
|
||||
what: str = "",
|
||||
bill_type: str = "Expense",
|
||||
):
|
||||
super().__init__()
|
||||
self.amount = amount
|
||||
|
@ -716,7 +704,6 @@ class Bill(db.Model):
|
|||
self.owers = owers
|
||||
self.payer_id = payer_id
|
||||
self.what = what
|
||||
self.bill_type = BillType(bill_type)
|
||||
self.converted_amount = self.currency_helper.exchange_currency(
|
||||
self.amount, self.original_currency, project_default_currency
|
||||
)
|
||||
|
@ -731,7 +718,6 @@ class Bill(db.Model):
|
|||
"date": self.date,
|
||||
"creation_date": self.creation_date,
|
||||
"what": self.what,
|
||||
"bill_type": self.bill_type.value,
|
||||
"external_link": self.external_link,
|
||||
"original_currency": self.original_currency,
|
||||
"converted_amount": self.converted_amount,
|
||||
|
|
|
@ -424,15 +424,6 @@ footer .footer-left {
|
|||
display: table-cell;
|
||||
}
|
||||
|
||||
/* used to tuncate long urls */
|
||||
.truncated {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 250px;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.balance .balance-value {
|
||||
text-align: right;
|
||||
|
|
|
@ -100,9 +100,8 @@
|
|||
</div>
|
||||
|
||||
{{ input(form.default_currency) }}
|
||||
{{ input(form.current_password) }}
|
||||
<div class="actions">
|
||||
<button class="btn btn-primary">{{ _("Save changes") }}</button>
|
||||
<button class="btn btn-primary">{{ _("Edit the project") }}</button>
|
||||
</div>
|
||||
|
||||
{% endmacro %}
|
||||
|
@ -114,7 +113,7 @@
|
|||
{{ form.hidden_tag() }}
|
||||
{{ input(form.password) }}
|
||||
<div class="actions">
|
||||
<button class="btn btn-danger">{{ _("Delete project") }}</button>
|
||||
<button class="btn btn-primary">{{ _("Delete project") }}</button>
|
||||
</div>
|
||||
|
||||
{% endmacro %}
|
||||
|
@ -165,7 +164,6 @@
|
|||
{% include "display_errors.html" %}
|
||||
{{ form.hidden_tag() }}
|
||||
{{ input(form.date, inline=True) }}
|
||||
{{ input(form.bill_type, inline=True) }}
|
||||
{{ input(form.what, inline=True) }}
|
||||
{{ input(form.payer, inline=True, class="form-control custom-select") }}
|
||||
<div data-toggle="tooltip" data-placement="top" title='{{ _("Simple operations are allowed, e.g. (18+36.2)/3") }}'>
|
||||
|
@ -180,11 +178,7 @@
|
|||
<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 choices in form.payed_for.iter_choices() | sort(attribute='1') %}
|
||||
{# Compatibility with wtforms<3.1 #}
|
||||
{% set key = choices[0] %}
|
||||
{% set value = choices[1] %}
|
||||
{% set checked = choices[2] %}
|
||||
{% 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}}"/>
|
||||
|
|
|
@ -91,21 +91,6 @@
|
|||
{% endif %}
|
||||
{% endmacro %}
|
||||
|
||||
{% macro bill_details(details, before=False) %}
|
||||
{% set owers_list_str=details.owers|localize_list|safe %}
|
||||
<details class="small">
|
||||
<summary>{% if before %} {{ _("Details of the bill (before the change)") }} {% else %} {{ _("Details of the bill") }} {% endif %}</summary>
|
||||
{{ _("Date:") }} {{ details.date|em_surround }}.
|
||||
{{ _("Payer:") }} {{ details.payer|em_surround }}.
|
||||
{{ _("Amount:") }} {{ details.amount|currency(details.original_currency)|em_surround }}.
|
||||
{{ _("Owers:") }} {{ owers_list_str }}.
|
||||
{% if details.external_link %}
|
||||
{{ _("External link:") }}
|
||||
<a class="truncated" href="{{ details.external_link }}">{{ details.external_link }}</a>
|
||||
{% endif %}
|
||||
</details>
|
||||
{% endmacro %}
|
||||
|
||||
{% block sidebar %}
|
||||
<div id="table_overflow">
|
||||
{{ balance_table(show_weight=False, show_header=True) }}
|
||||
|
@ -118,17 +103,18 @@
|
|||
{% if current_log_pref == LoggingMode.DISABLED or (current_log_pref != LoggingMode.RECORD_IP and any_ip_addresses) %}
|
||||
<div id="history_warnings" class="card card-body bg-light">
|
||||
{% if current_log_pref == LoggingMode.DISABLED %}
|
||||
<p>
|
||||
<i>{{ _("This project has history disabled. New actions won't appear below.") }}
|
||||
<a href="{{ url_for(".edit_project") }}">{{ _("You can enable history on the settings page.") }}</a>
|
||||
</i>
|
||||
<p>{% set url = url_for(".edit_project") %}
|
||||
{% trans %}
|
||||
<i>This project has history disabled. New actions won't appear below. You can enable history on the</i>
|
||||
<a href="{{ url }}">settings page</a>
|
||||
{% endtrans %}
|
||||
</p>
|
||||
{% if history %}
|
||||
<p>
|
||||
<i>{{ _("The table below reflects actions recorded prior to disabling project history.") }}
|
||||
<a href="#" data-toggle="modal" data-keyboard="false" data-target="#confirm-erase">{{ _("You can clear the project history to remove them.") }}</a>
|
||||
</i>
|
||||
</p>
|
||||
{% trans %}
|
||||
<i>The table below reflects actions recorded prior to disabling project history. You can
|
||||
<a href="#" data-toggle="modal" data-keyboard="false" data-target="#confirm-erase">clear project history</a> to remove them.</i></p>
|
||||
{% endtrans %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if current_log_pref != LoggingMode.RECORD_IP and any_ip_addresses %}
|
||||
|
@ -192,12 +178,9 @@
|
|||
{% trans %}Project {{ name }} added{% endtrans %}
|
||||
{% elif event.object_type == "Bill" %}
|
||||
{% trans %}Bill {{ name }} added{% endtrans %}
|
||||
{{ bill_details(event.bill_details) }}
|
||||
|
||||
{% elif event.object_type == "Person" %}
|
||||
{% trans %}Participant {{ name }} added{% endtrans %}
|
||||
{% endif %}
|
||||
|
||||
{% elif event.operation_type == OperationType.UPDATE %}
|
||||
{% if event.object_type == "Project" %}
|
||||
{% if event.prop_changed == "password" %}
|
||||
|
@ -213,12 +196,24 @@
|
|||
{% else %}
|
||||
{{ _("Project settings modified") }}
|
||||
{% endif %}
|
||||
{% elif event.object_type == "Bill" %}
|
||||
{% if event.prop_changed == "what" %}
|
||||
{% elif event.prop_changed == "activated" %}
|
||||
{% if event.val_after == False %}
|
||||
{% trans %}Participant {{ name }} deactivated{% endtrans %}
|
||||
{% else %}
|
||||
{% trans %}Participant {{ name }} reactivated{% endtrans %}
|
||||
{% endif %}
|
||||
{% elif event.prop_changed == "name" %}
|
||||
{% set new_name=event.val_after|em_surround %}
|
||||
{% trans %}Participant {{ name }} renamed to {{ new_name }}{% endtrans %}
|
||||
{% elif event.prop_changed == "what" %}
|
||||
{% set new_description=event.val_after|em_surround %}
|
||||
{% trans %}Bill {{ name }} renamed to {{ new_description }}{% endtrans %}
|
||||
{% elif event.prop_changed == "weight" %}
|
||||
{% set old_weight=event.val_before|em_surround %}
|
||||
{% set new_weight=event.val_after|em_surround %}
|
||||
{% trans %}Participant {{ name }}: weight changed from {{ old_weight }} to {{ new_weight }}{% endtrans %}
|
||||
{% elif event.prop_changed == "external_link" %}
|
||||
{{ bill_property_change(event, _("External link"), None, "<a class='truncated' href='{link}' >{link}</a>".format(link=event.val_after | escape) | safe | em_surround) }}
|
||||
{{ bill_property_change(event, _("External link"), None, "<a href='{link}' >{link}</a>".format(link=event.val_after | escape) | safe | em_surround) }}
|
||||
{% elif event.prop_changed == "owers_added" %}
|
||||
{{ owers_changed(event, True)}}
|
||||
{% elif event.prop_changed == "owers_removed" %}
|
||||
|
@ -234,37 +229,18 @@
|
|||
{% elif event.prop_changed == "converted_amount" %}
|
||||
{{ bill_property_change(event, _("Amount in %(currency)s", currency=g.project.default_currency)) }}
|
||||
{% else %}
|
||||
{% if event.object_type == "Bill" %}
|
||||
{% trans %}Bill {{ name }} modified{% endtrans %}
|
||||
{% endif %}
|
||||
{{ bill_details(event.bill_details, before=True) }}
|
||||
|
||||
{% elif event.object_type == "Person" %}
|
||||
{% if event.prop_changed == "activated" %}
|
||||
{% if event.val_after == False %}
|
||||
{% trans %}Participant {{ name }} deactivated{% endtrans %}
|
||||
{% else %}
|
||||
{% trans %}Participant {{ name }} reactivated{% endtrans %}
|
||||
{% endif %}
|
||||
{% elif event.prop_changed == "name" %}
|
||||
{% set new_name=event.val_after|em_surround %}
|
||||
{% trans %}Participant {{ name }} renamed to {{ new_name }}{% endtrans %}
|
||||
{% elif event.prop_changed == "weight" %}
|
||||
{% set old_weight=event.val_before|em_surround %}
|
||||
{% set new_weight=event.val_after|em_surround %}
|
||||
{% trans %}Participant {{ name }}: weight changed from {{ old_weight }} to {{ new_weight }}{% endtrans %}
|
||||
{% else %}
|
||||
{% trans %}Participant {{ name }} modified{% endtrans %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% elif event.operation_type == OperationType.DELETE %}
|
||||
{% if event.object_type == "Bill" %}
|
||||
{% trans %}Bill {{ name }} removed{% endtrans %}
|
||||
{{ bill_details(event.bill_details) }}
|
||||
{% elif event.object_type == "Person" %}
|
||||
{% trans %}Participant {{ name }} removed{% endtrans %}
|
||||
{% endif %}
|
||||
|
||||
{% else %}
|
||||
{# Should be unreachable #}
|
||||
{% if event.object_type == "Project" %}
|
||||
|
|
|
@ -103,7 +103,6 @@
|
|||
{% 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>
|
||||
<li><a class="dropdown-item" href="{{ url_for("main.feed", token=g.project.generate_token("feed")) }}">{{ _("RSS Feed") }}</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% if session['projects'] and not ((session['projects'] | length) == 1 and g.project and g.project.id in session['projects']) %}
|
||||
|
@ -119,14 +118,12 @@
|
|||
{% if session['is_admin'] %}
|
||||
<li><a class="dropdown-item" href="{{ url_for("main.dashboard") }}">{{ _("Dashboard") }}</a></li>
|
||||
{% endif %}
|
||||
{% if g.logout_form %}
|
||||
<li>
|
||||
<form action="{{ url_for("main.exit") }}" method="post">
|
||||
{{ g.logout_form.hidden_tag() }}
|
||||
{{ g.logout_form.submit(class="dropdown-item") }}
|
||||
</form>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
@ -168,7 +165,7 @@
|
|||
<i class="icon book">{{ static_include("images/book.svg") | safe }}</i>
|
||||
</a>
|
||||
{% if g.show_admin_dashboard_link %}
|
||||
<a target="_blank" rel="noopener" data-toggle="tooltip" data-placement="top" title="{{ _('Administration Dashboard') }}" href="{{ url_for('main.dashboard') }}">
|
||||
<a target="_blank" rel="noopener" data-toggle="tooltip" data-placement="top" title="{{ _('Administation Dashboard') }}" href="{{ url_for('main.dashboard') }}">
|
||||
<i class="icon admin">{{ static_include("images/cog.svg") | safe }}</i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
|
|
@ -11,11 +11,6 @@
|
|||
{% block js %}
|
||||
{% if add_bill %} $('#new-bill > a').click(); {% endif %}
|
||||
|
||||
// focus on first field when adding a bill
|
||||
$("#bill-form").on('shown.bs.modal', function(){
|
||||
$(this).find('#what').focus();
|
||||
});
|
||||
|
||||
// ask for confirmation before removing an user
|
||||
$('.action.delete').each(function(){
|
||||
var link = $(this).find('button');
|
||||
|
@ -49,9 +44,6 @@
|
|||
|
||||
{% endblock %}
|
||||
|
||||
{% block head %}
|
||||
<link href="{{ url_for(".feed", token=g.project.generate_token("feed")) }}" type="application/rss+xml" rel="alternate" title="{{ g.project.name }}" />
|
||||
{% endblock %}
|
||||
|
||||
{% block sidebar %}
|
||||
<div class="sidebar_content">
|
||||
|
@ -106,7 +98,7 @@
|
|||
</ul>
|
||||
{% endif %}
|
||||
<span id="new-bill" class="ml-auto pb-2" {% if not g.project.members %} data-toggle="tooltip" title="{{_('You should start by adding participants')}}" {% endif %}>
|
||||
<a href="{{ url_for('.add_bill') }}" class="btn btn-primary {% if not g.project.members %} disabled {% endif %}" data-toggle="modal" data-keyboard="true" data-target="#bill-form" autofocus>
|
||||
<a href="{{ url_for('.add_bill') }}" class="btn btn-primary {% if not g.project.members %} disabled {% endif %}" data-toggle="modal" data-keyboard="false" data-target="#bill-form">
|
||||
<i class="icon icon-white before-text">{{ static_include("images/plus.svg") | safe }}</i>
|
||||
{{ _("Add a new bill") }}
|
||||
</a>
|
||||
|
@ -169,14 +161,13 @@
|
|||
<h3>{{ _('No bills')}}</h3>
|
||||
<p>
|
||||
{{ _("Nothing to list yet.")}}<br />
|
||||
{%- if g.project.members %}
|
||||
<a href="{{ url_for('.add_bill') }}" data-toggle="modal" data-target="#bill-form">
|
||||
{{- _("Add your first bill") -}}
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="{{ url_for('.add_member') }}">
|
||||
{{- _("Add the first participant") -}}
|
||||
</a>
|
||||
{{ _("You probably want to") }}
|
||||
{%- if g.project.members %} <a href="{{ url_for('.add_bill') }}" data-toggle="modal" data-target="#bill-form">
|
||||
{{- _("add a bill") -}}
|
||||
</a> ?
|
||||
{% else %} <a href="{{ url_for('.add_member') }}">
|
||||
{{- _('add participants') -}}
|
||||
</a> ?
|
||||
{%- endif -%}
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
>
|
||||
<channel>
|
||||
<title>I Hate Money — {{ g.project.name }}</title>
|
||||
<description>{% trans project_name=g.project.name %}Latest bills from {{ project_name }}{% endtrans %}</description>
|
||||
<atom:link href="{{ url_for(".feed", token=g.project.generate_token("feed"), _external=True) }}" rel="self" type="application/rss+xml" />
|
||||
<link>{{ url_for(".list_bills", _external=True) }}</link>
|
||||
{% for (weights, bill) in bills.items -%}
|
||||
<item>
|
||||
<title>{{ bill.what }} - {{ bill.amount|currency(bill.original_currency) }}</title>
|
||||
<guid isPermaLink="false">{{ bill.id }}</guid>
|
||||
<dc:creator>{{ bill.payer }}</dc:creator>
|
||||
{% if bill.external_link %}<link>{{ bill.external_link }}</link>{% endif -%}
|
||||
<description>{{ bill.date|dateformat("long") }} - {{ bill.owers|join(', ', 'name') }} : {{ (bill.amount/weights)|currency(bill.original_currency) }}</description>
|
||||
<pubDate>{{ bill.creation_date.strftime("%a, %d %b %Y %T") }} +0000</pubDate>
|
||||
</item>
|
||||
{% endfor -%}
|
||||
</channel>
|
||||
</rss>
|
|
@ -7,10 +7,20 @@
|
|||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<h3>{{ _('Share an invitation link') }}</h3>
|
||||
<h3>{{ _('Share Identifier & code') }}</h3>
|
||||
</td>
|
||||
<td>
|
||||
{{ _("The easiest way to invite people is to give them the following invitation link.<br />They will be able to access the project, manage participants, add/edit/delete bills. However, they will not have access to important settings such as changing the private code or deleting the whole project.") }}</br>
|
||||
{{ _("You can share the project identifier and the private code by any communication means.") }}
|
||||
<br />
|
||||
<strong>{{ _('Identifier:') }}</strong> <a href="{{ url_for("main.list_bills", project_id=g.project.id) }}">{{ g.project.id }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<h3>{{ _('Share the Link') }}</h3>
|
||||
</td>
|
||||
<td>
|
||||
{{ _("You can directly share the following link via your prefered medium") }}</br>
|
||||
<a href="{{ url_for(".join_project", _external=True, project_id=g.project.id, token=g.project.generate_token()) }}">
|
||||
{{ url_for(".join_project", _external=True, project_id=g.project.id, token=g.project.generate_token()) }}
|
||||
</a>
|
||||
|
@ -19,7 +29,7 @@
|
|||
<tr>
|
||||
<td>
|
||||
<h3>{{ _('Scan QR code') }}</h3>
|
||||
<p><small><a href="{{ url_for(".mobile") }}">{{ _("Use a mobile device with a compatible app.") }}</a></small></p>
|
||||
<p><small>{% trans download_mobile=url_for(".mobile") %}On a mobile device, with <a href="{{ download_mobile }}">a compatible app installed</a>.{% endtrans %}</small></p>
|
||||
</td>
|
||||
<td>
|
||||
{{ qrcode | safe }}
|
||||
|
@ -30,26 +40,14 @@
|
|||
<h3>{{ _('Send via Emails') }}</h3>
|
||||
</td>
|
||||
<td>
|
||||
<p>{{ _("Specify a list of email adresses (separated by comma) of people you want to notify about the creation of this project. We will send them an email with the invitation link.") }}</p>
|
||||
<p>{{ _("Specify a (comma separated) list of email adresses you want to notify about the
|
||||
creation of this budget management project and we will send them an email for you.") }}</p>
|
||||
{% include "display_errors.html" %}
|
||||
<form class="invites form-horizontal" method="post" accept-charset="utf-8">
|
||||
{{ forms.invites(form) }}
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<h3>{{ _('Share Identifier & code') }}</h3>
|
||||
</td>
|
||||
<td>
|
||||
<p>{{ _("You can share the project identifier and the private code by any communication means.<br />Anyone with the private code will have access to the full project, including changing settings such as the private code or project email address, or even deleting the whole project.") }}</p>
|
||||
<p>
|
||||
<strong>{{ _('Identifier:') }}</strong> <a href="{{ url_for("main.list_bills", project_id=g.project.id) }}">{{ g.project.id }}</a>
|
||||
<br />
|
||||
<strong>{{ _('Private code:') }}</strong> {{ _('the private code was defined when you created the project') }}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
|
|
@ -9,20 +9,13 @@
|
|||
|
||||
{% block content %}
|
||||
<table id="bill_table" class="split_bills table table-striped">
|
||||
<thead><tr><th>{{ _("Who pays?") }}</th><th>{{ _("To whom?") }}</th><th>{{ _("How much?") }}</th><th>{{ _("Settled?") }}</th></tr></thead>
|
||||
<thead><tr><th>{{ _("Who pays?") }}</th><th>{{ _("To whom?") }}</th><th>{{ _("How much?") }}</th></tr></thead>
|
||||
<tbody>
|
||||
{% for bill in bills %}
|
||||
<tr receiver={{bill.receiver.id}}>
|
||||
<td>{{ bill.ower }}</td>
|
||||
<td>{{ bill.receiver }}</td>
|
||||
<td>{{ bill.amount|currency }}</td>
|
||||
<td>
|
||||
<span id="settle-bill" class="ml-auto pb-2">
|
||||
<a href="{{ url_for('.settle', amount = bill.amount, ower_id = bill.ower.id, payer_id = bill.receiver.id) }}" class="btn btn-primary">
|
||||
{{ ("Settle") }}
|
||||
</a>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
import base64
|
||||
import datetime
|
||||
import json
|
||||
|
||||
import pytest
|
||||
import unittest
|
||||
|
||||
from ihatemoney.tests.common.help_functions import em_surround
|
||||
from ihatemoney.tests.common.ihatemoney_testcase import IhatemoneyTestCase
|
||||
|
||||
|
||||
class TestAPI(IhatemoneyTestCase):
|
||||
class APITestCase(IhatemoneyTestCase):
|
||||
|
||||
"""Tests the API"""
|
||||
|
||||
|
@ -43,7 +42,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
def get_auth(self, username, password=None):
|
||||
password = password or username
|
||||
base64string = (
|
||||
base64.encodebytes(f"{username}:{password}".encode("utf-8")) # noqa: E231
|
||||
base64.encodebytes(f"{username}:{password}".encode("utf-8"))
|
||||
.decode("utf-8")
|
||||
.replace("\n", "")
|
||||
)
|
||||
|
@ -58,7 +57,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
resp = self.client.options(
|
||||
"/api/projects/raclette", headers=self.get_auth("raclette")
|
||||
)
|
||||
assert resp.headers["Access-Control-Allow-Origin"] == "*"
|
||||
self.assertEqual(resp.headers["Access-Control-Allow-Origin"], "*")
|
||||
|
||||
def test_basic_auth(self):
|
||||
# create a project
|
||||
|
@ -95,32 +94,32 @@ class TestAPI(IhatemoneyTestCase):
|
|||
},
|
||||
)
|
||||
|
||||
assert 400 == resp.status_code
|
||||
assert '{"contact_email": ["Invalid email address."]}\n' == resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertTrue(400, resp.status_code)
|
||||
self.assertEqual(
|
||||
'{"contact_email": ["Invalid email address."]}\n', resp.data.decode("utf-8")
|
||||
)
|
||||
|
||||
# create it
|
||||
with self.app.mail.record_messages() as outbox:
|
||||
resp = self.api_create("raclette")
|
||||
assert 201 == resp.status_code
|
||||
self.assertTrue(201, resp.status_code)
|
||||
|
||||
# Check that email messages have been sent.
|
||||
assert len(outbox) == 1
|
||||
assert outbox[0].recipients == ["raclette@notmyidea.org"]
|
||||
self.assertEqual(len(outbox), 1)
|
||||
self.assertEqual(outbox[0].recipients, ["raclette@notmyidea.org"])
|
||||
|
||||
# create it twice should return a 400
|
||||
resp = self.api_create("raclette")
|
||||
|
||||
assert 400 == resp.status_code
|
||||
assert "id" in json.loads(resp.data.decode("utf-8"))
|
||||
self.assertTrue(400, resp.status_code)
|
||||
self.assertIn("id", json.loads(resp.data.decode("utf-8")))
|
||||
|
||||
# get information about it
|
||||
resp = self.client.get(
|
||||
"/api/projects/raclette", headers=self.get_auth("raclette")
|
||||
)
|
||||
|
||||
assert 200 == resp.status_code
|
||||
self.assertTrue(200, resp.status_code)
|
||||
expected = {
|
||||
"members": [],
|
||||
"name": "raclette",
|
||||
|
@ -130,9 +129,9 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"logging_preference": 1,
|
||||
}
|
||||
decoded_resp = json.loads(resp.data.decode("utf-8"))
|
||||
assert decoded_resp == expected
|
||||
self.assertDictEqual(decoded_resp, expected)
|
||||
|
||||
# edit should fail if we don't provide the current private code
|
||||
# edit should work
|
||||
resp = self.client.put(
|
||||
"/api/projects/raclette",
|
||||
data={
|
||||
|
@ -144,43 +143,14 @@ class TestAPI(IhatemoneyTestCase):
|
|||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
assert 400 == resp.status_code
|
||||
|
||||
# edit should fail if we provide the wrong private code
|
||||
resp = self.client.put(
|
||||
"/api/projects/raclette",
|
||||
data={
|
||||
"contact_email": "yeah@notmyidea.org",
|
||||
"default_currency": "XXX",
|
||||
"current_password": "fromage aux patates",
|
||||
"password": "raclette",
|
||||
"name": "The raclette party",
|
||||
"project_history": "y",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
assert 400 == resp.status_code
|
||||
|
||||
# edit with the correct private code should work
|
||||
resp = self.client.put(
|
||||
"/api/projects/raclette",
|
||||
data={
|
||||
"contact_email": "yeah@notmyidea.org",
|
||||
"default_currency": "XXX",
|
||||
"current_password": "raclette",
|
||||
"password": "raclette",
|
||||
"name": "The raclette party",
|
||||
"project_history": "y",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
assert 200 == resp.status_code
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
resp = self.client.get(
|
||||
"/api/projects/raclette", headers=self.get_auth("raclette")
|
||||
)
|
||||
|
||||
assert 200 == resp.status_code
|
||||
self.assertEqual(200, resp.status_code)
|
||||
expected = {
|
||||
"name": "The raclette party",
|
||||
"contact_email": "yeah@notmyidea.org",
|
||||
|
@ -190,7 +160,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"logging_preference": 1,
|
||||
}
|
||||
decoded_resp = json.loads(resp.data.decode("utf-8"))
|
||||
assert decoded_resp == expected
|
||||
self.assertDictEqual(decoded_resp, expected)
|
||||
|
||||
# password change is possible via API
|
||||
resp = self.client.put(
|
||||
|
@ -198,19 +168,18 @@ class TestAPI(IhatemoneyTestCase):
|
|||
data={
|
||||
"contact_email": "yeah@notmyidea.org",
|
||||
"default_currency": "XXX",
|
||||
"current_password": "raclette",
|
||||
"password": "tartiflette",
|
||||
"name": "The raclette party",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
|
||||
assert 200 == resp.status_code
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
resp = self.client.get(
|
||||
"/api/projects/raclette", headers=self.get_auth("raclette", "tartiflette")
|
||||
)
|
||||
assert 200 == resp.status_code
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
# delete should work
|
||||
resp = self.client.delete(
|
||||
|
@ -221,21 +190,21 @@ class TestAPI(IhatemoneyTestCase):
|
|||
resp = self.client.get(
|
||||
"/api/projects/raclette", headers=self.get_auth("raclette")
|
||||
)
|
||||
assert 401 == resp.status_code
|
||||
self.assertEqual(401, resp.status_code)
|
||||
|
||||
def test_token_creation(self):
|
||||
"""Test that token of project is generated"""
|
||||
|
||||
# Create project
|
||||
resp = self.api_create("raclette")
|
||||
assert 201 == resp.status_code
|
||||
self.assertTrue(201, resp.status_code)
|
||||
|
||||
# Get token
|
||||
resp = self.client.get(
|
||||
"/api/projects/raclette/token", headers=self.get_auth("raclette")
|
||||
)
|
||||
|
||||
assert 200 == resp.status_code
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
decoded_resp = json.loads(resp.data.decode("utf-8"))
|
||||
|
||||
|
@ -244,22 +213,8 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"/api/projects/raclette/token",
|
||||
headers={"Authorization": f"Basic {decoded_resp['token']}"},
|
||||
)
|
||||
assert 200 == resp.status_code
|
||||
|
||||
# We shouldn't be able to edit project without private code
|
||||
resp = self.client.put(
|
||||
"/api/projects/raclette",
|
||||
data={
|
||||
"contact_email": "yeah@notmyidea.org",
|
||||
"default_currency": "XXX",
|
||||
"password": "tartiflette",
|
||||
"name": "The raclette party",
|
||||
},
|
||||
headers={"Authorization": f"Basic {decoded_resp['token']}"},
|
||||
)
|
||||
assert 400 == resp.status_code
|
||||
expected_resp = {"current_password": ["This field is required."]}
|
||||
assert expected_resp == json.loads(resp.data.decode("utf-8"))
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
def test_token_login(self):
|
||||
resp = self.api_create("raclette")
|
||||
|
@ -270,7 +225,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
decoded_resp = json.loads(resp.data.decode("utf-8"))
|
||||
resp = self.client.get(f"/raclette/join/{decoded_resp['token']}")
|
||||
# Test that we are redirected.
|
||||
assert 302 == resp.status_code
|
||||
self.assertEqual(302, resp.status_code)
|
||||
|
||||
def test_member(self):
|
||||
# create a project
|
||||
|
@ -282,7 +237,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
)
|
||||
|
||||
self.assertStatus(200, req)
|
||||
assert "[]\n" == req.data.decode("utf-8")
|
||||
self.assertEqual("[]\n", req.data.decode("utf-8"))
|
||||
|
||||
# add a member
|
||||
req = self.client.post(
|
||||
|
@ -293,7 +248,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
# the id of the new member should be returned
|
||||
self.assertStatus(201, req)
|
||||
assert "1\n" == req.data.decode("utf-8")
|
||||
self.assertEqual("1\n", req.data.decode("utf-8"))
|
||||
|
||||
# the list of participants should contain one member
|
||||
req = self.client.get(
|
||||
|
@ -301,7 +256,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
)
|
||||
|
||||
self.assertStatus(200, req)
|
||||
assert len(json.loads(req.data.decode("utf-8"))) == 1
|
||||
self.assertEqual(len(json.loads(req.data.decode("utf-8"))), 1)
|
||||
|
||||
# Try to add another member with the same name.
|
||||
req = self.client.post(
|
||||
|
@ -314,7 +269,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
# edit the participant
|
||||
req = self.client.put(
|
||||
"/api/projects/raclette/members/1",
|
||||
data={"name": "Jeanne", "weight": 2},
|
||||
data={"name": "Fred", "weight": 2},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
|
||||
|
@ -326,14 +281,14 @@ class TestAPI(IhatemoneyTestCase):
|
|||
)
|
||||
|
||||
self.assertStatus(200, req)
|
||||
assert "Jeanne" == json.loads(req.data.decode("utf-8"))["name"]
|
||||
assert 2 == json.loads(req.data.decode("utf-8"))["weight"]
|
||||
self.assertEqual("Fred", json.loads(req.data.decode("utf-8"))["name"])
|
||||
self.assertEqual(2, json.loads(req.data.decode("utf-8"))["weight"])
|
||||
|
||||
# edit this member with same information
|
||||
# (test PUT idempotence)
|
||||
# (test PUT idemopotence)
|
||||
req = self.client.put(
|
||||
"/api/projects/raclette/members/1",
|
||||
data={"name": "Jeanne"},
|
||||
data={"name": "Fred"},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
|
||||
|
@ -342,7 +297,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
# de-activate the participant
|
||||
req = self.client.put(
|
||||
"/api/projects/raclette/members/1",
|
||||
data={"name": "Jeanne", "activated": False},
|
||||
data={"name": "Fred", "activated": False},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
self.assertStatus(200, req)
|
||||
|
@ -351,12 +306,12 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"/api/projects/raclette/members/1", headers=self.get_auth("raclette")
|
||||
)
|
||||
self.assertStatus(200, req)
|
||||
assert not json.loads(req.data.decode("utf-8"))["activated"]
|
||||
self.assertEqual(False, json.loads(req.data.decode("utf-8"))["activated"])
|
||||
|
||||
# re-activate the participant
|
||||
req = self.client.put(
|
||||
"/api/projects/raclette/members/1",
|
||||
data={"name": "Jeanne", "activated": True},
|
||||
data={"name": "Fred", "activated": True},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
|
||||
|
@ -364,7 +319,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"/api/projects/raclette/members/1", headers=self.get_auth("raclette")
|
||||
)
|
||||
self.assertStatus(200, req)
|
||||
assert json.loads(req.data.decode("utf-8"))["activated"]
|
||||
self.assertEqual(True, json.loads(req.data.decode("utf-8"))["activated"])
|
||||
|
||||
# delete a member
|
||||
|
||||
|
@ -380,7 +335,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
)
|
||||
|
||||
self.assertStatus(200, req)
|
||||
assert "[]\n" == req.data.decode("utf-8")
|
||||
self.assertEqual("[]\n", req.data.decode("utf-8"))
|
||||
|
||||
def test_bills(self):
|
||||
# create a project
|
||||
|
@ -388,7 +343,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
# add participants
|
||||
self.api_add_member("raclette", "zorglub")
|
||||
self.api_add_member("raclette", "jeanne")
|
||||
self.api_add_member("raclette", "fred")
|
||||
self.api_add_member("raclette", "quentin")
|
||||
|
||||
# get the list of bills (should be empty)
|
||||
|
@ -397,7 +352,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
)
|
||||
self.assertStatus(200, req)
|
||||
|
||||
assert "[]\n" == req.data.decode("utf-8")
|
||||
self.assertEqual("[]\n", req.data.decode("utf-8"))
|
||||
|
||||
# add a bill
|
||||
req = self.client.post(
|
||||
|
@ -407,7 +362,6 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1", "2"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "25",
|
||||
"external_link": "https://raclette.fr",
|
||||
},
|
||||
|
@ -416,7 +370,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
# should return the id
|
||||
self.assertStatus(201, req)
|
||||
assert req.data.decode("utf-8") == "1\n"
|
||||
self.assertEqual(req.data.decode("utf-8"), "1\n")
|
||||
|
||||
# get this bill details
|
||||
req = self.client.get(
|
||||
|
@ -430,9 +384,8 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"payer_id": 1,
|
||||
"owers": [
|
||||
{"activated": True, "id": 1, "name": "zorglub", "weight": 1},
|
||||
{"activated": True, "id": 2, "name": "jeanne", "weight": 1},
|
||||
{"activated": True, "id": 2, "name": "fred", "weight": 1},
|
||||
],
|
||||
"bill_type": "Expense",
|
||||
"amount": 25.0,
|
||||
"date": "2011-08-10",
|
||||
"id": 1,
|
||||
|
@ -442,19 +395,19 @@ class TestAPI(IhatemoneyTestCase):
|
|||
}
|
||||
|
||||
got = json.loads(req.data.decode("utf-8"))
|
||||
assert (
|
||||
datetime.date.today()
|
||||
== datetime.datetime.strptime(got["creation_date"], "%Y-%m-%d").date()
|
||||
self.assertEqual(
|
||||
datetime.date.today(),
|
||||
datetime.datetime.strptime(got["creation_date"], "%Y-%m-%d").date(),
|
||||
)
|
||||
del got["creation_date"]
|
||||
assert expected == got
|
||||
self.assertDictEqual(expected, got)
|
||||
|
||||
# the list of bills should length 1
|
||||
req = self.client.get(
|
||||
"/api/projects/raclette/bills", headers=self.get_auth("raclette")
|
||||
)
|
||||
self.assertStatus(200, req)
|
||||
assert 1 == len(json.loads(req.data.decode("utf-8")))
|
||||
self.assertEqual(1, len(json.loads(req.data.decode("utf-8"))))
|
||||
|
||||
# edit with errors should return an error
|
||||
req = self.client.put(
|
||||
|
@ -464,7 +417,6 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1", "2"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "25",
|
||||
"external_link": "https://raclette.fr",
|
||||
},
|
||||
|
@ -472,7 +424,9 @@ class TestAPI(IhatemoneyTestCase):
|
|||
)
|
||||
|
||||
self.assertStatus(400, req)
|
||||
assert '{"date": ["This field is required."]}\n' == req.data.decode("utf-8")
|
||||
self.assertEqual(
|
||||
'{"date": ["This field is required."]}\n', req.data.decode("utf-8")
|
||||
)
|
||||
|
||||
# edit a bill
|
||||
req = self.client.put(
|
||||
|
@ -482,7 +436,6 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "beer",
|
||||
"payer": "2",
|
||||
"payed_for": ["1", "2"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "25",
|
||||
"external_link": "https://raclette.fr",
|
||||
},
|
||||
|
@ -502,9 +455,8 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"payer_id": 2,
|
||||
"owers": [
|
||||
{"activated": True, "id": 1, "name": "zorglub", "weight": 1},
|
||||
{"activated": True, "id": 2, "name": "jeanne", "weight": 1},
|
||||
{"activated": True, "id": 2, "name": "fred", "weight": 1},
|
||||
],
|
||||
"bill_type": "Expense",
|
||||
"amount": 25.0,
|
||||
"date": "2011-09-10",
|
||||
"external_link": "https://raclette.fr",
|
||||
|
@ -514,12 +466,12 @@ class TestAPI(IhatemoneyTestCase):
|
|||
}
|
||||
|
||||
got = json.loads(req.data.decode("utf-8"))
|
||||
assert (
|
||||
creation_date
|
||||
== datetime.datetime.strptime(got["creation_date"], "%Y-%m-%d").date()
|
||||
self.assertEqual(
|
||||
creation_date,
|
||||
datetime.datetime.strptime(got["creation_date"], "%Y-%m-%d").date(),
|
||||
)
|
||||
del got["creation_date"]
|
||||
assert expected == got
|
||||
self.assertDictEqual(expected, got)
|
||||
|
||||
# delete a bill
|
||||
req = self.client.delete(
|
||||
|
@ -539,7 +491,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
# add participants
|
||||
self.api_add_member("raclette", "zorglub")
|
||||
self.api_add_member("raclette", "jeanne")
|
||||
self.api_add_member("raclette", "fred")
|
||||
|
||||
# valid amounts
|
||||
input_expected = [
|
||||
|
@ -559,7 +511,6 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1", "2"],
|
||||
"bill_type": "Expense",
|
||||
"amount": input_amount,
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
|
@ -567,7 +518,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
# should return the id
|
||||
self.assertStatus(201, req)
|
||||
assert req.data.decode("utf-8") == "{}\n".format(id)
|
||||
self.assertEqual(req.data.decode("utf-8"), "{}\n".format(id))
|
||||
|
||||
# get this bill's details
|
||||
req = self.client.get(
|
||||
|
@ -582,9 +533,8 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"payer_id": 1,
|
||||
"owers": [
|
||||
{"activated": True, "id": 1, "name": "zorglub", "weight": 1},
|
||||
{"activated": True, "id": 2, "name": "jeanne", "weight": 1},
|
||||
{"activated": True, "id": 2, "name": "fred", "weight": 1},
|
||||
],
|
||||
"bill_type": "Expense",
|
||||
"amount": expected_amount,
|
||||
"date": "2011-08-10",
|
||||
"id": id,
|
||||
|
@ -594,12 +544,12 @@ class TestAPI(IhatemoneyTestCase):
|
|||
}
|
||||
|
||||
got = json.loads(req.data.decode("utf-8"))
|
||||
assert (
|
||||
datetime.date.today()
|
||||
== datetime.datetime.strptime(got["creation_date"], "%Y-%m-%d").date()
|
||||
self.assertEqual(
|
||||
datetime.date.today(),
|
||||
datetime.datetime.strptime(got["creation_date"], "%Y-%m-%d").date(),
|
||||
)
|
||||
del got["creation_date"]
|
||||
assert expected == got
|
||||
self.assertDictEqual(expected, got)
|
||||
|
||||
# should raise errors
|
||||
erroneous_amounts = [
|
||||
|
@ -618,30 +568,28 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1", "2"],
|
||||
"bill_type": "Expense",
|
||||
"amount": amount,
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
self.assertStatus(400, req)
|
||||
|
||||
@pytest.mark.skip(reason="Currency conversion is broken")
|
||||
def test_currencies(self):
|
||||
# check /currencies for list of supported currencies
|
||||
resp = self.client.get("/api/currencies")
|
||||
assert 200 == resp.status_code
|
||||
assert "XXX" in json.loads(resp.data.decode("utf-8"))
|
||||
self.assertTrue(201, resp.status_code)
|
||||
self.assertIn("XXX", json.loads(resp.data.decode("utf-8")))
|
||||
|
||||
# create project with a default currency
|
||||
resp = self.api_create("raclette", default_currency="EUR")
|
||||
assert 201 == resp.status_code
|
||||
self.assertTrue(201, resp.status_code)
|
||||
|
||||
# get information about it
|
||||
resp = self.client.get(
|
||||
"/api/projects/raclette", headers=self.get_auth("raclette")
|
||||
)
|
||||
|
||||
assert 200 == resp.status_code
|
||||
self.assertTrue(200, resp.status_code)
|
||||
expected = {
|
||||
"members": [],
|
||||
"name": "raclette",
|
||||
|
@ -651,11 +599,11 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"logging_preference": 1,
|
||||
}
|
||||
decoded_resp = json.loads(resp.data.decode("utf-8"))
|
||||
assert decoded_resp == expected
|
||||
self.assertDictEqual(decoded_resp, expected)
|
||||
|
||||
# Add participants
|
||||
self.api_add_member("raclette", "zorglub")
|
||||
self.api_add_member("raclette", "jeanne")
|
||||
self.api_add_member("raclette", "fred")
|
||||
self.api_add_member("raclette", "quentin")
|
||||
|
||||
# Add a bill without explicit currency
|
||||
|
@ -666,7 +614,6 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1", "2"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "25",
|
||||
"external_link": "https://raclette.fr",
|
||||
},
|
||||
|
@ -675,7 +622,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
# should return the id
|
||||
self.assertStatus(201, req)
|
||||
assert req.data.decode("utf-8") == "1\n"
|
||||
self.assertEqual(req.data.decode("utf-8"), "1\n")
|
||||
|
||||
# get this bill details
|
||||
req = self.client.get(
|
||||
|
@ -689,9 +636,8 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"payer_id": 1,
|
||||
"owers": [
|
||||
{"activated": True, "id": 1, "name": "zorglub", "weight": 1},
|
||||
{"activated": True, "id": 2, "name": "jeanne", "weight": 1},
|
||||
{"activated": True, "id": 2, "name": "fred", "weight": 1},
|
||||
],
|
||||
"bill_type": "Expense",
|
||||
"amount": 25.0,
|
||||
"date": "2011-08-10",
|
||||
"id": 1,
|
||||
|
@ -701,12 +647,12 @@ class TestAPI(IhatemoneyTestCase):
|
|||
}
|
||||
|
||||
got = json.loads(req.data.decode("utf-8"))
|
||||
assert (
|
||||
datetime.date.today()
|
||||
== datetime.datetime.strptime(got["creation_date"], "%Y-%m-%d").date()
|
||||
self.assertEqual(
|
||||
datetime.date.today(),
|
||||
datetime.datetime.strptime(got["creation_date"], "%Y-%m-%d").date(),
|
||||
)
|
||||
del got["creation_date"]
|
||||
assert expected == got
|
||||
self.assertDictEqual(expected, got)
|
||||
|
||||
# Change bill amount and currency
|
||||
req = self.client.put(
|
||||
|
@ -716,7 +662,6 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1", "2"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "30",
|
||||
"external_link": "https://raclette.fr",
|
||||
"original_currency": "CAD",
|
||||
|
@ -736,9 +681,8 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"payer_id": 1,
|
||||
"owers": [
|
||||
{"activated": True, "id": 1, "name": "zorglub", "weight": 1.0},
|
||||
{"activated": True, "id": 2, "name": "jeanne", "weight": 1.0},
|
||||
{"activated": True, "id": 2, "name": "fred", "weight": 1.0},
|
||||
],
|
||||
"bill_type": "Expense",
|
||||
"amount": 30.0,
|
||||
"date": "2011-08-10",
|
||||
"id": 1,
|
||||
|
@ -749,7 +693,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
got = json.loads(req.data.decode("utf-8"))
|
||||
del got["creation_date"]
|
||||
assert expected == got
|
||||
self.assertDictEqual(expected, got)
|
||||
|
||||
# Add a bill with yet another currency
|
||||
req = self.client.post(
|
||||
|
@ -759,7 +703,6 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "Pierogi",
|
||||
"payer": "1",
|
||||
"payed_for": ["2", "3"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "80",
|
||||
"original_currency": "PLN",
|
||||
},
|
||||
|
@ -768,7 +711,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
# should return the id
|
||||
self.assertStatus(201, req)
|
||||
assert req.data.decode("utf-8") == "2\n"
|
||||
self.assertEqual(req.data.decode("utf-8"), "2\n")
|
||||
|
||||
# Try to remove default project currency, it should fail
|
||||
req = self.client.put(
|
||||
|
@ -776,16 +719,15 @@ class TestAPI(IhatemoneyTestCase):
|
|||
data={
|
||||
"contact_email": "yeah@notmyidea.org",
|
||||
"default_currency": "XXX",
|
||||
"current_password": "raclette",
|
||||
"password": "raclette",
|
||||
"name": "The raclette party",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
self.assertStatus(400, req)
|
||||
assert "This project cannot be set" in req.data.decode("utf-8")
|
||||
assert "because it contains bills in multiple currencies" in req.data.decode(
|
||||
"utf-8"
|
||||
self.assertIn("This project cannot be set", req.data.decode("utf-8"))
|
||||
self.assertIn(
|
||||
"because it contains bills in multiple currencies", req.data.decode("utf-8")
|
||||
)
|
||||
|
||||
def test_statistics(self):
|
||||
|
@ -794,7 +736,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
# add participants
|
||||
self.api_add_member("raclette", "zorglub")
|
||||
self.api_add_member("raclette", "jeanne")
|
||||
self.api_add_member("raclette", "fred")
|
||||
|
||||
# add a bill
|
||||
req = self.client.post(
|
||||
|
@ -804,7 +746,6 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1", "2"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "25",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
|
@ -815,7 +756,8 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"/api/projects/raclette/statistics", headers=self.get_auth("raclette")
|
||||
)
|
||||
self.assertStatus(200, req)
|
||||
assert [
|
||||
self.assertEqual(
|
||||
[
|
||||
{
|
||||
"balance": 12.5,
|
||||
"member": {
|
||||
|
@ -832,13 +774,15 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"member": {
|
||||
"activated": True,
|
||||
"id": 2,
|
||||
"name": "jeanne",
|
||||
"name": "fred",
|
||||
"weight": 1.0,
|
||||
},
|
||||
"paid": 0,
|
||||
"spent": 12.5,
|
||||
},
|
||||
] == json.loads(req.data.decode("utf-8"))
|
||||
],
|
||||
json.loads(req.data.decode("utf-8")),
|
||||
)
|
||||
|
||||
def test_username_xss(self):
|
||||
# create a project
|
||||
|
@ -850,7 +794,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
self.api_add_member("raclette", "<script>")
|
||||
|
||||
result = self.client.get("/raclette/")
|
||||
assert "<script>" not in result.data.decode("utf-8")
|
||||
self.assertNotIn("<script>", result.data.decode("utf-8"))
|
||||
|
||||
def test_weighted_bills(self):
|
||||
# create a project
|
||||
|
@ -858,7 +802,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
# add participants
|
||||
self.api_add_member("raclette", "zorglub")
|
||||
self.api_add_member("raclette", "jeannedy familly", 4)
|
||||
self.api_add_member("raclette", "freddy familly", 4)
|
||||
self.api_add_member("raclette", "quentin")
|
||||
|
||||
# add a bill
|
||||
|
@ -869,7 +813,6 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1", "2"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "25",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
|
@ -890,9 +833,8 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"payer_id": 1,
|
||||
"owers": [
|
||||
{"activated": True, "id": 1, "name": "zorglub", "weight": 1},
|
||||
{"activated": True, "id": 2, "name": "jeannedy familly", "weight": 4},
|
||||
{"activated": True, "id": 2, "name": "freddy familly", "weight": 4},
|
||||
],
|
||||
"bill_type": "Expense",
|
||||
"amount": 25.0,
|
||||
"date": "2011-08-10",
|
||||
"id": 1,
|
||||
|
@ -901,12 +843,12 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"original_currency": "XXX",
|
||||
}
|
||||
got = json.loads(req.data.decode("utf-8"))
|
||||
assert (
|
||||
creation_date
|
||||
== datetime.datetime.strptime(got["creation_date"], "%Y-%m-%d").date()
|
||||
self.assertEqual(
|
||||
creation_date,
|
||||
datetime.datetime.strptime(got["creation_date"], "%Y-%m-%d").date(),
|
||||
)
|
||||
del got["creation_date"]
|
||||
assert expected == got
|
||||
self.assertDictEqual(expected, got)
|
||||
|
||||
# getting it should return a 404
|
||||
req = self.client.get(
|
||||
|
@ -925,7 +867,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
{
|
||||
"activated": True,
|
||||
"id": 2,
|
||||
"name": "jeannedy familly",
|
||||
"name": "freddy familly",
|
||||
"weight": 4.0,
|
||||
"balance": -20.0,
|
||||
},
|
||||
|
@ -946,7 +888,7 @@ class TestAPI(IhatemoneyTestCase):
|
|||
|
||||
self.assertStatus(200, req)
|
||||
decoded_req = json.loads(req.data.decode("utf-8"))
|
||||
assert decoded_req == expected
|
||||
self.assertDictEqual(decoded_req, expected)
|
||||
|
||||
def test_log_created_from_api_call(self):
|
||||
# create a project
|
||||
|
@ -957,13 +899,15 @@ class TestAPI(IhatemoneyTestCase):
|
|||
self.api_add_member("raclette", "zorglub")
|
||||
|
||||
resp = self.client.get("/raclette/history", follow_redirects=True)
|
||||
assert resp.status_code == 200
|
||||
assert f"Participant {em_surround('zorglub')} added" in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(
|
||||
f"Participant {em_surround('zorglub')} added", resp.data.decode("utf-8")
|
||||
)
|
||||
assert f"Project {em_surround('raclette')} added" in resp.data.decode("utf-8")
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 2
|
||||
assert "127.0.0.1" not in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
f"Project {em_surround('raclette')} added", resp.data.decode("utf-8")
|
||||
)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 2)
|
||||
self.assertNotIn("127.0.0.1", resp.data.decode("utf-8"))
|
||||
|
||||
def test_amount_is_null(self):
|
||||
self.api_create("raclette")
|
||||
|
@ -978,7 +922,6 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "0",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
|
@ -1007,71 +950,12 @@ class TestAPI(IhatemoneyTestCase):
|
|||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "9347242149381274732472348728748723473278472843.12",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
self.assertStatus(400, req)
|
||||
|
||||
def test_validate_bill_type(self):
|
||||
self.api_create("raclette")
|
||||
self.api_add_member("raclette", "zorglub")
|
||||
|
||||
req = self.client.post(
|
||||
"/api/projects/raclette/bills",
|
||||
data={
|
||||
"date": "2011-08-10",
|
||||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1"],
|
||||
"bill_type": "wrong_bill_type",
|
||||
"amount": "50",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
|
||||
self.assertStatus(400, req)
|
||||
|
||||
req = self.client.post(
|
||||
"/api/projects/raclette/bills",
|
||||
data={
|
||||
"date": "2011-08-10",
|
||||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1"],
|
||||
"bill_type": "Expense",
|
||||
"amount": "50",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
|
||||
self.assertStatus(201, req)
|
||||
|
||||
def test_default_bill_type(self):
|
||||
self.api_create("raclette")
|
||||
self.api_add_member("raclette", "zorglub")
|
||||
|
||||
# Post a bill without adding a bill type
|
||||
req = self.client.post(
|
||||
"/api/projects/raclette/bills",
|
||||
data={
|
||||
"date": "2011-08-10",
|
||||
"what": "fromage",
|
||||
"payer": "1",
|
||||
"payed_for": ["1"],
|
||||
"amount": "50",
|
||||
},
|
||||
headers=self.get_auth("raclette"),
|
||||
)
|
||||
|
||||
self.assertStatus(201, req)
|
||||
|
||||
req = self.client.get(
|
||||
"/api/projects/raclette/bills/1", headers=self.get_auth("raclette")
|
||||
)
|
||||
self.assertStatus(200, req)
|
||||
|
||||
# Bill type should now be "Expense"
|
||||
got = json.loads(req.data.decode("utf-8"))
|
||||
assert got["bill_type"] == "Expense"
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,20 +1,44 @@
|
|||
import os
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
import pytest
|
||||
from flask_testing import TestCase
|
||||
from werkzeug.security import generate_password_hash
|
||||
|
||||
from ihatemoney import models
|
||||
from ihatemoney.utils import generate_password_hash
|
||||
from ihatemoney.currency_convertor import CurrencyConverter
|
||||
from ihatemoney.run import create_app, db
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("client", "converter")
|
||||
class BaseTestCase:
|
||||
class BaseTestCase(TestCase):
|
||||
SECRET_KEY = "TEST SESSION"
|
||||
SQLALCHEMY_DATABASE_URI = os.environ.get(
|
||||
"TESTING_SQLALCHEMY_DATABASE_URI", "sqlite://"
|
||||
)
|
||||
ENABLE_CAPTCHA = False
|
||||
PASSWORD_HASH_METHOD = "pbkdf2:sha1:1"
|
||||
PASSWORD_HASH_SALT_LENGTH = 1
|
||||
|
||||
def create_app(self):
|
||||
# Pass the test object as a configuration.
|
||||
return create_app(self)
|
||||
|
||||
def setUp(self):
|
||||
db.create_all()
|
||||
# Add dummy data to CurrencyConverter for all tests (since it's a singleton)
|
||||
mock_data = {
|
||||
"USD": 1,
|
||||
"EUR": 0.8,
|
||||
"CAD": 1.2,
|
||||
"PLN": 4,
|
||||
CurrencyConverter.no_currency: 1,
|
||||
}
|
||||
converter = CurrencyConverter()
|
||||
converter.get_rates = MagicMock(return_value=mock_data)
|
||||
# Also add it to an attribute to make tests clearer
|
||||
self.converter = converter
|
||||
|
||||
def tearDown(self):
|
||||
# clean after testing
|
||||
db.session.remove()
|
||||
db.drop_all()
|
||||
|
||||
def login(self, project, password=None, test_client=None):
|
||||
password = password or project
|
||||
|
@ -32,7 +56,6 @@ class BaseTestCase:
|
|||
default_currency="XXX",
|
||||
name=None,
|
||||
password=None,
|
||||
project_history=True,
|
||||
):
|
||||
"""Create a fake project"""
|
||||
name = name or id
|
||||
|
@ -46,7 +69,6 @@ class BaseTestCase:
|
|||
"password": password,
|
||||
"contact_email": f"{id}@notmyidea.org",
|
||||
"default_currency": default_currency,
|
||||
"project_history": project_history,
|
||||
},
|
||||
follow_redirects=follow_redirects,
|
||||
)
|
||||
|
@ -57,7 +79,7 @@ class BaseTestCase:
|
|||
data=data,
|
||||
# follow_redirects=True,
|
||||
)
|
||||
assert ("/{id}/edit" in str(resp.response)) == (not success)
|
||||
self.assertEqual("/{id}/edit" in str(resp.response), not success)
|
||||
|
||||
def create_project(self, id, default_currency="XXX", name=None, password=None):
|
||||
name = name or str(id)
|
||||
|
@ -83,9 +105,11 @@ class IhatemoneyTestCase(BaseTestCase):
|
|||
def assertStatus(self, expected, resp, url=None):
|
||||
if url is None:
|
||||
url = resp.request.path
|
||||
assert (
|
||||
expected == resp.status_code
|
||||
), f"{url} expected {expected}, got {resp.status_code}"
|
||||
return self.assertEqual(
|
||||
expected,
|
||||
resp.status_code,
|
||||
f"{url} expected {expected}, got {resp.status_code}",
|
||||
)
|
||||
|
||||
def enable_admin(self, password="adminpass"):
|
||||
self.app.config["ACTIVATE_ADMIN_DASHBOARD"] = True
|
||||
|
|
|
@ -1,64 +0,0 @@
|
|||
from unittest.mock import MagicMock
|
||||
|
||||
from flask import Flask
|
||||
from jinja2 import FileSystemBytecodeCache
|
||||
import pytest
|
||||
|
||||
from ihatemoney.babel_utils import compile_catalogs
|
||||
from ihatemoney.currency_convertor import CurrencyConverter
|
||||
from ihatemoney.run import create_app, db
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True, scope="session")
|
||||
def babel_catalogs():
|
||||
compile_catalogs()
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def jinja_cache_directory(tmp_path_factory):
|
||||
return tmp_path_factory.mktemp("cache")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def app(request: pytest.FixtureRequest, jinja_cache_directory):
|
||||
"""Create the Flask app with database"""
|
||||
app = create_app(request.cls)
|
||||
|
||||
# Caches the jinja templates so they are compiled only once per test session
|
||||
app.jinja_env.bytecode_cache = FileSystemBytecodeCache(jinja_cache_directory)
|
||||
|
||||
with app.app_context():
|
||||
db.create_all()
|
||||
request.cls.app = app
|
||||
|
||||
yield app
|
||||
|
||||
# clean after testing
|
||||
db.session.remove()
|
||||
db.drop_all()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def client(app: Flask, request: pytest.FixtureRequest):
|
||||
client = app.test_client()
|
||||
request.cls.client = client
|
||||
|
||||
yield client
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def converter(request: pytest.FixtureRequest):
|
||||
# Add dummy data to CurrencyConverter for all tests (since it's a singleton)
|
||||
mock_data = {
|
||||
"USD": 1,
|
||||
"EUR": 0.8,
|
||||
"CAD": 1.2,
|
||||
"PLN": 4,
|
||||
CurrencyConverter.no_currency: 1,
|
||||
}
|
||||
converter = CurrencyConverter()
|
||||
converter.get_rates = MagicMock(return_value=mock_data)
|
||||
# Also add it to an attribute to make tests clearer
|
||||
request.cls.converter = converter
|
||||
|
||||
yield converter
|
|
@ -1,6 +1,4 @@
|
|||
import re
|
||||
|
||||
import pytest
|
||||
import unittest
|
||||
|
||||
from ihatemoney import history, models
|
||||
from ihatemoney.tests.common.help_functions import em_surround
|
||||
|
@ -8,40 +6,24 @@ from ihatemoney.tests.common.ihatemoney_testcase import IhatemoneyTestCase
|
|||
from ihatemoney.versioning import LoggingMode
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def demo(client):
|
||||
client.post(
|
||||
"/create",
|
||||
data={
|
||||
"name": "demo",
|
||||
"id": "demo",
|
||||
"password": "demo",
|
||||
"contact_email": "demo@notmyidea.org",
|
||||
"default_currency": "XXX",
|
||||
"project_history": True,
|
||||
},
|
||||
)
|
||||
client.post(
|
||||
"/authenticate",
|
||||
data=dict(id="demo", password="demo"),
|
||||
)
|
||||
class HistoryTestCase(IhatemoneyTestCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.post_project("demo")
|
||||
self.login("demo")
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("demo")
|
||||
class TestHistory(IhatemoneyTestCase):
|
||||
def test_simple_create_logentry_no_ip(self):
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert f"Project {em_surround('demo')} added" in resp.data.decode("utf-8")
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 1
|
||||
assert "127.0.0.1" not in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(f"Project {em_surround('demo')} added", resp.data.decode("utf-8"))
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 1)
|
||||
self.assertNotIn("127.0.0.1", resp.data.decode("utf-8"))
|
||||
|
||||
def change_privacy_to(self, current_password, logging_preference):
|
||||
def change_privacy_to(self, logging_preference):
|
||||
# Change only logging_preferences
|
||||
new_data = {
|
||||
"name": "demo",
|
||||
"contact_email": "demo@notmyidea.org",
|
||||
"current_password": current_password,
|
||||
"password": "demo",
|
||||
"default_currency": "XXX",
|
||||
}
|
||||
|
@ -53,136 +35,142 @@ class TestHistory(IhatemoneyTestCase):
|
|||
|
||||
# Disable History
|
||||
resp = self.client.post("/demo/edit", data=new_data, follow_redirects=True)
|
||||
assert resp.status_code == 200
|
||||
assert "alert-danger" not in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertNotIn("alert-danger", resp.data.decode("utf-8"))
|
||||
|
||||
resp = self.client.get("/demo/edit")
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
if logging_preference == LoggingMode.DISABLED:
|
||||
assert '<input id="project_history"' in resp.data.decode("utf-8")
|
||||
self.assertIn('<input id="project_history"', resp.data.decode("utf-8"))
|
||||
else:
|
||||
assert '<input checked id="project_history"' in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
'<input checked id="project_history"', resp.data.decode("utf-8")
|
||||
)
|
||||
|
||||
if logging_preference == LoggingMode.RECORD_IP:
|
||||
assert '<input checked id="ip_recording"' in resp.data.decode("utf-8")
|
||||
self.assertIn('<input checked id="ip_recording"', resp.data.decode("utf-8"))
|
||||
else:
|
||||
assert '<input id="ip_recording"' in resp.data.decode("utf-8")
|
||||
self.assertIn('<input id="ip_recording"', resp.data.decode("utf-8"))
|
||||
|
||||
def assert_empty_history_logging_disabled(self):
|
||||
resp = self.client.get("/demo/history")
|
||||
assert (
|
||||
"This project has history disabled. New actions won't appear below."
|
||||
in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
"This project has history disabled. New actions won't appear below. ",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert "Nothing to list" in resp.data.decode("utf-8")
|
||||
assert (
|
||||
"The table below reflects actions recorded prior to disabling project history."
|
||||
not in resp.data.decode("utf-8")
|
||||
self.assertIn("Nothing to list", resp.data.decode("utf-8"))
|
||||
self.assertNotIn(
|
||||
"The table below reflects actions recorded prior to disabling project history.",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert "Some entries below contain IP addresses," not in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertNotIn(
|
||||
"Some entries below contain IP addresses,", resp.data.decode("utf-8")
|
||||
)
|
||||
self.assertNotIn("127.0.0.1", resp.data.decode("utf-8"))
|
||||
self.assertNotIn("<td> -- </td>", resp.data.decode("utf-8"))
|
||||
self.assertNotIn(
|
||||
f"Project {em_surround('demo')} added", resp.data.decode("utf-8")
|
||||
)
|
||||
assert "127.0.0.1" not in resp.data.decode("utf-8")
|
||||
assert "<td> -- </td>" not in resp.data.decode("utf-8")
|
||||
assert f"Project {em_surround('demo')} added" not in resp.data.decode("utf-8")
|
||||
|
||||
def test_project_edit(self):
|
||||
new_data = {
|
||||
"name": "demo2",
|
||||
"contact_email": "demo2@notmyidea.org",
|
||||
"current_password": "demo",
|
||||
"password": "123456",
|
||||
"project_history": "y",
|
||||
"default_currency": "USD", # Currency changed from default
|
||||
}
|
||||
|
||||
resp = self.client.post("/demo/edit", data=new_data, follow_redirects=True)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert f"Project {em_surround('demo')} added" in resp.data.decode("utf-8")
|
||||
assert (
|
||||
f"Project contact email changed to {em_surround('demo2@notmyidea.org')}"
|
||||
in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(f"Project {em_surround('demo')} added", resp.data.decode("utf-8"))
|
||||
self.assertIn(
|
||||
f"Project contact email changed to {em_surround('demo2@notmyidea.org')}",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert "Project private code changed" in resp.data.decode("utf-8")
|
||||
assert f"Project renamed to {em_surround('demo2')}" in resp.data.decode("utf-8")
|
||||
assert resp.data.decode("utf-8").index("Project renamed ") < resp.data.decode(
|
||||
"utf-8"
|
||||
).index("Project contact email changed to ")
|
||||
assert resp.data.decode("utf-8").index("Project renamed ") < resp.data.decode(
|
||||
"utf-8"
|
||||
).index("Project private code changed")
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 5
|
||||
assert "127.0.0.1" not in resp.data.decode("utf-8")
|
||||
self.assertIn("Project private code changed", resp.data.decode("utf-8"))
|
||||
self.assertIn(
|
||||
f"Project renamed to {em_surround('demo2')}", resp.data.decode("utf-8")
|
||||
)
|
||||
self.assertLess(
|
||||
resp.data.decode("utf-8").index("Project renamed "),
|
||||
resp.data.decode("utf-8").index("Project contact email changed to "),
|
||||
)
|
||||
self.assertLess(
|
||||
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>"), 5)
|
||||
self.assertNotIn("127.0.0.1", resp.data.decode("utf-8"))
|
||||
|
||||
def test_project_privacy_edit(self):
|
||||
resp = self.client.get("/demo/edit")
|
||||
assert resp.status_code == 200
|
||||
assert (
|
||||
'<input checked id="project_history" name="project_history" type="checkbox" value="y">'
|
||||
in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(
|
||||
'<input checked id="project_history" name="project_history" type="checkbox" value="y">',
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
|
||||
self.change_privacy_to("demo", LoggingMode.DISABLED)
|
||||
self.change_privacy_to(LoggingMode.DISABLED)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert "Disabled Project History\n" in resp.data.decode("utf-8")
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 2
|
||||
assert "127.0.0.1" not in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn("Disabled Project History\n", resp.data.decode("utf-8"))
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 2)
|
||||
self.assertNotIn("127.0.0.1", resp.data.decode("utf-8"))
|
||||
|
||||
self.change_privacy_to("demo", LoggingMode.RECORD_IP)
|
||||
self.change_privacy_to(LoggingMode.RECORD_IP)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert "Enabled Project History & IP Address Recording" in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(
|
||||
"Enabled Project History & IP Address Recording", resp.data.decode("utf-8")
|
||||
)
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 2
|
||||
assert resp.data.decode("utf-8").count("127.0.0.1") == 1
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 2)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 1)
|
||||
|
||||
self.change_privacy_to("demo", LoggingMode.ENABLED)
|
||||
self.change_privacy_to(LoggingMode.ENABLED)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert "Disabled IP Address Recording\n" in resp.data.decode("utf-8")
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 2
|
||||
assert resp.data.decode("utf-8").count("127.0.0.1") == 2
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn("Disabled IP Address Recording\n", resp.data.decode("utf-8"))
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 2)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 2)
|
||||
|
||||
def test_project_privacy_edit2(self):
|
||||
self.change_privacy_to("demo", LoggingMode.RECORD_IP)
|
||||
self.change_privacy_to(LoggingMode.RECORD_IP)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert "Enabled IP Address Recording\n" in resp.data.decode("utf-8")
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 1
|
||||
assert resp.data.decode("utf-8").count("127.0.0.1") == 1
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn("Enabled IP Address Recording\n", resp.data.decode("utf-8"))
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 1)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 1)
|
||||
|
||||
self.change_privacy_to("demo", LoggingMode.DISABLED)
|
||||
self.change_privacy_to(LoggingMode.DISABLED)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert "Disabled Project History & IP Address Recording" in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(
|
||||
"Disabled Project History & IP Address Recording", resp.data.decode("utf-8")
|
||||
)
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 1
|
||||
assert resp.data.decode("utf-8").count("127.0.0.1") == 2
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 1)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 2)
|
||||
|
||||
self.change_privacy_to("demo", LoggingMode.ENABLED)
|
||||
self.change_privacy_to(LoggingMode.ENABLED)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert "Enabled Project History\n" in resp.data.decode("utf-8")
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 2
|
||||
assert resp.data.decode("utf-8").count("127.0.0.1") == 2
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn("Enabled Project History\n", resp.data.decode("utf-8"))
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 2)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 2)
|
||||
|
||||
def do_misc_database_operations(self, logging_mode):
|
||||
new_data = {
|
||||
"name": "demo2",
|
||||
"contact_email": "demo2@notmyidea.org",
|
||||
"current_password": "demo",
|
||||
"password": "123456",
|
||||
"default_currency": "USD",
|
||||
}
|
||||
|
@ -194,13 +182,13 @@ class TestHistory(IhatemoneyTestCase):
|
|||
new_data["ip_recording"] = "y"
|
||||
|
||||
resp = self.client.post("/demo/edit", data=new_data, follow_redirects=True)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# adds a member to this project
|
||||
resp = self.client.post(
|
||||
"/demo/members/add", data={"name": "zorglub"}, follow_redirects=True
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
user_id = models.Person.query.one().id
|
||||
|
||||
|
@ -212,12 +200,11 @@ class TestHistory(IhatemoneyTestCase):
|
|||
"what": "fromage à raclette",
|
||||
"payer": user_id,
|
||||
"payed_for": [user_id],
|
||||
"bill_type": "Expense",
|
||||
"amount": "25",
|
||||
},
|
||||
follow_redirects=True,
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
bill_id = models.Bill.query.one().id
|
||||
|
||||
|
@ -229,46 +216,48 @@ class TestHistory(IhatemoneyTestCase):
|
|||
"what": "fromage à raclette",
|
||||
"payer": user_id,
|
||||
"payed_for": [user_id],
|
||||
"bill_type": "Expense",
|
||||
"amount": "10",
|
||||
},
|
||||
follow_redirects=True,
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
# delete the bill
|
||||
resp = self.client.post(f"/demo/delete/{bill_id}", follow_redirects=True)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
# delete user using POST method
|
||||
resp = self.client.post(
|
||||
f"/demo/members/{user_id}/delete", follow_redirects=True
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
def test_disable_clear_no_new_records(self):
|
||||
# Disable logging
|
||||
self.change_privacy_to("demo", LoggingMode.DISABLED)
|
||||
self.change_privacy_to(LoggingMode.DISABLED)
|
||||
|
||||
# Ensure we can't clear history with a GET or with a password-less POST
|
||||
resp = self.client.get("/demo/erase_history")
|
||||
assert resp.status_code == 405
|
||||
self.assertEqual(resp.status_code, 405)
|
||||
resp = self.client.post("/demo/erase_history", follow_redirects=True)
|
||||
assert "Error deleting project history" in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
"Error deleting project history",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
|
||||
# List history
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert (
|
||||
"This project has history disabled. New actions won't appear below."
|
||||
in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(
|
||||
"This project has history disabled. New actions won't appear below. ",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert (
|
||||
"The table below reflects actions recorded prior to disabling project history."
|
||||
in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
"The table below reflects actions recorded prior to disabling project history.",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert "Nothing to list" not in resp.data.decode("utf-8")
|
||||
assert "Some entries below contain IP addresses," not in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertNotIn("Nothing to list", resp.data.decode("utf-8"))
|
||||
self.assertNotIn(
|
||||
"Some entries below contain IP addresses,", resp.data.decode("utf-8")
|
||||
)
|
||||
|
||||
# Clear Existing Entries
|
||||
|
@ -277,7 +266,7 @@ class TestHistory(IhatemoneyTestCase):
|
|||
data={"password": "demo"},
|
||||
follow_redirects=True,
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assert_empty_history_logging_disabled()
|
||||
|
||||
# Do lots of database operations & check that there's still no history
|
||||
|
@ -287,47 +276,52 @@ class TestHistory(IhatemoneyTestCase):
|
|||
|
||||
def test_clear_ip_records(self):
|
||||
# Enable IP Recording
|
||||
self.change_privacy_to("demo", LoggingMode.RECORD_IP)
|
||||
self.change_privacy_to(LoggingMode.RECORD_IP)
|
||||
|
||||
# Do lots of database operations to generate IP address entries
|
||||
self.do_misc_database_operations(LoggingMode.RECORD_IP)
|
||||
|
||||
# Disable IP Recording
|
||||
self.change_privacy_to("123456", LoggingMode.ENABLED)
|
||||
self.change_privacy_to(LoggingMode.ENABLED)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert (
|
||||
"This project has history disabled. New actions won't appear below."
|
||||
not in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertNotIn(
|
||||
"This project has history disabled. New actions won't appear below. ",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert (
|
||||
"The table below reflects actions recorded prior to disabling project history."
|
||||
not in resp.data.decode("utf-8")
|
||||
self.assertNotIn(
|
||||
"The table below reflects actions recorded prior to disabling project history.",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert "Nothing to list" not in resp.data.decode("utf-8")
|
||||
assert "Some entries below contain IP addresses," in resp.data.decode("utf-8")
|
||||
assert resp.data.decode("utf-8").count("127.0.0.1") == 12
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 1
|
||||
self.assertNotIn("Nothing to list", resp.data.decode("utf-8"))
|
||||
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"), 12)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 1)
|
||||
|
||||
# Generate more operations to confirm additional IP info isn't recorded
|
||||
self.do_misc_database_operations(LoggingMode.ENABLED)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert resp.data.decode("utf-8").count("127.0.0.1") == 12
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 7
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 12)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 7)
|
||||
|
||||
# Ensure we can't clear IP data with a GET or with a password-less POST
|
||||
resp = self.client.get("/demo/strip_ip_addresses")
|
||||
assert resp.status_code == 405
|
||||
self.assertEqual(resp.status_code, 405)
|
||||
resp = self.client.post("/demo/strip_ip_addresses", follow_redirects=True)
|
||||
assert "Error deleting recorded IP addresses" in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
"Error deleting recorded IP addresses",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert resp.data.decode("utf-8").count("127.0.0.1") == 12
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 7
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
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(
|
||||
|
@ -336,33 +330,33 @@ class TestHistory(IhatemoneyTestCase):
|
|||
follow_redirects=True,
|
||||
)
|
||||
|
||||
assert resp.status_code == 200
|
||||
assert (
|
||||
"This project has history disabled. New actions won't appear below."
|
||||
not in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertNotIn(
|
||||
"This project has history disabled. New actions won't appear below. ",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert (
|
||||
"The table below reflects actions recorded prior to disabling project history."
|
||||
not in resp.data.decode("utf-8")
|
||||
self.assertNotIn(
|
||||
"The table below reflects actions recorded prior to disabling project history.",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert "Nothing to list" not in resp.data.decode("utf-8")
|
||||
assert "Some entries below contain IP addresses," not in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertNotIn("Nothing to list", resp.data.decode("utf-8"))
|
||||
self.assertNotIn(
|
||||
"Some entries below contain IP addresses,", resp.data.decode("utf-8")
|
||||
)
|
||||
assert resp.data.decode("utf-8").count("127.0.0.1") == 0
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 19
|
||||
self.assertEqual(resp.data.decode("utf-8").count("127.0.0.1"), 0)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 19)
|
||||
|
||||
def test_logs_for_common_actions(self):
|
||||
# adds a member to this project
|
||||
resp = self.client.post(
|
||||
"/demo/members/add", data={"name": "zorglub"}, follow_redirects=True
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert f"Participant {em_surround('zorglub')} added" in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(
|
||||
f"Participant {em_surround('zorglub')} added", resp.data.decode("utf-8")
|
||||
)
|
||||
|
||||
# create a bill
|
||||
|
@ -373,17 +367,17 @@ class TestHistory(IhatemoneyTestCase):
|
|||
"what": "fromage à raclette",
|
||||
"payer": 1,
|
||||
"payed_for": [1],
|
||||
"bill_type": "Expense",
|
||||
"amount": "25",
|
||||
},
|
||||
follow_redirects=True,
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert f"Bill {em_surround('fromage à raclette')} added" in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(
|
||||
f"Bill {em_surround('fromage à raclette')} added",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
|
||||
# edit the bill
|
||||
|
@ -394,42 +388,48 @@ class TestHistory(IhatemoneyTestCase):
|
|||
"what": "new thing",
|
||||
"payer": 1,
|
||||
"payed_for": [1],
|
||||
"bill_type": "Expense",
|
||||
"amount": "10",
|
||||
},
|
||||
follow_redirects=True,
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert f"Bill {em_surround('fromage à raclette')} added" in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(
|
||||
f"Bill {em_surround('fromage à raclette')} added",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert re.search(
|
||||
self.assertRegex(
|
||||
resp.data.decode("utf-8"),
|
||||
r"Bill %s:\s* Amount changed\s* from %s\s* to %s"
|
||||
% (
|
||||
em_surround("fromage à raclette", regex_escape=True),
|
||||
em_surround("25.0", regex_escape=True),
|
||||
em_surround("10.0", regex_escape=True),
|
||||
),
|
||||
)
|
||||
self.assertIn(
|
||||
"Bill %s renamed to %s"
|
||||
% (em_surround("fromage à raclette"), em_surround("new thing")),
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert "Bill %s renamed to %s" % (
|
||||
em_surround("fromage à raclette"),
|
||||
em_surround("new thing"),
|
||||
) in resp.data.decode("utf-8")
|
||||
assert resp.data.decode("utf-8").index(
|
||||
self.assertLess(
|
||||
resp.data.decode("utf-8").index(
|
||||
f"Bill {em_surround('fromage à raclette')} renamed to"
|
||||
) < resp.data.decode("utf-8").index("Amount changed")
|
||||
),
|
||||
resp.data.decode("utf-8").index("Amount changed"),
|
||||
)
|
||||
|
||||
# delete the bill
|
||||
resp = self.client.post("/demo/delete/1", follow_redirects=True)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert f"Bill {em_surround('new thing')} removed" in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(
|
||||
f"Bill {em_surround('new thing')} removed", resp.data.decode("utf-8")
|
||||
)
|
||||
|
||||
# edit user
|
||||
resp = self.client.post(
|
||||
|
@ -437,35 +437,39 @@ class TestHistory(IhatemoneyTestCase):
|
|||
data={"weight": 2, "name": "new name"},
|
||||
follow_redirects=True,
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert re.search(
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertRegex(
|
||||
resp.data.decode("utf-8"),
|
||||
r"Participant %s:\s* weight changed\s* from %s\s* to %s"
|
||||
% (
|
||||
em_surround("zorglub", regex_escape=True),
|
||||
em_surround("1.0", regex_escape=True),
|
||||
em_surround("2.0", regex_escape=True),
|
||||
),
|
||||
)
|
||||
self.assertIn(
|
||||
"Participant %s renamed to %s"
|
||||
% (em_surround("zorglub"), em_surround("new name")),
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
assert "Participant %s renamed to %s" % (
|
||||
em_surround("zorglub"),
|
||||
em_surround("new name"),
|
||||
) in resp.data.decode("utf-8")
|
||||
assert resp.data.decode("utf-8").index(
|
||||
self.assertLess(
|
||||
resp.data.decode("utf-8").index(
|
||||
f"Participant {em_surround('zorglub')} renamed"
|
||||
) < resp.data.decode("utf-8").index("weight changed")
|
||||
),
|
||||
resp.data.decode("utf-8").index("weight changed"),
|
||||
)
|
||||
|
||||
# delete user using POST method
|
||||
resp = self.client.post("/demo/members/1/delete", follow_redirects=True)
|
||||
assert resp.status_code == 200
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert f"Participant {em_surround('new name')} removed" in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn(
|
||||
f"Participant {em_surround('new name')} removed", resp.data.decode("utf-8")
|
||||
)
|
||||
|
||||
def test_double_bill_double_person_edit_second(self):
|
||||
|
@ -481,7 +485,6 @@ class TestHistory(IhatemoneyTestCase):
|
|||
"what": "Bill 1",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2],
|
||||
"bill_type": "Expense",
|
||||
"amount": "25",
|
||||
},
|
||||
)
|
||||
|
@ -492,16 +495,15 @@ class TestHistory(IhatemoneyTestCase):
|
|||
"what": "Bill 2",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2],
|
||||
"bill_type": "Expense",
|
||||
"amount": "20",
|
||||
},
|
||||
)
|
||||
|
||||
# Should be 5 history entries at this point
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 5
|
||||
assert "127.0.0.1" not in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 5)
|
||||
self.assertNotIn("127.0.0.1", resp.data.decode("utf-8"))
|
||||
|
||||
# Edit ONLY the amount on the first bill
|
||||
self.client.post(
|
||||
|
@ -511,33 +513,33 @@ class TestHistory(IhatemoneyTestCase):
|
|||
"what": "Bill 1",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2],
|
||||
"bill_type": "Expense",
|
||||
"amount": "88",
|
||||
},
|
||||
)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert re.search(
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertRegex(
|
||||
resp.data.decode("utf-8"),
|
||||
r"Bill {}:\s* Amount changed\s* from {}\s* to {}".format(
|
||||
em_surround("Bill 1", regex_escape=True),
|
||||
em_surround("25.0", regex_escape=True),
|
||||
em_surround("88.0", regex_escape=True),
|
||||
),
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
|
||||
assert not re.search(
|
||||
self.assertNotRegex(
|
||||
resp.data.decode("utf-8"),
|
||||
r"Removed\s* {}\s* and\s* {}\s* from\s* owers list".format(
|
||||
em_surround("User 1", regex_escape=True),
|
||||
em_surround("User 2", regex_escape=True),
|
||||
),
|
||||
resp.data.decode("utf-8"),
|
||||
), resp.data.decode("utf-8")
|
||||
)
|
||||
|
||||
# Should be 6 history entries at this point
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 6
|
||||
assert "127.0.0.1" not in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 6)
|
||||
self.assertNotIn("127.0.0.1", resp.data.decode("utf-8"))
|
||||
|
||||
def test_bill_add_remove_add(self):
|
||||
# add two members
|
||||
|
@ -552,7 +554,6 @@ class TestHistory(IhatemoneyTestCase):
|
|||
"what": "Bill 1",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2],
|
||||
"bill_type": "Expense",
|
||||
"amount": "25",
|
||||
},
|
||||
)
|
||||
|
@ -561,11 +562,13 @@ class TestHistory(IhatemoneyTestCase):
|
|||
self.client.post("/demo/delete/1", follow_redirects=True)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 5
|
||||
assert "127.0.0.1" not in resp.data.decode("utf-8")
|
||||
assert f"Bill {em_surround('Bill 1')} added" in resp.data.decode("utf-8")
|
||||
assert f"Bill {em_surround('Bill 1')} removed" in resp.data.decode("utf-8")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 5)
|
||||
self.assertNotIn("127.0.0.1", resp.data.decode("utf-8"))
|
||||
self.assertIn(f"Bill {em_surround('Bill 1')} added", resp.data.decode("utf-8"))
|
||||
self.assertIn(
|
||||
f"Bill {em_surround('Bill 1')} removed", resp.data.decode("utf-8")
|
||||
)
|
||||
|
||||
# Add a new bill
|
||||
self.client.post(
|
||||
|
@ -575,21 +578,22 @@ class TestHistory(IhatemoneyTestCase):
|
|||
"what": "Bill 2",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2],
|
||||
"bill_type": "Expense",
|
||||
"amount": "20",
|
||||
},
|
||||
)
|
||||
|
||||
resp = self.client.get("/demo/history")
|
||||
assert resp.status_code == 200
|
||||
assert resp.data.decode("utf-8").count("<td> -- </td>") == 6
|
||||
assert "127.0.0.1" not in resp.data.decode("utf-8")
|
||||
assert f"Bill {em_surround('Bill 1')} added" in resp.data.decode("utf-8")
|
||||
assert (
|
||||
resp.data.decode("utf-8").count(f"Bill {em_surround('Bill 1')} added") == 1
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(resp.data.decode("utf-8").count("<td> -- </td>"), 6)
|
||||
self.assertNotIn("127.0.0.1", resp.data.decode("utf-8"))
|
||||
self.assertIn(f"Bill {em_surround('Bill 1')} added", resp.data.decode("utf-8"))
|
||||
self.assertEqual(
|
||||
resp.data.decode("utf-8").count(f"Bill {em_surround('Bill 1')} added"), 1
|
||||
)
|
||||
self.assertIn(f"Bill {em_surround('Bill 2')} added", resp.data.decode("utf-8"))
|
||||
self.assertIn(
|
||||
f"Bill {em_surround('Bill 1')} removed", resp.data.decode("utf-8")
|
||||
)
|
||||
assert f"Bill {em_surround('Bill 2')} added" in resp.data.decode("utf-8")
|
||||
assert f"Bill {em_surround('Bill 1')} removed" in resp.data.decode("utf-8")
|
||||
|
||||
def test_double_bill_double_person_edit_second_no_web(self):
|
||||
u1 = models.Person(project_id="demo", name="User 1")
|
||||
|
@ -610,7 +614,7 @@ class TestHistory(IhatemoneyTestCase):
|
|||
models.db.session.commit()
|
||||
|
||||
history_list = history.get_history(self.get_project("demo"))
|
||||
assert len(history_list) == 5
|
||||
self.assertEqual(len(history_list), 5)
|
||||
|
||||
# Change just the amount
|
||||
b1.amount = 5
|
||||
|
@ -619,8 +623,8 @@ class TestHistory(IhatemoneyTestCase):
|
|||
history_list = history.get_history(self.get_project("demo"))
|
||||
for entry in history_list:
|
||||
if "prop_changed" in entry:
|
||||
assert "owers" not in entry["prop_changed"]
|
||||
assert len(history_list) == 6
|
||||
self.assertNotIn("owers", entry["prop_changed"])
|
||||
self.assertEqual(len(history_list), 6)
|
||||
|
||||
def test_delete_history_with_project(self):
|
||||
self.post_project("raclette", password="party")
|
||||
|
@ -636,7 +640,6 @@ class TestHistory(IhatemoneyTestCase):
|
|||
"what": "fromage à raclette",
|
||||
"payer": 1,
|
||||
"payed_for": [1],
|
||||
"bill_type": "Expense",
|
||||
"amount": "10",
|
||||
"original_currency": "EUR",
|
||||
},
|
||||
|
@ -653,4 +656,8 @@ class TestHistory(IhatemoneyTestCase):
|
|||
|
||||
# History should be equal to project creation
|
||||
history_list = history.get_history(self.get_project("raclette"))
|
||||
assert len(history_list) == 1
|
||||
self.assertEqual(len(history_list), 1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -7,6 +7,3 @@ SQLACHEMY_ECHO = DEBUG
|
|||
SECRET_KEY = "supersecret"
|
||||
|
||||
MAIL_DEFAULT_SENDER = "Budget manager <admin@example.com>"
|
||||
|
||||
PASSWORD_HASH_METHOD = "pbkdf2:sha1:1"
|
||||
PASSWORD_HASH_SALT_LENGTH = 1
|
||||
|
|
|
@ -7,6 +7,3 @@ SQLACHEMY_ECHO = DEBUG
|
|||
SECRET_KEY = "lalatra"
|
||||
|
||||
MAIL_DEFAULT_SENDER = "Budget manager <admin@example.com>"
|
||||
|
||||
PASSWORD_HASH_METHOD = "pbkdf2:sha1:1"
|
||||
PASSWORD_HASH_SALT_LENGTH = 1
|
||||
|
|
|
@ -1,49 +1,12 @@
|
|||
import copy
|
||||
import json
|
||||
|
||||
import pytest
|
||||
import unittest
|
||||
|
||||
from ihatemoney.tests.common.ihatemoney_testcase import IhatemoneyTestCase
|
||||
from ihatemoney.utils import list_of_dicts2csv, list_of_dicts2json
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def import_data(request: pytest.FixtureRequest):
|
||||
data = [
|
||||
{
|
||||
"date": "2017-01-01",
|
||||
"what": "refund",
|
||||
"amount": 13.33,
|
||||
"payer_name": "tata",
|
||||
"payer_weight": 1.0,
|
||||
"bill_type": "Expense",
|
||||
"owers": ["jeanne"],
|
||||
},
|
||||
{
|
||||
"date": "2016-12-31",
|
||||
"what": "red wine",
|
||||
"bill_type": "Expense",
|
||||
"amount": 200.0,
|
||||
"payer_name": "jeanne",
|
||||
"payer_weight": 1.0,
|
||||
"owers": ["zorglub", "tata"],
|
||||
},
|
||||
{
|
||||
"date": "2016-12-31",
|
||||
"bill_type": "Expense",
|
||||
"what": "fromage a raclette",
|
||||
"amount": 10.0,
|
||||
"payer_name": "zorglub",
|
||||
"payer_weight": 2.0,
|
||||
"owers": ["zorglub", "jeanne", "tata", "pepe"],
|
||||
},
|
||||
]
|
||||
request.cls.data = data
|
||||
yield data
|
||||
|
||||
|
||||
class CommonTestCase(object):
|
||||
@pytest.mark.usefixtures("import_data")
|
||||
class Import(IhatemoneyTestCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
@ -51,29 +14,26 @@ class CommonTestCase(object):
|
|||
{
|
||||
"date": "2017-01-01",
|
||||
"what": "refund",
|
||||
"bill_type": "Expense",
|
||||
"amount": 13.33,
|
||||
"payer_name": "tata",
|
||||
"payer_weight": 1.0,
|
||||
"owers": ["jeanne"],
|
||||
"owers": ["fred"],
|
||||
},
|
||||
{
|
||||
"date": "2016-12-31",
|
||||
"what": "red wine",
|
||||
"bill_type": "Expense",
|
||||
"amount": 200.0,
|
||||
"payer_name": "jeanne",
|
||||
"payer_name": "fred",
|
||||
"payer_weight": 1.0,
|
||||
"owers": ["zorglub", "tata"],
|
||||
},
|
||||
{
|
||||
"date": "2016-12-31",
|
||||
"what": "a raclette",
|
||||
"bill_type": "Expense",
|
||||
"what": "fromage a raclette",
|
||||
"amount": 10.0,
|
||||
"payer_name": "zorglub",
|
||||
"payer_weight": 2.0,
|
||||
"owers": ["zorglub", "jeanne", "tata", "pepe"],
|
||||
"owers": ["zorglub", "fred", "tata", "pepe"],
|
||||
},
|
||||
]
|
||||
|
||||
|
@ -95,7 +55,7 @@ class CommonTestCase(object):
|
|||
bills = project.get_pretty_bills()
|
||||
|
||||
# Check if all bills have been added
|
||||
assert len(bills) == len(self.data)
|
||||
self.assertEqual(len(bills), len(self.data))
|
||||
|
||||
# Check if name of bills are ok
|
||||
b = [e["what"] for e in bills]
|
||||
|
@ -103,23 +63,22 @@ class CommonTestCase(object):
|
|||
ref = [e["what"] for e in self.data]
|
||||
ref.sort()
|
||||
|
||||
assert b == ref
|
||||
self.assertEqual(b, ref)
|
||||
|
||||
# Check if other informations in bill are ok
|
||||
for d in self.data:
|
||||
for b in bills:
|
||||
if b["what"] == d["what"]:
|
||||
assert b["payer_name"] == d["payer_name"]
|
||||
assert b["amount"] == d["amount"]
|
||||
assert b["currency"] == d["currency"]
|
||||
assert b["payer_weight"] == d["payer_weight"]
|
||||
assert b["date"] == d["date"]
|
||||
assert b["bill_type"] == d["bill_type"]
|
||||
self.assertEqual(b["payer_name"], d["payer_name"])
|
||||
self.assertEqual(b["amount"], d["amount"])
|
||||
self.assertEqual(b["currency"], d["currency"])
|
||||
self.assertEqual(b["payer_weight"], d["payer_weight"])
|
||||
self.assertEqual(b["date"], d["date"])
|
||||
list_project = [ower for ower in b["owers"]]
|
||||
list_project.sort()
|
||||
list_json = [ower for ower in d["owers"]]
|
||||
list_json.sort()
|
||||
assert list_project == list_json
|
||||
self.assertEqual(list_project, list_json)
|
||||
|
||||
def test_import_single_currency_in_empty_project_without_currency(self):
|
||||
# Import JSON with a single currency in an empty project with no
|
||||
|
@ -137,7 +96,7 @@ class CommonTestCase(object):
|
|||
bills = project.get_pretty_bills()
|
||||
|
||||
# Check if all bills have been added
|
||||
assert len(bills) == len(self.data)
|
||||
self.assertEqual(len(bills), len(self.data))
|
||||
|
||||
# Check if name of bills are ok
|
||||
b = [e["what"] for e in bills]
|
||||
|
@ -145,24 +104,23 @@ class CommonTestCase(object):
|
|||
ref = [e["what"] for e in self.data]
|
||||
ref.sort()
|
||||
|
||||
assert b == ref
|
||||
self.assertEqual(b, ref)
|
||||
|
||||
# Check if other informations in bill are ok
|
||||
for d in self.data:
|
||||
for b in bills:
|
||||
if b["what"] == d["what"]:
|
||||
assert b["payer_name"] == d["payer_name"]
|
||||
assert b["amount"] == d["amount"]
|
||||
self.assertEqual(b["payer_name"], d["payer_name"])
|
||||
self.assertEqual(b["amount"], d["amount"])
|
||||
# Currency should have been stripped
|
||||
assert b["currency"] == "XXX"
|
||||
assert b["payer_weight"] == d["payer_weight"]
|
||||
assert b["date"] == d["date"]
|
||||
assert b["bill_type"] == d["bill_type"]
|
||||
self.assertEqual(b["currency"], "XXX")
|
||||
self.assertEqual(b["payer_weight"], d["payer_weight"])
|
||||
self.assertEqual(b["date"], d["date"])
|
||||
list_project = [ower for ower in b["owers"]]
|
||||
list_project.sort()
|
||||
list_json = [ower for ower in d["owers"]]
|
||||
list_json.sort()
|
||||
assert list_project == list_json
|
||||
self.assertEqual(list_project, list_json)
|
||||
|
||||
def test_import_multiple_currencies_in_empty_project_without_currency(self):
|
||||
# Import JSON with multiple currencies in an empty project with no
|
||||
|
@ -180,7 +138,7 @@ class CommonTestCase(object):
|
|||
bills = project.get_pretty_bills()
|
||||
|
||||
# Check that there are no bills
|
||||
assert len(bills) == 0
|
||||
self.assertEqual(len(bills), 0)
|
||||
|
||||
def test_import_no_currency_in_empty_project_with_currency(self):
|
||||
# Import JSON without currencies (from ihatemoney < 5) in an empty
|
||||
|
@ -196,7 +154,7 @@ class CommonTestCase(object):
|
|||
bills = project.get_pretty_bills()
|
||||
|
||||
# Check if all bills have been added
|
||||
assert len(bills) == len(self.data)
|
||||
self.assertEqual(len(bills), len(self.data))
|
||||
|
||||
# Check if name of bills are ok
|
||||
b = [e["what"] for e in bills]
|
||||
|
@ -204,24 +162,23 @@ class CommonTestCase(object):
|
|||
ref = [e["what"] for e in self.data]
|
||||
ref.sort()
|
||||
|
||||
assert b == ref
|
||||
self.assertEqual(b, ref)
|
||||
|
||||
# Check if other informations in bill are ok
|
||||
for d in self.data:
|
||||
for b in bills:
|
||||
if b["what"] == d["what"]:
|
||||
assert b["payer_name"] == d["payer_name"]
|
||||
assert b["amount"] == d["amount"]
|
||||
self.assertEqual(b["payer_name"], d["payer_name"])
|
||||
self.assertEqual(b["amount"], d["amount"])
|
||||
# All bills are converted to default project currency
|
||||
assert b["currency"] == "EUR"
|
||||
assert b["payer_weight"] == d["payer_weight"]
|
||||
assert b["date"] == d["date"]
|
||||
assert b["bill_type"] == d["bill_type"]
|
||||
self.assertEqual(b["currency"], "EUR")
|
||||
self.assertEqual(b["payer_weight"], d["payer_weight"])
|
||||
self.assertEqual(b["date"], d["date"])
|
||||
list_project = [ower for ower in b["owers"]]
|
||||
list_project.sort()
|
||||
list_json = [ower for ower in d["owers"]]
|
||||
list_json.sort()
|
||||
assert list_project == list_json
|
||||
self.assertEqual(list_project, list_json)
|
||||
|
||||
def test_import_no_currency_in_empty_project_without_currency(self):
|
||||
# Import JSON without currencies (from ihatemoney < 5) in an empty
|
||||
|
@ -237,7 +194,7 @@ class CommonTestCase(object):
|
|||
bills = project.get_pretty_bills()
|
||||
|
||||
# Check if all bills have been added
|
||||
assert len(bills) == len(self.data)
|
||||
self.assertEqual(len(bills), len(self.data))
|
||||
|
||||
# Check if name of bills are ok
|
||||
b = [e["what"] for e in bills]
|
||||
|
@ -245,23 +202,22 @@ class CommonTestCase(object):
|
|||
ref = [e["what"] for e in self.data]
|
||||
ref.sort()
|
||||
|
||||
assert b == ref
|
||||
self.assertEqual(b, ref)
|
||||
|
||||
# Check if other informations in bill are ok
|
||||
for d in self.data:
|
||||
for b in bills:
|
||||
if b["what"] == d["what"]:
|
||||
assert b["payer_name"] == d["payer_name"]
|
||||
assert b["amount"] == d["amount"]
|
||||
assert b["currency"] == "XXX"
|
||||
assert b["payer_weight"] == d["payer_weight"]
|
||||
assert b["date"] == d["date"]
|
||||
assert b["bill_type"] == d["bill_type"]
|
||||
self.assertEqual(b["payer_name"], d["payer_name"])
|
||||
self.assertEqual(b["amount"], d["amount"])
|
||||
self.assertEqual(b["currency"], "XXX")
|
||||
self.assertEqual(b["payer_weight"], d["payer_weight"])
|
||||
self.assertEqual(b["date"], d["date"])
|
||||
list_project = [ower for ower in b["owers"]]
|
||||
list_project.sort()
|
||||
list_json = [ower for ower in d["owers"]]
|
||||
list_json.sort()
|
||||
assert list_project == list_json
|
||||
self.assertEqual(list_project, list_json)
|
||||
|
||||
def test_import_partial_project(self):
|
||||
# Import a JSON in a project with already existing data
|
||||
|
@ -274,14 +230,13 @@ class CommonTestCase(object):
|
|||
self.client.post(
|
||||
"/raclette/members/add", data={"name": "zorglub", "weight": 2}
|
||||
)
|
||||
self.client.post("/raclette/members/add", data={"name": "jeanne"})
|
||||
self.client.post("/raclette/members/add", data={"name": "fred"})
|
||||
self.client.post("/raclette/members/add", data={"name": "tata"})
|
||||
self.client.post(
|
||||
"/raclette/add",
|
||||
data={
|
||||
"date": "2016-12-31",
|
||||
"what": "red wine",
|
||||
"bill_type": "Expense",
|
||||
"payer": 2,
|
||||
"payed_for": [1, 3],
|
||||
"amount": "200",
|
||||
|
@ -295,7 +250,7 @@ class CommonTestCase(object):
|
|||
bills = project.get_pretty_bills()
|
||||
|
||||
# Check if all bills have been added
|
||||
assert len(bills) == len(self.data)
|
||||
self.assertEqual(len(bills), len(self.data))
|
||||
|
||||
# Check if name of bills are ok
|
||||
b = [e["what"] for e in bills]
|
||||
|
@ -303,23 +258,22 @@ class CommonTestCase(object):
|
|||
ref = [e["what"] for e in self.data]
|
||||
ref.sort()
|
||||
|
||||
assert b == ref
|
||||
self.assertEqual(b, ref)
|
||||
|
||||
# Check if other informations in bill are ok
|
||||
for d in self.data:
|
||||
for b in bills:
|
||||
if b["what"] == d["what"]:
|
||||
assert b["payer_name"] == d["payer_name"]
|
||||
assert b["amount"] == d["amount"]
|
||||
assert b["currency"] == d["currency"]
|
||||
assert b["payer_weight"] == d["payer_weight"]
|
||||
assert b["date"] == d["date"]
|
||||
assert b["bill_type"] == d["bill_type"]
|
||||
self.assertEqual(b["payer_name"], d["payer_name"])
|
||||
self.assertEqual(b["amount"], d["amount"])
|
||||
self.assertEqual(b["currency"], d["currency"])
|
||||
self.assertEqual(b["payer_weight"], d["payer_weight"])
|
||||
self.assertEqual(b["date"], d["date"])
|
||||
list_project = [ower for ower in b["owers"]]
|
||||
list_project.sort()
|
||||
list_json = [ower for ower in d["owers"]]
|
||||
list_json.sort()
|
||||
assert list_project == list_json
|
||||
self.assertEqual(list_project, list_json)
|
||||
|
||||
def test_import_wrong_data(self):
|
||||
self.post_project("raclette")
|
||||
|
@ -338,10 +292,9 @@ class CommonTestCase(object):
|
|||
{
|
||||
"date": "2017-01-01",
|
||||
"what": "refund",
|
||||
"bill_type": "Reimbursement",
|
||||
"payer_name": "tata",
|
||||
"payer_weight": 1.0,
|
||||
"owers": ["jeanne"],
|
||||
"owers": ["fred"],
|
||||
}
|
||||
]
|
||||
for data in [data_wrong_keys, data_amount_missing]:
|
||||
|
@ -349,7 +302,7 @@ class CommonTestCase(object):
|
|||
self.import_project("raclette", self.generate_form_data(data), 400)
|
||||
|
||||
|
||||
class TestExport(IhatemoneyTestCase):
|
||||
class ExportTestCase(IhatemoneyTestCase):
|
||||
def test_export(self):
|
||||
# Export a simple project without currencies
|
||||
|
||||
|
@ -357,7 +310,7 @@ class TestExport(IhatemoneyTestCase):
|
|||
|
||||
# add participants
|
||||
self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2})
|
||||
self.client.post("/raclette/members/add", data={"name": "jeanne"})
|
||||
self.client.post("/raclette/members/add", data={"name": "fred"})
|
||||
self.client.post("/raclette/members/add", data={"name": "tata"})
|
||||
self.client.post("/raclette/members/add", data={"name": "pépé"})
|
||||
|
||||
|
@ -366,8 +319,7 @@ class TestExport(IhatemoneyTestCase):
|
|||
"/raclette/add",
|
||||
data={
|
||||
"date": "2016-12-31",
|
||||
"bill_type": "Expense",
|
||||
"what": "à raclette",
|
||||
"what": "fromage à raclette",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2, 3, 4],
|
||||
"amount": "10.0",
|
||||
|
@ -378,7 +330,6 @@ class TestExport(IhatemoneyTestCase):
|
|||
"/raclette/add",
|
||||
data={
|
||||
"date": "2016-12-31",
|
||||
"bill_type": "Expense",
|
||||
"what": "red wine",
|
||||
"payer": 2,
|
||||
"payed_for": [1, 3],
|
||||
|
@ -390,7 +341,6 @@ class TestExport(IhatemoneyTestCase):
|
|||
"/raclette/add",
|
||||
data={
|
||||
"date": "2017-01-01",
|
||||
"bill_type": "Reimbursement",
|
||||
"what": "refund",
|
||||
"payer": 3,
|
||||
"payed_for": [2],
|
||||
|
@ -403,49 +353,48 @@ class TestExport(IhatemoneyTestCase):
|
|||
expected = [
|
||||
{
|
||||
"date": "2017-01-01",
|
||||
"bill_type": "Reimbursement",
|
||||
"what": "refund",
|
||||
"amount": 13.33,
|
||||
"currency": "XXX",
|
||||
"payer_name": "tata",
|
||||
"payer_weight": 1.0,
|
||||
"owers": ["jeanne"],
|
||||
"owers": ["fred"],
|
||||
},
|
||||
{
|
||||
"date": "2016-12-31",
|
||||
"bill_type": "Expense",
|
||||
"what": "red wine",
|
||||
"amount": 200.0,
|
||||
"currency": "XXX",
|
||||
"payer_name": "jeanne",
|
||||
"payer_name": "fred",
|
||||
"payer_weight": 1.0,
|
||||
"owers": ["zorglub", "tata"],
|
||||
},
|
||||
{
|
||||
"date": "2016-12-31",
|
||||
"bill_type": "Expense",
|
||||
"what": "\xe0 raclette",
|
||||
"what": "fromage \xe0 raclette",
|
||||
"amount": 10.0,
|
||||
"currency": "XXX",
|
||||
"payer_name": "zorglub",
|
||||
"payer_weight": 2.0,
|
||||
"owers": ["zorglub", "jeanne", "tata", "p\xe9p\xe9"],
|
||||
"owers": ["zorglub", "fred", "tata", "p\xe9p\xe9"],
|
||||
},
|
||||
]
|
||||
assert json.loads(resp.data.decode("utf-8")) == expected
|
||||
self.assertEqual(json.loads(resp.data.decode("utf-8")), expected)
|
||||
|
||||
# generate csv export of bills
|
||||
resp = self.client.get("/raclette/export/bills.csv")
|
||||
expected = [
|
||||
"date,what,bill_type,amount,currency,payer_name,payer_weight,owers",
|
||||
"2017-01-01,refund,Reimbursement,XXX,13.33,tata,1.0,jeanne",
|
||||
'2016-12-31,red wine,Expense,XXX,200.0,jeanne,1.0,"zorglub, tata"',
|
||||
'2016-12-31,à raclette,Expense,10.0,XXX,zorglub,2.0,"zorglub, jeanne, tata, pépé"',
|
||||
"date,what,amount,currency,payer_name,payer_weight,owers",
|
||||
"2017-01-01,refund,XXX,13.33,tata,1.0,fred",
|
||||
'2016-12-31,red wine,XXX,200.0,fred,1.0,"zorglub, tata"',
|
||||
'2016-12-31,fromage à raclette,10.0,XXX,zorglub,2.0,"zorglub, fred, tata, pépé"',
|
||||
]
|
||||
received_lines = resp.data.decode("utf-8").split("\n")
|
||||
|
||||
for i, line in enumerate(expected):
|
||||
assert set(line.split(",")) == set(received_lines[i].strip("\r").split(","))
|
||||
self.assertEqual(
|
||||
set(line.split(",")), set(received_lines[i].strip("\r").split(","))
|
||||
)
|
||||
|
||||
# generate json export of transactions
|
||||
resp = self.client.get("/raclette/export/transactions.json")
|
||||
|
@ -453,45 +402,46 @@ class TestExport(IhatemoneyTestCase):
|
|||
{
|
||||
"amount": 2.00,
|
||||
"currency": "XXX",
|
||||
"receiver": "jeanne",
|
||||
"receiver": "fred",
|
||||
"ower": "p\xe9p\xe9",
|
||||
},
|
||||
{"amount": 55.34, "currency": "XXX", "receiver": "jeanne", "ower": "tata"},
|
||||
{"amount": 55.34, "currency": "XXX", "receiver": "fred", "ower": "tata"},
|
||||
{
|
||||
"amount": 127.33,
|
||||
"currency": "XXX",
|
||||
"receiver": "jeanne",
|
||||
"receiver": "fred",
|
||||
"ower": "zorglub",
|
||||
},
|
||||
]
|
||||
|
||||
assert json.loads(resp.data.decode("utf-8")) == expected
|
||||
self.assertEqual(json.loads(resp.data.decode("utf-8")), expected)
|
||||
|
||||
# generate csv export of transactions
|
||||
resp = self.client.get("/raclette/export/transactions.csv")
|
||||
|
||||
expected = [
|
||||
"amount,currency,receiver,ower",
|
||||
"2.0,XXX,jeanne,pépé",
|
||||
"55.34,XXX,jeanne,tata",
|
||||
"127.33,XXX,jeanne,zorglub",
|
||||
"2.0,XXX,fred,pépé",
|
||||
"55.34,XXX,fred,tata",
|
||||
"127.33,XXX,fred,zorglub",
|
||||
]
|
||||
received_lines = resp.data.decode("utf-8").split("\n")
|
||||
|
||||
for i, line in enumerate(expected):
|
||||
assert set(line.split(",")) == set(received_lines[i].strip("\r").split(","))
|
||||
self.assertEqual(
|
||||
set(line.split(",")), set(received_lines[i].strip("\r").split(","))
|
||||
)
|
||||
|
||||
# wrong export_format should return a 404
|
||||
resp = self.client.get("/raclette/export/transactions.wrong")
|
||||
assert resp.status_code == 404
|
||||
self.assertEqual(resp.status_code, 404)
|
||||
|
||||
@pytest.mark.skip(reason="Currency conversion is broken")
|
||||
def test_export_with_currencies(self):
|
||||
self.post_project("raclette", default_currency="EUR")
|
||||
|
||||
# add participants
|
||||
self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2})
|
||||
self.client.post("/raclette/members/add", data={"name": "jeanne"})
|
||||
self.client.post("/raclette/members/add", data={"name": "fred"})
|
||||
self.client.post("/raclette/members/add", data={"name": "tata"})
|
||||
self.client.post("/raclette/members/add", data={"name": "pépé"})
|
||||
|
||||
|
@ -500,8 +450,7 @@ class TestExport(IhatemoneyTestCase):
|
|||
"/raclette/add",
|
||||
data={
|
||||
"date": "2016-12-31",
|
||||
"what": "à raclette",
|
||||
"bill_type": "Expense",
|
||||
"what": "fromage à raclette",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2, 3, 4],
|
||||
"amount": "10.0",
|
||||
|
@ -514,7 +463,6 @@ class TestExport(IhatemoneyTestCase):
|
|||
data={
|
||||
"date": "2016-12-31",
|
||||
"what": "poutine from Québec",
|
||||
"bill_type": "Expense",
|
||||
"payer": 2,
|
||||
"payed_for": [1, 3],
|
||||
"amount": "100",
|
||||
|
@ -527,7 +475,6 @@ class TestExport(IhatemoneyTestCase):
|
|||
data={
|
||||
"date": "2017-01-01",
|
||||
"what": "refund",
|
||||
"bill_type": "Reimbursement",
|
||||
"payer": 3,
|
||||
"payed_for": [2],
|
||||
"amount": "13.33",
|
||||
|
@ -541,48 +488,47 @@ class TestExport(IhatemoneyTestCase):
|
|||
{
|
||||
"date": "2017-01-01",
|
||||
"what": "refund",
|
||||
"bill_type": "Reimbursement",
|
||||
"amount": 13.33,
|
||||
"currency": "EUR",
|
||||
"payer_name": "tata",
|
||||
"payer_weight": 1.0,
|
||||
"owers": ["jeanne"],
|
||||
"owers": ["fred"],
|
||||
},
|
||||
{
|
||||
"date": "2016-12-31",
|
||||
"what": "poutine from Qu\xe9bec",
|
||||
"bill_type": "Expense",
|
||||
"amount": 100.0,
|
||||
"currency": "CAD",
|
||||
"payer_name": "jeanne",
|
||||
"payer_name": "fred",
|
||||
"payer_weight": 1.0,
|
||||
"owers": ["zorglub", "tata"],
|
||||
},
|
||||
{
|
||||
"date": "2016-12-31",
|
||||
"what": "fromage \xe0 raclette",
|
||||
"bill_type": "Expense",
|
||||
"amount": 10.0,
|
||||
"currency": "EUR",
|
||||
"payer_name": "zorglub",
|
||||
"payer_weight": 2.0,
|
||||
"owers": ["zorglub", "jeanne", "tata", "p\xe9p\xe9"],
|
||||
"owers": ["zorglub", "fred", "tata", "p\xe9p\xe9"],
|
||||
},
|
||||
]
|
||||
assert json.loads(resp.data.decode("utf-8")) == expected
|
||||
self.assertEqual(json.loads(resp.data.decode("utf-8")), expected)
|
||||
|
||||
# generate csv export of bills
|
||||
resp = self.client.get("/raclette/export/bills.csv")
|
||||
expected = [
|
||||
"date,what,bill_type,amount,currency,payer_name,payer_weight,owers",
|
||||
"2017-01-01,refund,Reimbursement,13.33,EUR,tata,1.0,jeanne",
|
||||
'2016-12-31,poutine from Québec,Expense,100.0,CAD,jeanne,1.0,"zorglub, tata"',
|
||||
'2016-12-31,à raclette,Expense,10.0,EUR,zorglub,2.0,"zorglub, jeanne, tata, pépé"',
|
||||
"date,what,amount,currency,payer_name,payer_weight,owers",
|
||||
"2017-01-01,refund,13.33,EUR,tata,1.0,fred",
|
||||
'2016-12-31,poutine from Québec,100.0,CAD,fred,1.0,"zorglub, tata"',
|
||||
'2016-12-31,fromage à raclette,10.0,EUR,zorglub,2.0,"zorglub, fred, tata, pépé"',
|
||||
]
|
||||
received_lines = resp.data.decode("utf-8").split("\n")
|
||||
|
||||
for i, line in enumerate(expected):
|
||||
assert set(line.split(",")) == set(received_lines[i].strip("\r").split(","))
|
||||
self.assertEqual(
|
||||
set(line.split(",")), set(received_lines[i].strip("\r").split(","))
|
||||
)
|
||||
|
||||
# generate json export of transactions (in EUR!)
|
||||
resp = self.client.get("/raclette/export/transactions.json")
|
||||
|
@ -590,33 +536,30 @@ class TestExport(IhatemoneyTestCase):
|
|||
{
|
||||
"amount": 2.00,
|
||||
"currency": "EUR",
|
||||
"receiver": "jeanne",
|
||||
"receiver": "fred",
|
||||
"ower": "p\xe9p\xe9",
|
||||
},
|
||||
{"amount": 10.89, "currency": "EUR", "receiver": "jeanne", "ower": "tata"},
|
||||
{
|
||||
"amount": 38.45,
|
||||
"currency": "EUR",
|
||||
"receiver": "jeanne",
|
||||
"ower": "zorglub",
|
||||
},
|
||||
{"amount": 10.89, "currency": "EUR", "receiver": "fred", "ower": "tata"},
|
||||
{"amount": 38.45, "currency": "EUR", "receiver": "fred", "ower": "zorglub"},
|
||||
]
|
||||
|
||||
assert json.loads(resp.data.decode("utf-8")) == expected
|
||||
self.assertEqual(json.loads(resp.data.decode("utf-8")), expected)
|
||||
|
||||
# generate csv export of transactions
|
||||
resp = self.client.get("/raclette/export/transactions.csv")
|
||||
|
||||
expected = [
|
||||
"amount,currency,receiver,ower",
|
||||
"2.0,EUR,jeanne,pépé",
|
||||
"10.89,EUR,jeanne,tata",
|
||||
"38.45,EUR,jeanne,zorglub",
|
||||
"2.0,EUR,fred,pépé",
|
||||
"10.89,EUR,fred,tata",
|
||||
"38.45,EUR,fred,zorglub",
|
||||
]
|
||||
received_lines = resp.data.decode("utf-8").split("\n")
|
||||
|
||||
for i, line in enumerate(expected):
|
||||
assert set(line.split(",")) == set(received_lines[i].strip("\r").split(","))
|
||||
self.assertEqual(
|
||||
set(line.split(",")), set(received_lines[i].strip("\r").split(","))
|
||||
)
|
||||
|
||||
# Change project currency to CAD
|
||||
project = self.get_project("raclette")
|
||||
|
@ -628,33 +571,30 @@ class TestExport(IhatemoneyTestCase):
|
|||
{
|
||||
"amount": 3.00,
|
||||
"currency": "CAD",
|
||||
"receiver": "jeanne",
|
||||
"receiver": "fred",
|
||||
"ower": "p\xe9p\xe9",
|
||||
},
|
||||
{"amount": 16.34, "currency": "CAD", "receiver": "jeanne", "ower": "tata"},
|
||||
{
|
||||
"amount": 57.67,
|
||||
"currency": "CAD",
|
||||
"receiver": "jeanne",
|
||||
"ower": "zorglub",
|
||||
},
|
||||
{"amount": 16.34, "currency": "CAD", "receiver": "fred", "ower": "tata"},
|
||||
{"amount": 57.67, "currency": "CAD", "receiver": "fred", "ower": "zorglub"},
|
||||
]
|
||||
|
||||
assert json.loads(resp.data.decode("utf-8")) == expected
|
||||
self.assertEqual(json.loads(resp.data.decode("utf-8")), expected)
|
||||
|
||||
# generate csv export of transactions
|
||||
resp = self.client.get("/raclette/export/transactions.csv")
|
||||
|
||||
expected = [
|
||||
"amount,currency,receiver,ower",
|
||||
"3.0,CAD,jeanne,pépé",
|
||||
"16.34,CAD,jeanne,tata",
|
||||
"57.67,CAD,jeanne,zorglub",
|
||||
"3.0,CAD,fred,pépé",
|
||||
"16.34,CAD,fred,tata",
|
||||
"57.67,CAD,fred,zorglub",
|
||||
]
|
||||
received_lines = resp.data.decode("utf-8").split("\n")
|
||||
|
||||
for i, line in enumerate(expected):
|
||||
assert set(line.split(",")) == set(received_lines[i].strip("\r").split(","))
|
||||
self.assertEqual(
|
||||
set(line.split(",")), set(received_lines[i].strip("\r").split(","))
|
||||
)
|
||||
|
||||
def test_export_escape_formulae(self):
|
||||
self.post_project("raclette", default_currency="EUR")
|
||||
|
@ -668,7 +608,6 @@ class TestExport(IhatemoneyTestCase):
|
|||
data={
|
||||
"date": "2016-12-31",
|
||||
"what": "=COS(36)",
|
||||
"bill_type": "Expense",
|
||||
"payer": 1,
|
||||
"payed_for": [1],
|
||||
"amount": "10.0",
|
||||
|
@ -679,23 +618,29 @@ class TestExport(IhatemoneyTestCase):
|
|||
# generate csv export of bills
|
||||
resp = self.client.get("/raclette/export/bills.csv")
|
||||
expected = [
|
||||
"date,what,bill_type,amount,currency,payer_name,payer_weight,owers",
|
||||
"2016-12-31,'=COS(36),Expense,10.0,EUR,zorglub,1.0,zorglub",
|
||||
"date,what,amount,currency,payer_name,payer_weight,owers",
|
||||
"2016-12-31,'=COS(36),10.0,EUR,zorglub,1.0,zorglub",
|
||||
]
|
||||
received_lines = resp.data.decode("utf-8").split("\n")
|
||||
|
||||
for i, line in enumerate(expected):
|
||||
assert set(line.split(",")) == set(received_lines[i].strip("\r").split(","))
|
||||
self.assertEqual(
|
||||
set(line.split(",")), set(received_lines[i].strip("\r").split(","))
|
||||
)
|
||||
|
||||
|
||||
class TestImportJSON(CommonTestCase.Import):
|
||||
class ImportTestCaseJSON(CommonTestCase.Import):
|
||||
def generate_form_data(self, data):
|
||||
return {"file": (list_of_dicts2json(data), "test.json")}
|
||||
|
||||
|
||||
class TestImportCSV(CommonTestCase.Import):
|
||||
class ImportTestCaseCSV(CommonTestCase.Import):
|
||||
def generate_form_data(self, data):
|
||||
formatted_data = copy.deepcopy(data)
|
||||
for d in formatted_data:
|
||||
d["owers"] = ", ".join([o for o in d.get("owers", [])])
|
||||
return {"file": (list_of_dicts2csv(formatted_data), "test.csv")}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import os
|
||||
import smtplib
|
||||
import socket
|
||||
import unittest
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
import pytest
|
||||
from sqlalchemy import orm
|
||||
from werkzeug.security import check_password_hash
|
||||
|
||||
|
@ -19,18 +19,19 @@ os.environ.pop("IHATEMONEY_SETTINGS_FILE_PATH", None)
|
|||
__HERE__ = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
class TestConfiguration(BaseTestCase):
|
||||
class ConfigurationTestCase(BaseTestCase):
|
||||
def test_default_configuration(self):
|
||||
"""Test that default settings are loaded when no other configuration file is specified"""
|
||||
assert not self.app.config["DEBUG"]
|
||||
assert not self.app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]
|
||||
assert self.app.config["MAIL_DEFAULT_SENDER"] == (
|
||||
"Budget manager <admin@example.com>"
|
||||
self.assertFalse(self.app.config["DEBUG"])
|
||||
self.assertFalse(self.app.config["SQLALCHEMY_TRACK_MODIFICATIONS"])
|
||||
self.assertEqual(
|
||||
self.app.config["MAIL_DEFAULT_SENDER"],
|
||||
("Budget manager <admin@example.com>"),
|
||||
)
|
||||
assert self.app.config["ACTIVATE_DEMO_PROJECT"]
|
||||
assert self.app.config["ALLOW_PUBLIC_PROJECT_CREATION"]
|
||||
assert not self.app.config["ACTIVATE_ADMIN_DASHBOARD"]
|
||||
assert not self.app.config["ENABLE_CAPTCHA"]
|
||||
self.assertTrue(self.app.config["ACTIVATE_DEMO_PROJECT"])
|
||||
self.assertTrue(self.app.config["ALLOW_PUBLIC_PROJECT_CREATION"])
|
||||
self.assertFalse(self.app.config["ACTIVATE_ADMIN_DASHBOARD"])
|
||||
self.assertFalse(self.app.config["ENABLE_CAPTCHA"])
|
||||
|
||||
def test_env_var_configuration_file(self):
|
||||
"""Test that settings are loaded from a configuration file specified
|
||||
|
@ -39,7 +40,7 @@ class TestConfiguration(BaseTestCase):
|
|||
__HERE__, "ihatemoney_envvar.cfg"
|
||||
)
|
||||
load_configuration(self.app)
|
||||
assert self.app.config["SECRET_KEY"] == "lalatra"
|
||||
self.assertEqual(self.app.config["SECRET_KEY"], "lalatra")
|
||||
|
||||
# Test that the specified configuration file is loaded
|
||||
# even if the default configuration file ihatemoney.cfg exists
|
||||
|
@ -49,7 +50,7 @@ class TestConfiguration(BaseTestCase):
|
|||
)
|
||||
self.app.config.root_path = __HERE__
|
||||
load_configuration(self.app)
|
||||
assert self.app.config["SECRET_KEY"] == "lalatra"
|
||||
self.assertEqual(self.app.config["SECRET_KEY"], "lalatra")
|
||||
|
||||
os.environ.pop("IHATEMONEY_SETTINGS_FILE_PATH", None)
|
||||
|
||||
|
@ -58,10 +59,10 @@ class TestConfiguration(BaseTestCase):
|
|||
in the current directory."""
|
||||
self.app.config.root_path = __HERE__
|
||||
load_configuration(self.app)
|
||||
assert self.app.config["SECRET_KEY"] == "supersecret"
|
||||
self.assertEqual(self.app.config["SECRET_KEY"], "supersecret")
|
||||
|
||||
|
||||
class TestServer(IhatemoneyTestCase):
|
||||
class ServerTestCase(IhatemoneyTestCase):
|
||||
def test_homepage(self):
|
||||
# See https://github.com/spiral-project/ihatemoney/pull/358
|
||||
self.app.config["APPLICATION_ROOT"] = "/"
|
||||
|
@ -79,7 +80,7 @@ class TestServer(IhatemoneyTestCase):
|
|||
self.assertStatus(200, req)
|
||||
|
||||
|
||||
class TestCommand(BaseTestCase):
|
||||
class CommandTestCase(BaseTestCase):
|
||||
def test_generate_config(self):
|
||||
"""Simply checks that all config file generation
|
||||
- raise no exception
|
||||
|
@ -88,32 +89,32 @@ class TestCommand(BaseTestCase):
|
|||
runner = self.app.test_cli_runner()
|
||||
for config_file in generate_config.params[0].type.choices:
|
||||
result = runner.invoke(generate_config, config_file)
|
||||
assert len(result.output.strip()) != 0
|
||||
self.assertNotEqual(len(result.output.strip()), 0)
|
||||
|
||||
def test_generate_password_hash(self):
|
||||
runner = self.app.test_cli_runner()
|
||||
with patch("getpass.getpass", new=lambda prompt: "secret"):
|
||||
result = runner.invoke(password_hash)
|
||||
assert check_password_hash(result.output.strip(), "secret")
|
||||
self.assertTrue(check_password_hash(result.output.strip(), "secret"))
|
||||
|
||||
def test_demo_project_deletion(self):
|
||||
self.create_project("demo")
|
||||
assert self.get_project("demo").name == "demo"
|
||||
self.assertEqual(self.get_project("demo").name, "demo")
|
||||
|
||||
runner = self.app.test_cli_runner()
|
||||
runner.invoke(delete_project, "demo")
|
||||
|
||||
assert len(models.Project.query.all()) == 0
|
||||
self.assertEqual(len(models.Project.query.all()), 0)
|
||||
|
||||
|
||||
class TestModels(IhatemoneyTestCase):
|
||||
class ModelsTestCase(IhatemoneyTestCase):
|
||||
def test_weighted_bills(self):
|
||||
"""Test the SQL request that fetch all bills and weights"""
|
||||
self.post_project("raclette")
|
||||
|
||||
# add members
|
||||
self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2})
|
||||
self.client.post("/raclette/members/add", data={"name": "jeanne"})
|
||||
self.client.post("/raclette/members/add", data={"name": "fred"})
|
||||
self.client.post("/raclette/members/add", data={"name": "tata"})
|
||||
# Add a member with a balance=0 :
|
||||
self.client.post("/raclette/members/add", data={"name": "pépé"})
|
||||
|
@ -126,7 +127,6 @@ class TestModels(IhatemoneyTestCase):
|
|||
"what": "fromage à raclette",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2, 3],
|
||||
"bill_type": "Expense",
|
||||
"amount": "10.0",
|
||||
},
|
||||
)
|
||||
|
@ -138,7 +138,6 @@ class TestModels(IhatemoneyTestCase):
|
|||
"what": "red wine",
|
||||
"payer": 2,
|
||||
"payed_for": [1],
|
||||
"bill_type": "Expense",
|
||||
"amount": "20",
|
||||
},
|
||||
)
|
||||
|
@ -150,7 +149,6 @@ class TestModels(IhatemoneyTestCase):
|
|||
"what": "delicatessen",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2],
|
||||
"bill_type": "Expense",
|
||||
"amount": "10",
|
||||
},
|
||||
)
|
||||
|
@ -158,20 +156,20 @@ class TestModels(IhatemoneyTestCase):
|
|||
for weight, bill in project.get_bill_weights().all():
|
||||
if bill.what == "red wine":
|
||||
pay_each_expected = 20 / 2
|
||||
assert bill.amount / weight == pay_each_expected
|
||||
self.assertEqual(bill.amount / weight, pay_each_expected)
|
||||
if bill.what == "fromage à raclette":
|
||||
pay_each_expected = 10 / 4
|
||||
assert bill.amount / weight == pay_each_expected
|
||||
self.assertEqual(bill.amount / weight, pay_each_expected)
|
||||
if bill.what == "delicatessen":
|
||||
pay_each_expected = 10 / 3
|
||||
assert bill.amount / weight == pay_each_expected
|
||||
self.assertEqual(bill.amount / weight, pay_each_expected)
|
||||
|
||||
def test_bill_pay_each(self):
|
||||
self.post_project("raclette")
|
||||
|
||||
# add members
|
||||
self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2})
|
||||
self.client.post("/raclette/members/add", data={"name": "jeanne"})
|
||||
self.client.post("/raclette/members/add", data={"name": "fred"})
|
||||
self.client.post("/raclette/members/add", data={"name": "tata"})
|
||||
# Add a member with a balance=0 :
|
||||
self.client.post("/raclette/members/add", data={"name": "pépé"})
|
||||
|
@ -184,7 +182,6 @@ class TestModels(IhatemoneyTestCase):
|
|||
"what": "fromage à raclette",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2, 3],
|
||||
"bill_type": "Expense",
|
||||
"amount": "10.0",
|
||||
},
|
||||
)
|
||||
|
@ -196,7 +193,6 @@ class TestModels(IhatemoneyTestCase):
|
|||
"what": "red wine",
|
||||
"payer": 2,
|
||||
"payed_for": [1],
|
||||
"bill_type": "Expense",
|
||||
"amount": "20",
|
||||
},
|
||||
)
|
||||
|
@ -208,7 +204,6 @@ class TestModels(IhatemoneyTestCase):
|
|||
"what": "delicatessen",
|
||||
"payer": 1,
|
||||
"payed_for": [1, 2],
|
||||
"bill_type": "Expense",
|
||||
"amount": "10",
|
||||
},
|
||||
)
|
||||
|
@ -221,16 +216,16 @@ class TestModels(IhatemoneyTestCase):
|
|||
for bill in zorglub_bills.all():
|
||||
if bill.what == "red wine":
|
||||
pay_each_expected = 20 / 2
|
||||
assert bill.pay_each() == pay_each_expected
|
||||
self.assertEqual(bill.pay_each(), pay_each_expected)
|
||||
if bill.what == "fromage à raclette":
|
||||
pay_each_expected = 10 / 4
|
||||
assert bill.pay_each() == pay_each_expected
|
||||
self.assertEqual(bill.pay_each(), pay_each_expected)
|
||||
if bill.what == "delicatessen":
|
||||
pay_each_expected = 10 / 3
|
||||
assert bill.pay_each() == pay_each_expected
|
||||
self.assertEqual(bill.pay_each(), pay_each_expected)
|
||||
|
||||
|
||||
class TestEmailFailure(IhatemoneyTestCase):
|
||||
class EmailFailureTestCase(IhatemoneyTestCase):
|
||||
def test_creation_email_failure_smtp(self):
|
||||
self.login("raclette")
|
||||
with patch.object(
|
||||
|
@ -238,14 +233,14 @@ class TestEmailFailure(IhatemoneyTestCase):
|
|||
):
|
||||
resp = self.post_project("raclette")
|
||||
# Check that an error message is displayed
|
||||
assert (
|
||||
"We tried to send you an reminder email, but there was an error"
|
||||
in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
"We tried to send you an reminder email, but there was an error",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
# Check that we were redirected to the home page anyway
|
||||
assert (
|
||||
'<a href="/raclette/members/add">Add the first participant'
|
||||
in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
'You probably want to <a href="/raclette/members/add"',
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
|
||||
def test_creation_email_failure_socket(self):
|
||||
|
@ -253,14 +248,14 @@ class TestEmailFailure(IhatemoneyTestCase):
|
|||
with patch.object(self.app.mail, "send", MagicMock(side_effect=socket.error)):
|
||||
resp = self.post_project("raclette")
|
||||
# Check that an error message is displayed
|
||||
assert (
|
||||
"We tried to send you an reminder email, but there was an error"
|
||||
in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
"We tried to send you an reminder email, but there was an error",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
# Check that we were redirected to the home page anyway
|
||||
assert (
|
||||
'<a href="/raclette/members/add">Add the first participant'
|
||||
in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
'You probably want to <a href="/raclette/members/add"',
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
|
||||
def test_password_reset_email_failure(self):
|
||||
|
@ -271,13 +266,14 @@ class TestEmailFailure(IhatemoneyTestCase):
|
|||
"/password-reminder", data={"id": "raclette"}, follow_redirects=True
|
||||
)
|
||||
# Check that an error message is displayed
|
||||
assert "there was an error while sending you an email" in resp.data.decode(
|
||||
"utf-8"
|
||||
self.assertIn(
|
||||
"there was an error while sending you an email",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
# Check that we were not redirected to the success page
|
||||
assert (
|
||||
"A link to reset your password has been sent to you"
|
||||
not in resp.data.decode("utf-8")
|
||||
self.assertNotIn(
|
||||
"A link to reset your password has been sent to you",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
|
||||
def test_invitation_email_failure(self):
|
||||
|
@ -291,15 +287,17 @@ class TestEmailFailure(IhatemoneyTestCase):
|
|||
follow_redirects=True,
|
||||
)
|
||||
# Check that an error message is displayed
|
||||
assert (
|
||||
"there was an error while trying to send the invitation emails"
|
||||
in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
"there was an error while trying to send the invitation emails",
|
||||
resp.data.decode("utf-8"),
|
||||
)
|
||||
# Check that we are still on the same page (no redirection)
|
||||
assert "Invite people to join this project" in resp.data.decode("utf-8")
|
||||
self.assertIn(
|
||||
"Invite people to join this project", resp.data.decode("utf-8")
|
||||
)
|
||||
|
||||
|
||||
class TestCaptcha(IhatemoneyTestCase):
|
||||
class CaptchaTestCase(IhatemoneyTestCase):
|
||||
ENABLE_CAPTCHA = True
|
||||
|
||||
def test_project_creation_with_captcha_case_insensitive(self):
|
||||
|
@ -317,7 +315,7 @@ class TestCaptcha(IhatemoneyTestCase):
|
|||
"captcha": "éùüß",
|
||||
},
|
||||
)
|
||||
assert len(models.Project.query.all()) == 1
|
||||
self.assertEqual(len(models.Project.query.all()), 1)
|
||||
|
||||
def test_project_creation_with_captcha(self):
|
||||
with self.client as c:
|
||||
|
@ -331,7 +329,7 @@ class TestCaptcha(IhatemoneyTestCase):
|
|||
"default_currency": "USD",
|
||||
},
|
||||
)
|
||||
assert len(models.Project.query.all()) == 0
|
||||
self.assertEqual(len(models.Project.query.all()), 0)
|
||||
|
||||
c.post(
|
||||
"/create",
|
||||
|
@ -344,7 +342,7 @@ class TestCaptcha(IhatemoneyTestCase):
|
|||
"captcha": "nope",
|
||||
},
|
||||
)
|
||||
assert len(models.Project.query.all()) == 0
|
||||
self.assertEqual(len(models.Project.query.all()), 0)
|
||||
|
||||
c.post(
|
||||
"/create",
|
||||
|
@ -357,7 +355,7 @@ class TestCaptcha(IhatemoneyTestCase):
|
|||
"captcha": "euro",
|
||||
},
|
||||
)
|
||||
assert len(models.Project.query.all()) == 1
|
||||
self.assertEqual(len(models.Project.query.all()), 1)
|
||||
|
||||
def test_api_project_creation_does_not_need_captcha(self):
|
||||
self.client.get("/")
|
||||
|
@ -370,11 +368,11 @@ class TestCaptcha(IhatemoneyTestCase):
|
|||
"contact_email": "raclette@notmyidea.org",
|
||||
},
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
assert len(models.Project.query.all()) == 1
|
||||
self.assertTrue(resp.status, 201)
|
||||
self.assertEqual(len(models.Project.query.all()), 1)
|
||||
|
||||
|
||||
class TestCurrencyConverter:
|
||||
class TestCurrencyConverter(unittest.TestCase):
|
||||
converter = CurrencyConverter()
|
||||
mock_data = {
|
||||
"USD": 1,
|
||||
|
@ -388,23 +386,28 @@ class TestCurrencyConverter:
|
|||
def test_only_one_instance(self):
|
||||
one = id(CurrencyConverter())
|
||||
two = id(CurrencyConverter())
|
||||
assert one == two
|
||||
self.assertEqual(one, two)
|
||||
|
||||
def test_get_currencies(self):
|
||||
currencies = self.converter.get_currencies()
|
||||
for currency in ["USD", "EUR", "CAD", "PLN", CurrencyConverter.no_currency]:
|
||||
assert currency in currencies
|
||||
self.assertCountEqual(
|
||||
self.converter.get_currencies(),
|
||||
["USD", "EUR", "CAD", "PLN", CurrencyConverter.no_currency],
|
||||
)
|
||||
|
||||
def test_exchange_currency(self):
|
||||
result = self.converter.exchange_currency(100, "USD", "EUR")
|
||||
assert result == 80.0
|
||||
self.assertEqual(result, 80.0)
|
||||
|
||||
def test_failing_remote(self):
|
||||
rates = {}
|
||||
with patch("requests.Response.json", new=lambda _: {}), pytest.warns(
|
||||
with patch("requests.Response.json", new=lambda _: {}), self.assertWarns(
|
||||
UserWarning
|
||||
):
|
||||
# we need a non-patched converter, but it seems that MagickMock
|
||||
# is mocking EVERY instance of the class method. Too bad.
|
||||
rates = CurrencyConverter.get_rates(self.converter)
|
||||
assert rates == {CurrencyConverter.no_currency: 1}
|
||||
self.assertDictEqual(rates, {CurrencyConverter.no_currency: 1})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
BIN
ihatemoney/translations/bn/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/bn/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -1,23 +1,18 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"POT-Creation-Date: 2022-04-13 21:42+0200\n"
|
||||
"PO-Revision-Date: 2022-04-14 21:10+0000\n"
|
||||
"Last-Translator: Hasidul Islam <ihasidul@gmail.com>\n"
|
||||
"Language-Team: Bengali <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/bn/>\n"
|
||||
"Language: bn\n"
|
||||
"Language-Team: Bengali <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/bn/>\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"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.12-dev\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -27,13 +22,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "প্রজেক্টের নাম"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "নতুন ব্যক্তিগত কোড"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "নতুন ব্যক্তিগত কোড"
|
||||
|
||||
|
@ -55,12 +43,6 @@ msgstr "ডিফল্ট মুদ্রা"
|
|||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "অজানা ত্রুটি"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "অবৈধ ব্যক্তিগত কোড."
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
|
@ -68,7 +50,10 @@ msgstr ""
|
|||
"এই প্রজেক্টটি 'নো কারেন্সি' সেট করা যাবে না কারণ এতে একাধিক মুদ্রার বিল "
|
||||
"রয়েছে৷"
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project identifier"
|
||||
|
@ -85,8 +70,8 @@ msgid ""
|
|||
"A project with this identifier (\"%(project)s\") already exists. Please "
|
||||
"choose a new identifier"
|
||||
msgstr ""
|
||||
"এই শনাক্তকারী(\"%(project)s\")সহ একটি প্রজেক্ট ইতিমধ্যেই বিদ্যমান৷ একটি "
|
||||
"নতুন শনাক্তকারী ঠিক করুন"
|
||||
"এই শনাক্তকারী(\"%(project)s\")সহ একটি প্রজেক্ট ইতিমধ্যেই বিদ্যমান৷ একটি নতুন "
|
||||
"শনাক্তকারী ঠিক করুন"
|
||||
|
||||
msgid "Which is a real currency: Euro or Petro dollar?"
|
||||
msgstr "কোনটি আসল মুদ্রা: ইউরো না পেট্রো ডলার?"
|
||||
|
@ -100,6 +85,12 @@ msgstr "অনুগ্রহ করে, এগিয়ে যেতে ক্
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "মুছে ফেলা নিশ্চিত করতে ব্যক্তিগত কোড লিখুন"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "অজানা ত্রুটি"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "অবৈধ ব্যক্তিগত কোড."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "প্রবেশ করুন"
|
||||
|
||||
|
@ -124,16 +115,16 @@ msgstr "পাসওয়ার্ড নিশ্চিতকরণ"
|
|||
msgid "Reset password"
|
||||
msgstr "পাসওয়ার্ড রিসেট করুন"
|
||||
|
||||
msgid "When?"
|
||||
msgstr ""
|
||||
msgid "Date"
|
||||
msgstr "তারিখ"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "কি?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr ""
|
||||
msgid "Payer"
|
||||
msgstr "প্রদানকারী"
|
||||
|
||||
msgid "How much?"
|
||||
msgid "Amount paid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Currency"
|
||||
|
@ -158,6 +149,9 @@ msgstr ""
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr ""
|
||||
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
|
@ -179,25 +173,13 @@ msgstr ""
|
|||
msgid "People to notify"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgid "Send invites"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr ""
|
||||
|
@ -225,7 +207,7 @@ msgstr ""
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -238,6 +220,10 @@ msgstr ""
|
|||
msgid "This private code is not the right one"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr ""
|
||||
|
||||
|
@ -246,9 +232,14 @@ msgid ""
|
|||
"still use the project normally."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
|
||||
msgid "No token provided"
|
||||
|
@ -263,14 +254,10 @@ msgstr ""
|
|||
msgid "Password successfully reset."
|
||||
msgstr ""
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -278,18 +265,12 @@ msgid ""
|
|||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
|
@ -297,7 +278,10 @@ msgstr ""
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -340,10 +324,6 @@ msgstr ""
|
|||
msgid "The bill has been modified"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr ""
|
||||
|
||||
|
@ -404,7 +384,7 @@ msgstr ""
|
|||
msgid "edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete project"
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "show"
|
||||
|
@ -419,12 +399,20 @@ msgstr ""
|
|||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgstr "প্রজেক্ট তৈরি করুন"
|
||||
msgid "Delete project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr ""
|
||||
|
@ -450,27 +438,18 @@ msgstr ""
|
|||
msgid "Privacy Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save changes"
|
||||
msgid "Edit the project"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr ""
|
||||
|
||||
|
@ -489,6 +468,9 @@ msgstr ""
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
|
@ -553,18 +535,23 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -575,18 +562,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
|
||||
|
@ -648,15 +635,9 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "প্রদানকারী"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
msgid "Date"
|
||||
msgstr "তারিখ"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr ""
|
||||
|
@ -757,9 +738,6 @@ msgstr ""
|
|||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -769,8 +747,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
|
@ -782,7 +759,7 @@ msgstr ""
|
|||
msgid "Documentation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -804,21 +781,30 @@ msgstr ""
|
|||
msgid "Invite people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "When?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr ""
|
||||
|
||||
msgid "For what?"
|
||||
msgstr ""
|
||||
|
||||
msgid "How much?"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr ""
|
||||
|
@ -827,19 +813,19 @@ msgstr ""
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "No bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add the first participant"
|
||||
msgid "add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "add participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password reminder"
|
||||
|
@ -862,49 +848,31 @@ msgstr ""
|
|||
msgid "Invite people to join this project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgid "Share the Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "ব্যক্তিগত কোড"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
|
@ -936,118 +904,3 @@ msgstr ""
|
|||
|
||||
msgid "Period"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Import previously exported JSON file"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Too many failed login attempts, please retry later."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ 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 ""
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Sorry, there was an error while "
|
||||
#~ "trying to send the invitation emails."
|
||||
#~ " Please check the email configuration "
|
||||
#~ "of the server or contact the "
|
||||
#~ "administrator."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add a bill"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email for you."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email with the invitation "
|
||||
#~ "link."
|
||||
#~ msgstr ""
|
||||
|
||||
|
|
BIN
ihatemoney/translations/bn_BD/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/bn_BD/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2020-08-01 10:41+0000\n"
|
||||
"Last-Translator: Oymate <dhruboadittya96@gmail.com>\n"
|
||||
"Language: bn_BD\n"
|
||||
|
@ -15,10 +15,6 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -29,13 +25,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "প্রকল্পের নাম"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "ব্যক্তিগত কোড"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "ব্যক্তিগত কোড"
|
||||
|
@ -58,20 +47,16 @@ msgstr "ডিফল্ট মুদ্রা"
|
|||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "অজানা ত্রুট"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Invalid private code."
|
||||
msgstr "ব্যক্তিগত কোড"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr ""
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "পূর্বে রপ্তানি করা JSON ফাইল আমদানি করুন"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "আমদানি"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "প্রকল্প শনাক্তকারী"
|
||||
|
@ -100,6 +85,13 @@ msgstr ""
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "মুছে ফেলার জন্য ব্যক্তিগত কোড লিখুন"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "অজানা ত্রুট"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Invalid private code."
|
||||
msgstr "ব্যক্তিগত কোড"
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "ভিতরে আস"
|
||||
|
||||
|
@ -124,16 +116,16 @@ msgstr ""
|
|||
msgid "Reset password"
|
||||
msgstr ""
|
||||
|
||||
msgid "When?"
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
msgid "What?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who paid?"
|
||||
msgid "Payer"
|
||||
msgstr ""
|
||||
|
||||
msgid "How much?"
|
||||
msgid "Amount paid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Currency"
|
||||
|
@ -158,6 +150,9 @@ msgstr ""
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr ""
|
||||
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
|
@ -179,25 +174,13 @@ msgstr ""
|
|||
msgid "People to notify"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgid "Send invites"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr ""
|
||||
|
@ -225,7 +208,7 @@ msgstr ""
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -238,6 +221,10 @@ msgstr ""
|
|||
msgid "This private code is not the right one"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr ""
|
||||
|
||||
|
@ -246,9 +233,14 @@ msgid ""
|
|||
"still use the project normally."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
|
||||
msgid "No token provided"
|
||||
|
@ -263,14 +255,10 @@ msgstr ""
|
|||
msgid "Password successfully reset."
|
||||
msgstr ""
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -278,18 +266,12 @@ msgid ""
|
|||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
|
@ -297,7 +279,10 @@ msgstr ""
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -340,10 +325,6 @@ msgstr ""
|
|||
msgid "The bill has been modified"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Error deleting project history"
|
||||
msgstr "প্রকল্পের ইতিহাস সক্রিয় করো"
|
||||
|
@ -406,7 +387,7 @@ msgstr ""
|
|||
msgid "edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete project"
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "show"
|
||||
|
@ -421,12 +402,20 @@ msgstr ""
|
|||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgstr "প্রকল্প তৈরি করুন"
|
||||
msgid "Delete project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr ""
|
||||
|
@ -452,28 +441,18 @@ msgstr ""
|
|||
msgid "Privacy Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save changes"
|
||||
msgid "Edit the project"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "পূর্বে রপ্তানি করা JSON ফাইল আমদানি করুন"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr ""
|
||||
|
||||
|
@ -492,6 +471,9 @@ msgstr ""
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
|
@ -556,18 +538,23 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -578,18 +565,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
|
||||
|
@ -651,15 +638,9 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr ""
|
||||
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr ""
|
||||
|
@ -760,9 +741,6 @@ msgstr ""
|
|||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -772,8 +750,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
|
@ -785,7 +762,7 @@ msgstr ""
|
|||
msgid "Documentation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -807,21 +784,30 @@ msgstr ""
|
|||
msgid "Invite people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "When?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr ""
|
||||
|
||||
msgid "For what?"
|
||||
msgstr ""
|
||||
|
||||
msgid "How much?"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr ""
|
||||
|
@ -830,19 +816,19 @@ msgstr ""
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "No bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add the first participant"
|
||||
msgid "add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "add participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password reminder"
|
||||
|
@ -865,49 +851,31 @@ msgstr ""
|
|||
msgid "Invite people to join this project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgid "Share the Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "ব্যক্তিগত কোড"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
|
@ -1044,115 +1012,3 @@ msgstr ""
|
|||
|
||||
#~ msgid "Participants to notify"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "আমদানি"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Too many failed login attempts, please retry later."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ 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 ""
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Sorry, there was an error while "
|
||||
#~ "trying to send the invitation emails."
|
||||
#~ " Please check the email configuration "
|
||||
#~ "of the server or contact the "
|
||||
#~ "administrator."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add a bill"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email for you."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email with the invitation "
|
||||
#~ "link."
|
||||
#~ msgstr ""
|
||||
|
||||
|
|
BIN
ihatemoney/translations/ca/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/ca/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -2,40 +2,28 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2024-07-03 19:09+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <quentinantonin@free.fr>\n"
|
||||
"POT-Creation-Date: 2022-08-29 18:51+0200\n"
|
||||
"PO-Revision-Date: 2022-09-12 15:25+0000\n"
|
||||
"Last-Translator: Maite Guix <maite.guix@gmail.com>\n"
|
||||
"Language-Team: Catalan <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/ca/>\n"
|
||||
"Language: ca\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 5.7-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Acabes de crear '%(project)s' per a compartir les teves despeses"
|
||||
"X-Generator: Weblate 4.14.1-dev\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
msgstr ""
|
||||
"No és un import o expressió vàlida. Només s'accepten números i els "
|
||||
"operadors + - * /."
|
||||
"No és un import o expressió vàlida. Només s'accepten números i els operadors "
|
||||
"+ - * /."
|
||||
|
||||
msgid "Project name"
|
||||
msgstr "Nom del projecte"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "Codi privat nou"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Codi privat nou"
|
||||
|
||||
|
@ -59,21 +47,18 @@ msgstr ""
|
|||
"L'establiment d'una moneda predeterminada permet la conversió de moneda "
|
||||
"entre factures"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Error desconegut"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Codi privat no vàlid."
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
"Aquest projecte no es pot definir com a «cap moneda» perquè conté "
|
||||
"factures en diverses monedes."
|
||||
"Aquest projecte no es pot definir com a «cap moneda» perquè conté factures "
|
||||
"en diverses monedes."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr ""
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importar el fitxer JSON anteriorment exportat"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Identificador del projecte"
|
||||
|
@ -104,6 +89,12 @@ msgstr "Si us plau, valida el captcha per a continuar."
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Introdueix el codi privat per a confirmar la supressió"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Error desconegut"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Codi privat no vàlid."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Entrar-hi"
|
||||
|
||||
|
@ -128,17 +119,17 @@ msgstr "Confirmació de contrasenya"
|
|||
msgid "Reset password"
|
||||
msgstr "Restablir la contrasenya"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Quan?"
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Què?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Qui va pagar?"
|
||||
msgid "Payer"
|
||||
msgstr "Pagador"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Quant?"
|
||||
msgid "Amount paid"
|
||||
msgstr "Import pagat"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Moneda"
|
||||
|
@ -162,6 +153,9 @@ msgstr "Enviar i afegir-ne un de nou"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "Moneda predeterminada del projecte: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Les factures no poden ser nul·les"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
|
@ -183,28 +177,13 @@ msgstr "Aquest projecte ja compta amb aquest participant"
|
|||
msgid "People to notify"
|
||||
msgstr "Gent a notificar"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Enviar les invitacions"
|
||||
msgid "Send invites"
|
||||
msgstr "Enviar invitacions"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "El correu electrònic %(email)s no és vàlid"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Tancar sessió"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"Ho sentim, s'ha produït un error en intentar enviar els correus "
|
||||
"electrònics d'invitació. Comprova la configuració de correu electrònic "
|
||||
"del servidor o posa't en contacte amb l'administrador."
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} i {dual_object_1}"
|
||||
|
@ -222,7 +201,7 @@ msgid "{start_object}, {next_object}"
|
|||
msgstr "{start_object}, {next_object}"
|
||||
|
||||
msgid "No Currency"
|
||||
msgstr "Cap moneda"
|
||||
msgstr "Sense moneda"
|
||||
|
||||
#. Form error with only one error
|
||||
msgid "{prefix}: {error}"
|
||||
|
@ -232,15 +211,14 @@ msgstr "{prefix}: {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:<br />{errors}"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "Massa intents d'inici de sessió fallits, torna-ho a provar més tard."
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
msgstr ""
|
||||
"Aquesta contrasenya d'administrador no és la correcta. Només queden "
|
||||
"%(num)d intents."
|
||||
"Aquesta contrasenya d'administrador no és la correcta. Només queden %(num)d "
|
||||
"intents."
|
||||
|
||||
msgid "Provided token is invalid"
|
||||
msgstr "El testimoni proporcionat no és vàlid"
|
||||
|
@ -248,6 +226,10 @@ msgstr "El testimoni proporcionat no és vàlid"
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "Aquest codi privat no és el correcte"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Acabes de crear '%(project)s' per a compartir les teves despeses"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "T'acaben d'enviar un correu electrònic de recordatori"
|
||||
|
||||
|
@ -258,15 +240,18 @@ msgstr ""
|
|||
"Hem intentat enviar-vos un correu electrònic de recordatori, però s'ha "
|
||||
"produït un error. Encara podeu utilitzar el projecte amb normalitat."
|
||||
|
||||
#, fuzzy
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "L'identificador del projecte és %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"Ho sentim, s'ha produït un error en enviar-te un correu electrònic amb "
|
||||
"instruccions de restabliment de la contrasenya. Comprova la configuració "
|
||||
"de correu electrònic del servidor o posa't en contacte amb "
|
||||
"l'administrador."
|
||||
"instruccions de restabliment de la contrasenya. Comprova la configuració de "
|
||||
"correu electrònic del servidor o posa't en contacte amb l'administrador."
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "No s'ha proporcionat cap testimoni"
|
||||
|
@ -280,25 +265,18 @@ msgstr "Projecte desconegut"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "La contrasenya s'ha restablert correctament."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "El projecte s'ha penjat correctament"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr ""
|
||||
msgid "Invalid JSON"
|
||||
msgstr "JSON no vàlid"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
"No es poden afegir factures en diverses monedes a un projecte sense "
|
||||
"moneda predeterminada"
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "El projecte s'ha penjat correctament"
|
||||
"No es poden afegir factures en diverses monedes a un projecte sense moneda "
|
||||
"predeterminada"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "El projecte s'ha suprimit correctament"
|
||||
|
@ -306,9 +284,6 @@ msgstr "El projecte s'ha suprimit correctament"
|
|||
msgid "Error deleting project"
|
||||
msgstr "S'ha produït un error en suprimir el projecte"
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "T'han convidat a compartir les teves despeses per a %(project)s"
|
||||
|
@ -316,12 +291,14 @@ msgstr "T'han convidat a compartir les teves despeses per a %(project)s"
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "S'han enviat les teves invitacions"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Ho sentim, s'ha produït un error en intentar enviar els correus "
|
||||
"electrònics d'invitació. Comprova la configuració de correu electrònic "
|
||||
"del servidor o posa't en contacte amb l'administrador."
|
||||
"Ho sentim, s'ha produït un error en intentar enviar els correus electrònics "
|
||||
"d'invitació. Comprova la configuració de correu electrònic del servidor o "
|
||||
"posa't en contacte amb l'administrador."
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
|
@ -365,10 +342,6 @@ msgstr "La factura s'ha suprimit"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "La factura ha estat modificada"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr "S'ha produït un error en suprimir l'historial del projecte"
|
||||
|
||||
|
@ -429,8 +402,8 @@ msgstr "Accions"
|
|||
msgid "edit"
|
||||
msgstr "editar"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "Suprimir el projecte"
|
||||
msgid "delete"
|
||||
msgstr "suprimir"
|
||||
|
||||
msgid "show"
|
||||
msgstr "mostrar"
|
||||
|
@ -444,12 +417,20 @@ msgstr "Descarregar l'aplicació mòbil"
|
|||
msgid "Get it on"
|
||||
msgstr "Aconsegueix-ho"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr "N'estàs segur?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Editar el projecte"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgstr "Editar el projecte"
|
||||
msgid "Delete project"
|
||||
msgstr "Suprimir el projecte"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "Importar JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Triar fitxer"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Descarregar les dades del projecte"
|
||||
|
@ -465,8 +446,8 @@ msgstr "Plans de liquidació"
|
|||
|
||||
msgid "Download the list of transactions needed to settle the current bills."
|
||||
msgstr ""
|
||||
"Descarregar la llista transaccions necessàries per a liquidar les "
|
||||
"factures actuals."
|
||||
"Descarregar la llista transaccions necessàries per a liquidar les factures "
|
||||
"actuals."
|
||||
|
||||
msgid "Can't remember the password?"
|
||||
msgstr "No recordes la contrasenya?"
|
||||
|
@ -477,20 +458,12 @@ msgstr "Cancel·lar"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Configuració de la privacitat"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr ""
|
||||
msgid "Edit the project"
|
||||
msgstr "Editar el projecte"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
"Això eliminarà totes les factures i tots els participants en aquest "
|
||||
"projecte!"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Importar el fitxer JSON anteriorment exportat"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Triar fitxer"
|
||||
"Això eliminarà totes les factures i tots els participants en aquest projecte!"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Editar aquesta factura"
|
||||
|
@ -498,9 +471,6 @@ msgstr "Editar aquesta factura"
|
|||
msgid "Add a bill"
|
||||
msgstr "Afegir una factura"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Tothom"
|
||||
|
||||
|
@ -519,6 +489,9 @@ msgstr "Editar aquest participant"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "eloi.serra@exemple.cat, maria.canut@lloc.com"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Enviar les invitacions"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Descarregar"
|
||||
|
||||
|
@ -545,7 +518,8 @@ msgstr "S'ha canviat la configuració de l'historial"
|
|||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: %(property_name)s changed from %(before)s to %(after)s"
|
||||
msgstr "Factura %(name)s: %(property_name)s ha canviat de %(before)s a %(after)s"
|
||||
msgstr ""
|
||||
"Factura %(name)s: %(property_name)s ha canviat de %(before)s a %(after)s"
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: %(property_name)s changed to %(after)s"
|
||||
|
@ -587,23 +561,39 @@ msgstr "Factura %(name)s: afegida a la llista de propietaris %(owers_list_str)s"
|
|||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr "Factura %(name)s: eliminada de la llista de propietaris %(owers_list_str)s"
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
"Factura %(name)s: eliminada de la llista de propietaris %(owers_list_str)s"
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "L'enregistrament d'adreces IP es pot habilitar a la pàgina de configuració"
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" <i>Aquest projecte té l'historial deshabilitat. Les accions "
|
||||
"noves no apareixeran a continuació. Pots habilitar l'historial a la </i>\n"
|
||||
" <a href=\"%(url)s\">pàgina de configuració</a>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Probablement algú ha netejat l'historial del projecte."
|
||||
"\n"
|
||||
" <i>La taula següent reflecteix les accions enregistrades abans "
|
||||
"de deshabilitar l'historial de projectes. Pots \n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
"target=\"#confirm-erase\"> netejar l'historial del projecte</a> per a "
|
||||
"eliminar-les.</i></p>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
|
@ -615,18 +605,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "Suprimir les adreces IP emmagatzemades"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "No hi ha adreces IP a esborrar"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Suprimir les adreces IP emmagatzemades"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "No hi ha historial a esborrar"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Netejar l'historial del projecte"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "No hi ha adreces IP a esborrar"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Suprimir les adreces IP emmagatzemades"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Hora"
|
||||
|
||||
|
@ -634,12 +624,12 @@ msgid "Event"
|
|||
msgstr "Esdeveniment"
|
||||
|
||||
msgid "IP address recording can be enabled on the settings page"
|
||||
msgstr "L'enregistrament d'adreces IP es pot habilitar a la pàgina de configuració"
|
||||
msgstr ""
|
||||
"L'enregistrament d'adreces IP es pot habilitar a la pàgina de configuració"
|
||||
|
||||
msgid "IP address recording can be disabled on the settings page"
|
||||
msgstr ""
|
||||
"L'enregistrament d'adreces IP es pot deshabilitar a la pàgina de "
|
||||
"configuració"
|
||||
"L'enregistrament d'adreces IP es pot deshabilitar a la pàgina de configuració"
|
||||
|
||||
msgid "From IP"
|
||||
msgstr "Des d'IP"
|
||||
|
@ -665,7 +655,8 @@ msgstr "S'ha canviat el nom del projecte a %(new_project_name)s"
|
|||
|
||||
#, python-format
|
||||
msgid "Project contact email changed to %(new_email)s"
|
||||
msgstr "El correu electrònic de contacte del projecte ha canviat a %(new_email)s"
|
||||
msgstr ""
|
||||
"El correu electrònic de contacte del projecte ha canviat a %(new_email)s"
|
||||
|
||||
msgid "Project settings modified"
|
||||
msgstr "S'ha modificat la configuració del projecte"
|
||||
|
@ -688,17 +679,12 @@ msgstr "Factura %(name)s ha canviat el nom a %(new_description)s"
|
|||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr "Participant %(name)s: el pes ha canviat de %(old_weight)s a %(new_weight)s"
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Pagador"
|
||||
msgstr ""
|
||||
"Participant %(name)s: el pes ha canviat de %(old_weight)s a %(new_weight)s"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Import"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Import en %(currency)s"
|
||||
|
@ -771,8 +757,8 @@ msgid ""
|
|||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
"No reutilitzis una contrasenya personal. Tria un codi privat i envia'l "
|
||||
"als teus amics"
|
||||
"No reutilitzis una contrasenya personal. Tria un codi privat i envia'l als "
|
||||
"teus amics"
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr "Gestor de comptes"
|
||||
|
@ -801,9 +787,6 @@ msgstr "Historial"
|
|||
msgid "Settings"
|
||||
msgstr "Configuració"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Altres projectes:"
|
||||
|
||||
|
@ -813,9 +796,8 @@ msgstr "commutar a"
|
|||
msgid "Dashboard"
|
||||
msgstr "Panell"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr ""
|
||||
msgid "Logout"
|
||||
msgstr "Tancar sessió"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Codi"
|
||||
|
@ -826,7 +808,7 @@ msgstr "Aplicació mòbil"
|
|||
msgid "Documentation"
|
||||
msgstr "Documentació"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "Panell d'administració"
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -848,21 +830,30 @@ msgstr "n'estàs segur?"
|
|||
msgid "Invite people"
|
||||
msgstr "Convidar gent"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Factures més noves"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Factures més antigues"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "Hauries de començar afegint participants"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "Afegir una factura nova"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Factures més noves"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Factures més antigues"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Quan?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Qui va pagar?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "Què va pagar?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Quant?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "Afegida el %(date)s"
|
||||
|
@ -871,22 +862,20 @@ msgstr "Afegida el %(date)s"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "Tothom menys %(excluded)s"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "suprimir"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Sense factures"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "Res a enumerar encara."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr "Probablement vulguis"
|
||||
|
||||
msgid "add a bill"
|
||||
msgstr "afegir una factura"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgstr "Editar aquest participant"
|
||||
msgid "add participants"
|
||||
msgstr "afegir participants"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "Recordatori de contrasenya"
|
||||
|
@ -895,8 +884,8 @@ msgid ""
|
|||
"A link to reset your password has been sent to you, please check your "
|
||||
"emails."
|
||||
msgstr ""
|
||||
"Se t'ha enviat un enllaç per a restablir la vostra contrasenya, comprova "
|
||||
"els teus correus electrònics."
|
||||
"Se t'ha enviat un enllaç per a restablir la vostra contrasenya, comprova els "
|
||||
"teus correus electrònics."
|
||||
|
||||
msgid "Return to home page"
|
||||
msgstr "Tornar a la pàgina d'inici"
|
||||
|
@ -910,55 +899,39 @@ msgstr "Restablir la contrasenya"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "Convidar a persones a unir-se a aquest projecte"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Enviar per correu electrònic"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
"Especifica una llista (separada per comes) dels correus electrònic als "
|
||||
"que vols notificar la\n"
|
||||
" creació d'aquest projecte de gestió pressupostària i els "
|
||||
"hi enviarem un correu electrònic."
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Compartir l'identificador i el codi"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"Pots compartir l'identificador del projecte i el codi privat per qualsevol "
|
||||
"mitjà de comunicació."
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "Identificador:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "Codi privat"
|
||||
msgid "Share the Link"
|
||||
msgstr "Compartir l'enllaç"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
"Pots compartir directament l'enllaç següent a través del teu mitjà preferit"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Enviar per correu electrònic"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"Especifica una llista (separada per comes) dels correus electrònic als que "
|
||||
"vols notificar la\n"
|
||||
" creació d'aquest projecte de gestió pressupostària i els hi "
|
||||
"enviarem un correu electrònic."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Qui ha de pagar?"
|
||||
|
@ -989,96 +962,3 @@ msgstr "Despeses per mes"
|
|||
|
||||
msgid "Period"
|
||||
msgstr "Període"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Importar"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Import pagat"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Les factures no poden ser nul·les"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "L'identificador del projecte és %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "JSON no vàlid"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "N'estàs segur?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "Importar JSON"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Aquest projecte té l'historial"
|
||||
#~ " deshabilitat. Les accions noves no "
|
||||
#~ "apareixeran a continuació. Pots habilitar "
|
||||
#~ "l'historial a la </i>\n"
|
||||
#~ " <a href=\"%(url)s\">pàgina de configuració</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>La taula següent reflecteix "
|
||||
#~ "les accions enregistrades abans de "
|
||||
#~ "deshabilitar l'historial de projectes. Pots"
|
||||
#~ " \n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\"> netejar l'historial "
|
||||
#~ "del projecte</a> per a eliminar-"
|
||||
#~ "les.</i></p>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "Enviar invitacions"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "mostrar"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Editar el projecte"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "Probablement vulguis"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "afegir participants"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
#~ "Pots compartir l'identificador del projecte"
|
||||
#~ " i el codi privat per qualsevol "
|
||||
#~ "mitjà de comunicació."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "Compartir l'enllaç"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
#~ "Pots compartir directament l'enllaç següent"
|
||||
#~ " a través del teu mitjà preferit"
|
||||
|
|
BIN
ihatemoney/translations/cs/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/cs/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
ihatemoney/translations/de/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/de/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -2,9 +2,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2024-02-24 00:03+0000\n"
|
||||
"Last-Translator: Peter <peteramried@web.de>\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2021-11-29 23:53+0000\n"
|
||||
"Last-Translator: Jannik Lang <jannik.lang@posteo.de>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/de/>\n"
|
||||
"Language: de\n"
|
||||
|
@ -12,15 +12,9 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
"X-Generator: Weblate 4.10-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
"Du hast gerade das Projekt '%(project)s' erstellt, um deine Ausgaben zu "
|
||||
"teilen"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -31,12 +25,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Projektname"
|
||||
|
||||
msgid "Current private code"
|
||||
msgstr "Aktueller privater Code"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr "Geben Sie Ihren privaten Code ein, um das Projekt zu bearbeiten"
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Neuer privater Code"
|
||||
|
||||
|
@ -60,12 +48,6 @@ msgstr ""
|
|||
"Das Festlegen einer Standardwährung ermöglicht die Währungsumrechnung "
|
||||
"zwischen Rechnungen"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Unbekannter Fehler"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "ungültiger privater Code."
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
|
@ -73,8 +55,11 @@ msgstr ""
|
|||
"Dieses Projekt kann nicht auf \"ohne Währung\" eingestellt werden, weil "
|
||||
"es Rechnungen unterschiedlicher Währungen enthält."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr "Kompatibel mit Cospend"
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Zuvor exportierte JSON-Datei importieren"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importieren"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Projektkennung"
|
||||
|
@ -105,6 +90,12 @@ msgstr "Bitte bestätige das Captcha, um fortzufahren."
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Geben Sie Ihren privaten Code ein, um die Löschung zu bestätigen"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Unbekannter Fehler"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "ungültiger privater Code."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Eintreten"
|
||||
|
||||
|
@ -129,17 +120,17 @@ msgstr "Passwort bestätigen"
|
|||
msgid "Reset password"
|
||||
msgstr "Passwort zurücksetzen"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Wann?"
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Was?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Wer hat bezahlt?"
|
||||
msgid "Payer"
|
||||
msgstr "Von"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Wieviel?"
|
||||
msgid "Amount paid"
|
||||
msgstr "Betrag"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Währung"
|
||||
|
@ -165,6 +156,9 @@ msgstr "Hinzufügen und neuen erstellen"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "Projekt Standardwährung: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Der Betrag darf nicht null sein"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
|
@ -186,27 +180,13 @@ msgstr "Der Benutzer ist bereits diesem Projekt zugeordnet"
|
|||
msgid "People to notify"
|
||||
msgstr "Personen, die informiert werden sollen"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Einladung versenden"
|
||||
msgid "Send invites"
|
||||
msgstr "Einladungen senden"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "Die E-Mail-Adresse(n) %(email)s ist/sind nicht gültig"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Ausloggen"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr "Bitte überprüfen Sie die E-Mail Konfiguration des Servers."
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"Bitte überprüfe die E-Mail Konfiguration des Servers oder kontaktiere einen "
|
||||
"Administrator: %(admin_email)s"
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} und {dual_object_1}"
|
||||
|
@ -234,8 +214,9 @@ msgstr "{prefix}: {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:<br />{errors}"
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgstr "Zu viele fehlgeschlagene Anmeldeversuche."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr ""
|
||||
"Zu viele fehlgeschlagene Anmeldeversuche, bitte versuche es später nochmal."
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
|
@ -249,6 +230,12 @@ msgstr "Bereitgestelltes Token ist ungültig"
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "Der private Code ist nicht korrekt"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
"Du hast gerade das Projekt '%(project)s' erstellt, um deine Ausgaben zu "
|
||||
"teilen"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "Dir wurde soeben eine Erinnerungsmail gesendet"
|
||||
|
||||
|
@ -259,10 +246,14 @@ msgstr ""
|
|||
"Wir haben versucht dir eine Erinnerungsmail zu senden, aber das hat nicht"
|
||||
" geklappt. Du kannst das Projekt weiterhin wie gewohnt nutzen."
|
||||
|
||||
#, fuzzy
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "Die Projektkennung ist %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"Entschuldigung, es trat ein Fehler beim Senden der E-Mail zur Passwort "
|
||||
"Zurücksetzung auf. Bitte überprüfe die E-Mail Konfiguration des Servers "
|
||||
|
@ -280,26 +271,18 @@ msgstr "Unbekanntes Projekt"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "Passwort erfolgreich zurückgesetzt."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr "Einstellungen wurden erfolgreich übernommen."
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Projekt erfolgreich hochgeladen"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr "Fehlendes Attribut: %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr "Ungültiges JSON"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
"Rechnungen in mehreren Währungen können einem Projekt ohne "
|
||||
"Standardwährung nicht hinzugefügt werden"
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Projekt erfolgreich hochgeladen"
|
||||
"Rechnungen in mehreren Währungen können einem Projekt ohne Standardwährung "
|
||||
"nicht hinzugefügt werden"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "Projekt erfolgreich gelöscht"
|
||||
|
@ -307,9 +290,6 @@ msgstr "Projekt erfolgreich gelöscht"
|
|||
msgid "Error deleting project"
|
||||
msgstr "Fehler bei Projektlöschung"
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr "Verlassen nicht möglich"
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "Du wurdest eingeladen, deine Ausgaben für %(project)s zu teilen"
|
||||
|
@ -317,9 +297,14 @@ msgstr "Du wurdest eingeladen, deine Ausgaben für %(project)s zu teilen"
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "Deine Einladungen wurden versendet"
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Entschuldigung, es trat ein Fehler beim Versenden der Einladungsmails auf."
|
||||
"Entschuldigung, es trat ein Fehler beim Versenden der Einladungsmails "
|
||||
"auf. Bitte überprüfe die E-Mail Konfiguration des Servers oder "
|
||||
"kontaktiere einen Administrator."
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
|
@ -363,10 +348,6 @@ msgstr "Die Ausgabe wurde entfernt"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "Die Ausgabe wurde bearbeitet"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr "%(lang)s ist keine unterstützte Sprache"
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr "Projekthistorie konnte nicht gelöscht werden"
|
||||
|
||||
|
@ -398,7 +379,7 @@ msgid "The project you are trying to access do not exist, do you want to"
|
|||
msgstr "Das Projekt existiert nicht, willst du"
|
||||
|
||||
msgid "create it"
|
||||
msgstr "es erstellen"
|
||||
msgstr "Erstellen"
|
||||
|
||||
msgid "?"
|
||||
msgstr "?"
|
||||
|
@ -427,8 +408,8 @@ msgstr "Aktionen"
|
|||
msgid "edit"
|
||||
msgstr "Bearbeiten"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "Projekt löschen"
|
||||
msgid "delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
msgid "show"
|
||||
msgstr "Zeigen"
|
||||
|
@ -442,11 +423,20 @@ msgstr "Handy-Applikation herunterladen"
|
|||
msgid "Get it on"
|
||||
msgstr "Mach mit"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr "Bist du sicher?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Projekt bearbeiten"
|
||||
|
||||
msgid "Import project"
|
||||
msgstr "Projekt importieren"
|
||||
msgid "Delete project"
|
||||
msgstr "Projekt löschen"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "JSON importieren"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Datei auswählen"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Projektdaten herunterladen"
|
||||
|
@ -472,29 +462,18 @@ msgstr "Abbrechen"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Datenschutzeinstellungen"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr "Änderungen speichern"
|
||||
msgid "Edit the project"
|
||||
msgstr "Projekt bearbeiten"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr "Dies wird alle Ausgaben und Mitglieder dieses Projektes löschen!"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Zuvor exportierte Projekt-Datei importieren"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Datei auswählen"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Ausgabe bearbeiten"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "Ausgabe hinzufügen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr "einfache Operationen sind erlaubt, z.B. (18+36.2)/3"
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Jeder"
|
||||
|
||||
|
@ -513,6 +492,9 @@ msgstr "Diesen Benutzer bearbeiten"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "max.mustermann@beispiel.com, mary.moe@site.com"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Einladung versenden"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Herunterladen"
|
||||
|
||||
|
@ -585,23 +567,36 @@ msgstr "Rechnung %(name)s: %(owers_list_str)s zur Eigentümerliste hinzugefügt"
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr "Rechnung %(name)s: %(owers_list_str)s von der Eigentümerliste entfernt"
|
||||
|
||||
#, fuzzy
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Dieses Projekt hat den Projektverlauf deaktiviert. Neue Aktionen werden "
|
||||
"unten nicht mehr angezeigt."
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "Der Verlauf kann in den Einstellungen aktiviert werden."
|
||||
"\n"
|
||||
" <i>Der Verlauf dieses Projekts ist deaktiviert. Neue Aktionen"
|
||||
" werden nicht im Folgenden auftauchen. Du kannst den Verlauf auf der\n"
|
||||
"<a href=\"%(url)s\">Einstellungsseite</a> aktivieren.</i>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Wahrscheinlich hat jemand den Projektverlauf gelöscht."
|
||||
"\n"
|
||||
" <I>Die folgende Tabelle zeigt alle aufgezeichneten Aktionen "
|
||||
"bevor der Projektverlauf deaktiviert wurde. Du kannst den\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">Projektverlauf löschen</a>, um sie zu "
|
||||
"entfernen.</i></p>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
|
@ -613,18 +608,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "Gespeicherte IP-Adressen löschen"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Keine IP-Adressen zu löschen"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Gespeicherte IP-Adressen löschen"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "Kein Verlauf zu löschen"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Projektverlauf löschen"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Keine IP-Adressen zu löschen"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Gespeicherte IP-Adressen löschen"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Zeit"
|
||||
|
||||
|
@ -688,15 +683,9 @@ msgstr ""
|
|||
"Teinehmer %(name)s: Gewichtung von %(old_weight)s auf %(new_weight)s "
|
||||
"geändert"
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Von"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Betrag"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Betrag in %(currency)s"
|
||||
|
@ -799,9 +788,6 @@ msgstr "Verlauf"
|
|||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Andere Projekte:"
|
||||
|
||||
|
@ -811,9 +797,8 @@ msgstr "wechseln zu"
|
|||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr "Bitte nach %(date)s erneut versuchen."
|
||||
msgid "Logout"
|
||||
msgstr "Ausloggen"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
@ -824,7 +809,7 @@ msgstr "Handy-Applikation"
|
|||
msgid "Documentation"
|
||||
msgstr "Dokumentation"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "Dashboard Administration"
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -846,31 +831,37 @@ msgstr "Bist du sicher?"
|
|||
msgid "Invite people"
|
||||
msgstr "Leute einladen"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Aktuellere Rechnungen"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Ältere Rechnungen"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "Du kannst anfangen, Teilnehmer hinzuzufügen"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "Neue Ausgabe"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Aktuellere Rechnungen"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Ältere Rechnungen"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Wann?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Wer hat bezahlt?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "Wofür?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Wieviel?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "Hinzugefügt am %(date)s"
|
||||
|
||||
#, python-format
|
||||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "Alle außer %(excluded)s"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "Löschen"
|
||||
msgstr "Jeder außer %(excluded)s"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Keine Ausgaben"
|
||||
|
@ -878,12 +869,14 @@ msgstr "Keine Ausgaben"
|
|||
msgid "Nothing to list yet."
|
||||
msgstr "Noch nichts aufzulisten."
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgstr "Mach deine erste Rechnung"
|
||||
msgid "You probably want to"
|
||||
msgstr "Du willst wahrscheinlich"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgstr "Diesen Benutzer bearbeiten"
|
||||
msgid "add a bill"
|
||||
msgstr "eine Ausgabe hinzufügen"
|
||||
|
||||
msgid "add participants"
|
||||
msgstr "Teilnehmer hinzufügen"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "Passwort-Erinnerung"
|
||||
|
@ -907,57 +900,38 @@ msgstr "Setze dein Passwort zurück"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "Lade Leute ein, diesem Projekt beizutreten"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr "Einladung verschicken"
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
"Am einfachsten lädt man jemanden ein, indem man folgenden Einladungs-Link "
|
||||
"teilt. <br /> Sie werden dann in der Lage sein dem Projekt beizutreten, zu "
|
||||
"bearbeiten und Rechnungen hinzuzufügen, bearbeiten und löschen. Sie werden "
|
||||
"allerdings keinen Zugriff auf wichtige Einstellungen bekommen, wie Privaten "
|
||||
"Code zu ändern oder gar das ganze Projekt zu löschen."
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr "QR-Code scannen"
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr "Benutzen sie ein Smartphone mit Kompatibler App."
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Per E-Mail versenden"
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
"Gib eine (durch Kommas getrennte) Liste von E-Mail-Adressen an, die du über "
|
||||
"die Erstellung dieses Projekts informieren möchtest, und wir werden ihnen "
|
||||
"eine E-Mail senden."
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Teile die ID & den Code"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"Du kannst die Projekt-ID und den privaten Code auf jedem "
|
||||
"Kommunikationsweg weitergeben."
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "Private code:"
|
||||
msgstr "Privater Code:"
|
||||
msgid "Share the Link"
|
||||
msgstr "Link teilen"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgstr "Der Private Code wurde beim erstellen des Projekts von Ihnen festgelegt"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr "Du kannst den folgenden Link direkt über dein bevorzugtes Medium teilen"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Per E-Mail versenden"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"Gib eine (durch Kommas getrennte) Liste von E-Mail-Adressen an, die du "
|
||||
"über die\n"
|
||||
"\t\t\tErstellung dieses Projekts informieren möchtest, und wir senden "
|
||||
"ihnen eine E-Mail."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Wer zahlt?"
|
||||
|
@ -1094,93 +1068,3 @@ msgstr "Zeitraum"
|
|||
|
||||
#~ msgid "Participants to notify"
|
||||
#~ msgstr "Teilnehmer hinzufügen"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Importieren"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Betrag"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Der Betrag darf nicht null sein"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "Die Projektkennung ist %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "Ungültiges JSON"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "Bist du sicher?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "JSON importieren"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Der Verlauf dieses Projekts "
|
||||
#~ "ist deaktiviert. Neue Aktionen werden "
|
||||
#~ "nicht im Folgenden auftauchen. Du kannst"
|
||||
#~ " den Verlauf auf der\n"
|
||||
#~ "<a href=\"%(url)s\">Einstellungsseite</a> aktivieren.</i>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <I>Die folgende Tabelle zeigt "
|
||||
#~ "alle aufgezeichneten Aktionen bevor der "
|
||||
#~ "Projektverlauf deaktiviert wurde. Du kannst"
|
||||
#~ " den\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">Projektverlauf löschen</a>, "
|
||||
#~ "um sie zu entfernen.</i></p>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "Einladungen senden"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "Zeigen"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Projekt bearbeiten"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "Du willst wahrscheinlich"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "Teilnehmer hinzufügen"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
#~ "Du kannst die Projekt-ID und den"
|
||||
#~ " privaten Code auf jedem Kommunikationsweg"
|
||||
#~ " weitergeben."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "Link teilen"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr "Du kannst den folgenden Link direkt über dein bevorzugtes Medium teilen"
|
||||
|
|
BIN
ihatemoney/translations/el/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/el/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2021-08-01 08:34+0000\n"
|
||||
"Last-Translator: Eugenia Russell <eugenia.russell2019@gmail.com>\n"
|
||||
"Language: el\n"
|
||||
|
@ -15,10 +15,6 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -27,13 +23,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Τίτλος εργασίας"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "Ιδιωτικός κωδικός"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Ιδιωτικός κωδικός"
|
||||
|
@ -56,14 +45,6 @@ msgstr "Προεπιλεγμένο Νόμισμα"
|
|||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "Άγνωστο πρότζεκτ"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Invalid private code."
|
||||
msgstr "Ιδιωτικός κωδικός"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
|
@ -71,8 +52,11 @@ msgstr ""
|
|||
"Αυτό το έργο δεν μπορεί να οριστεί σε \"χωρίς νόμισμα\" επειδή περιέχει "
|
||||
"λογαριασμούς σε πολλαπλά νομίσματα."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr ""
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Εισαγωγή αρχείου JSON που έχει εξαχθεί προηγουμένως"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Εισαγωγή"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Αναγνωριστικό έργου"
|
||||
|
@ -104,6 +88,14 @@ msgstr ""
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Εισαγάγετε ιδιωτικό κωδικό για επιβεβαίωση της διαγραφής"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "Άγνωστο πρότζεκτ"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Invalid private code."
|
||||
msgstr "Ιδιωτικός κωδικός"
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Συνδεθείτε"
|
||||
|
||||
|
@ -128,17 +120,17 @@ msgstr "Επιβεβαίωση κωδικού πρόσβασης"
|
|||
msgid "Reset password"
|
||||
msgstr "Επαναφορά κωδικού πρόσβασης"
|
||||
|
||||
msgid "When?"
|
||||
msgstr ""
|
||||
msgid "Date"
|
||||
msgstr "Ημερομηνία"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Τι?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr ""
|
||||
msgid "Payer"
|
||||
msgstr "Φορέας πληρωμής"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr ""
|
||||
msgid "Amount paid"
|
||||
msgstr "Καταβληθέν ποσό"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Νόμισμα"
|
||||
|
@ -164,6 +156,9 @@ msgstr "Υποβολή και προσθήκη νέου"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "Προεπιλογή έργου: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Οι λογαριασμοί δεν μπορούν να είναι μηδενικοί"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Όνομα"
|
||||
|
||||
|
@ -187,25 +182,13 @@ msgstr "Αυτό το έργο έχει ήδη αυτό το μέλος"
|
|||
msgid "People to notify"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Αποστολή των προσκλήσεων"
|
||||
msgid "Send invites"
|
||||
msgstr "Αποστολή προσκλήσεων"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "Το μήνυμα ηλεκτρονικού ταχυδρομείου %(email)s δεν είναι έγκυρο"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr ""
|
||||
|
@ -233,8 +216,7 @@ msgstr "{prefix}: {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "Πάρα πολλές αποτυχημένες προσπάθειες σύνδεσης, δοκιμάστε ξανά αργότερα."
|
||||
|
||||
#, python-format
|
||||
|
@ -249,6 +231,10 @@ msgstr ""
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "Αυτός ο ιδιωτικός κωδικός δεν είναι ο σωστός"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "Ένα εμάιλ υπενθύμισης μόλις σας στάλθηκε"
|
||||
|
||||
|
@ -259,9 +245,14 @@ msgstr ""
|
|||
"Προσπαθήσαμε να σας στείλουμε ένα εμάιλ υπενθύμισης, αλλά υπήρξε ένα "
|
||||
"λάθος. Μπορείτε ακόμα να χρησιμοποιήσετε το πρότζεκτ κανονικά."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "Το αναγνωριστικό έργου είναι %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
|
||||
msgid "No token provided"
|
||||
|
@ -276,33 +267,23 @@ msgstr "Άγνωστο πρότζεκτ"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "Επαναφορά του κωδικού επιτυχώς."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Έργο που φορτώθηκε επιτυχώς"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr ""
|
||||
msgid "Invalid JSON"
|
||||
msgstr "Η JSON δεν είναι έγκυρη"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Έργο που φορτώθηκε επιτυχώς"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "Το πρότζεκτ διαγράφηκε επιτυχώς"
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "Έχετε κληθεί να μοιραστείτε τα έξοδά σας για %(project)s"
|
||||
|
@ -310,7 +291,10 @@ msgstr "Έχετε κληθεί να μοιραστείτε τα έξοδά σα
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "Οι προσκλήσεις έχουν σταλθεί"
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -353,10 +337,6 @@ msgstr "Ο λογαριασμός έχει διαγραφεί"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "Ο λογαριασμός έχει τροποποιηθεί"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Error deleting project history"
|
||||
msgstr "Ενεργοποίηση ιστορικού έργων"
|
||||
|
@ -423,9 +403,8 @@ msgstr "Ενέργειες"
|
|||
msgid "edit"
|
||||
msgstr "επιμελειθήτε"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Delete project"
|
||||
msgstr "Επεξεργασία έργου"
|
||||
msgid "delete"
|
||||
msgstr "διαγραφή"
|
||||
|
||||
msgid "show"
|
||||
msgstr "εμφάνιση"
|
||||
|
@ -440,13 +419,23 @@ msgstr ""
|
|||
msgid "Get it on"
|
||||
msgstr "Συνδεθείτε"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Are you sure?"
|
||||
msgstr "Είστε σίγουρος;"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Επεξεργασία έργου"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgid "Delete project"
|
||||
msgstr "Επεξεργασία έργου"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "Εισαγωγή JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Επιλογή αρχείου"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Κατεβάστε τα δεδομένα του έργου"
|
||||
|
||||
|
@ -475,28 +464,18 @@ msgstr "Ακύρωση"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Ρυθμίσεις απορρήτου"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr ""
|
||||
msgid "Edit the project"
|
||||
msgstr "Επεξεργαστείτε το έργο"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Εισαγωγή αρχείου JSON που έχει εξαχθεί προηγουμένως"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Επιλογή αρχείου"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Επεξεργαστείτε αυτόν τον λογαριασμό"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "Προσθήκη λογαριασμού"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr ""
|
||||
|
||||
|
@ -516,6 +495,9 @@ msgstr "Προσθήκη συμμετέχοντος"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Αποστολή των προσκλήσεων"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Κατεβάστε"
|
||||
|
||||
|
@ -581,21 +563,25 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Κάποιος πιθανώς διέγραψε το ιστορικό του έργου."
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
"recording disabled. "
|
||||
|
@ -604,18 +590,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "Διαγραφή αποθηκευμένων διευθύνσεων IP"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Δεν υπάρχουν διευθύνσεις IP προς διαγραφή"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Διαγραφή αποθηκευμένων διευθύνσεων IP"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "Δεν υπάρχει ιστορία για διαγραφή"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Απαλοιφή ιστορικού έργου"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Δεν υπάρχουν διευθύνσεις IP προς διαγραφή"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Διαγραφή αποθηκευμένων διευθύνσεων IP"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Ώρα"
|
||||
|
||||
|
@ -677,15 +663,9 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Φορέας πληρωμής"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Ποσό"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Ημερομηνία"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Ποσό σε %(currency)s"
|
||||
|
@ -786,9 +766,6 @@ msgstr ""
|
|||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -798,8 +775,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
|
@ -811,7 +787,7 @@ msgstr ""
|
|||
msgid "Documentation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
|
@ -834,21 +810,30 @@ msgstr "Είστε σίγουρος;"
|
|||
msgid "Invite people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "When?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr ""
|
||||
|
||||
msgid "For what?"
|
||||
msgstr ""
|
||||
|
||||
msgid "How much?"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr ""
|
||||
|
@ -857,21 +842,20 @@ msgstr ""
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "delete"
|
||||
msgstr "διαγραφή"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgstr "Προσθήκη συμμετέχοντος"
|
||||
msgid "add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "add participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr ""
|
||||
|
@ -893,49 +877,31 @@ msgstr ""
|
|||
msgid "Invite people to join this project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgid "Share the Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "Ιδιωτικός κωδικός"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
|
@ -1051,112 +1017,3 @@ msgstr "Περίοδος"
|
|||
|
||||
#~ msgid "People to notify"
|
||||
#~ msgstr "Πρόσωπα προς ενημέρωση"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Εισαγωγή"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Καταβληθέν ποσό"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Οι λογαριασμοί δεν μπορούν να είναι μηδενικοί"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "Το αναγνωριστικό έργου είναι %(project)s"
|
||||
|
||||
#~ 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 ""
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "Η JSON δεν είναι έγκυρη"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Sorry, there was an error while "
|
||||
#~ "trying to send the invitation emails."
|
||||
#~ " Please check the email configuration "
|
||||
#~ "of the server or contact the "
|
||||
#~ "administrator."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "Είστε σίγουρος;"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "Εισαγωγή JSON"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "Αποστολή προσκλήσεων"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "εμφάνιση"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Επεξεργαστείτε το έργο"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add a bill"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email for you."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email with the invitation "
|
||||
#~ "link."
|
||||
#~ msgstr ""
|
||||
|
||||
|
|
BIN
ihatemoney/translations/eo/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/eo/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2021-10-01 20:35+0000\n"
|
||||
"Last-Translator: phlostically <phlostically@mailinator.com>\n"
|
||||
"Language: eo\n"
|
||||
|
@ -15,10 +15,6 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Vi ĵus kreis la projekton «%(project)s» por dividi viajn elspezojn"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -29,13 +25,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nomo de projekto"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "Nova privata kodo"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Nova privata kodo"
|
||||
|
||||
|
@ -57,12 +46,6 @@ msgstr "Implicita valuto"
|
|||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Nekonata eraro"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Nevalida privata kodo."
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
|
@ -70,8 +53,11 @@ msgstr ""
|
|||
"Ĉi tiu projekto ne povas esti agordita al «neniu valuto», ĉar ĝi enhavas "
|
||||
"fakturojn en pluraj valutoj."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr ""
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importi antaŭe elportitan JSON-dosieron"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Enporti"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Identigilo de projekto"
|
||||
|
@ -103,6 +89,12 @@ msgstr ""
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Nekonata eraro"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Nevalida privata kodo."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Eniri"
|
||||
|
||||
|
@ -127,17 +119,17 @@ msgstr "Konfirmo de pasvorto"
|
|||
msgid "Reset password"
|
||||
msgstr "Restarigi pasvorton"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Kiam?"
|
||||
msgid "Date"
|
||||
msgstr "Dato"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Kio?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Kiu pagis?"
|
||||
msgid "Payer"
|
||||
msgstr "Paganto"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Kiom?"
|
||||
msgid "Amount paid"
|
||||
msgstr "Kvanto pagita"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Valuto"
|
||||
|
@ -161,6 +153,9 @@ msgstr "Submeti kaj aldoni novan"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "Implicita valuto de la projekto: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Fakturoj ne povas esti nulaj"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Nomo"
|
||||
|
||||
|
@ -184,27 +179,13 @@ msgstr "Ĉi tiu projekto jam havas ĉi tiun anon"
|
|||
msgid "People to notify"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Sendi la invitojn"
|
||||
msgid "Send invites"
|
||||
msgstr "Sendi invitojn"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "La retpoŝta adreso %(email)s ne validas"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Adiaŭi"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"Pardonu, okazis eraro dum sendado de la invitoj. Bonvolu kontroli la "
|
||||
"retpoŝtan agordon de la servilo aŭ kontakti la administranton."
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} kaj {dual_object_1}"
|
||||
|
@ -232,8 +213,7 @@ msgstr "{prefix}: {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:<br />{errors}"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "Tro da malsukcesaj provoj de salutado; bonvolu reprovi poste."
|
||||
|
||||
#, python-format
|
||||
|
@ -246,6 +226,10 @@ msgstr ""
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "Ĉi tiu privata kodo ne ĝustas"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Vi ĵus kreis la projekton «%(project)s» por dividi viajn elspezojn"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "Rememoriga retpoŝta mesaĝo ĵus estis sendita al vi"
|
||||
|
||||
|
@ -256,10 +240,14 @@ msgstr ""
|
|||
"Ni provis sendi al vi rememorigan retpoŝtan mesaĝon, sed okazis eraro. Vi"
|
||||
" ankoraŭ povas uzi la projekton normale."
|
||||
|
||||
#, fuzzy
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "La identigilo de la projekto estas %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"Pardonu, okazis eraro dum sendado al vi de retpoŝta mesaĝo de instrukcioj"
|
||||
" pri restarigo de pasvorto. Bonvolu kontroli la retpoŝtan agordon de la "
|
||||
|
@ -277,33 +265,23 @@ msgstr "Nekonata projekto"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "Pasvorto sukcese restarigita."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Projekto sukcese alŝutita"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr ""
|
||||
msgid "Invalid JSON"
|
||||
msgstr "Nevalida JSON"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Projekto sukcese alŝutita"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "La projekto estis sukcese forigitaj"
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "Vi estis invitita dividi viajn elspezojn por %(project)s"
|
||||
|
@ -311,8 +289,10 @@ msgstr "Vi estis invitita dividi viajn elspezojn por %(project)s"
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "Viaj invitoj estis senditaj"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Pardonu, okazis eraro dum sendado de la invitoj. Bonvolu kontroli la "
|
||||
"retpoŝtan agordon de la servilo aŭ kontakti la administranton."
|
||||
|
@ -359,10 +339,6 @@ msgstr "La fakturo estis forigita"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "La fakturo estis modifita"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Error deleting project history"
|
||||
msgstr "Ŝalti projektan historion"
|
||||
|
@ -428,8 +404,8 @@ msgstr "Agoj"
|
|||
msgid "edit"
|
||||
msgstr "redakti"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "Forviŝi projekton"
|
||||
msgid "delete"
|
||||
msgstr "forigi"
|
||||
|
||||
msgid "show"
|
||||
msgstr "montri"
|
||||
|
@ -443,12 +419,20 @@ msgstr "Elŝuti programon por poŝaparato"
|
|||
msgid "Get it on"
|
||||
msgstr "Elŝuti ĝin ĉe"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr "Ĉu vi certas?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Redakti projekton"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgstr "Redakti projekton"
|
||||
msgid "Delete project"
|
||||
msgstr "Forviŝi projekton"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "Enporti JSON-dosieron"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Elekti dosieron"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Elŝuti projektajn datenojn"
|
||||
|
@ -474,28 +458,18 @@ msgstr "Nuligi"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Agordoj pri privateco"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr ""
|
||||
msgid "Edit the project"
|
||||
msgstr "Redakti la projekton"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Importi antaŭe elportitan JSON-dosieron"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Elekti dosieron"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Redakti ĉi tiun fakturon"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "Aldoni fakturon"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Ĉiuj"
|
||||
|
||||
|
@ -515,6 +489,9 @@ msgstr "Aldono partoprenanton"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "johano.zamenhof@example.com, maria.baghy@example.net"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Sendi la invitojn"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Elŝuti"
|
||||
|
||||
|
@ -586,21 +563,36 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "Registrado de IP-adresoj estas ŝaltebla per la agorda paĝo"
|
||||
"\n"
|
||||
" <i>Historio estis malŝaltita por ĉi tiu projekto. Novaj agoj "
|
||||
"ne aperos ĉi-sube. Vi povas ŝalti historion ĉe la</i>\n"
|
||||
" <a href=\"%(url)s\">paĝo pri agordoj</a>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Iu verŝajne forviŝis la historion de la projekto."
|
||||
"\n"
|
||||
" <i>La ĉi-suba tabelo montras agojn registritajn antaŭ "
|
||||
"malŝalto de la projekta historio. Vi povas\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">forviŝi la projektan historion</a> por "
|
||||
"forigi ilin.</i></ p >\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
|
@ -612,18 +604,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "Forviŝi konservitajn IP-adresojn"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Neniom da forviŝeblaj IP-adresoj"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Forviŝi konservitajn IP-adresojn"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "Neniom da forviŝebla historio"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Forviŝi historion de projekto"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Neniom da forviŝeblaj IP-adresoj"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Forviŝi konservitajn IP-adresojn"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Tempo"
|
||||
|
||||
|
@ -685,15 +677,9 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Paganto"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Kvanto"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Dato"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Kvanto en %(currency)s"
|
||||
|
@ -796,9 +782,6 @@ msgstr "Historio"
|
|||
msgid "Settings"
|
||||
msgstr "Agordoj"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Aliaj projektoj:"
|
||||
|
||||
|
@ -808,9 +791,8 @@ msgstr "salti al"
|
|||
msgid "Dashboard"
|
||||
msgstr "Panelo"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr ""
|
||||
msgid "Logout"
|
||||
msgstr "Adiaŭi"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Kodo"
|
||||
|
@ -821,7 +803,7 @@ msgstr "Poŝaparata programo"
|
|||
msgid "Documentation"
|
||||
msgstr "Dokumentaro"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "Administra panelo"
|
||||
|
||||
#, fuzzy
|
||||
|
@ -844,21 +826,30 @@ msgstr "ĉu vi certas?"
|
|||
msgid "Invite people"
|
||||
msgstr "Inviti homojn"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Pli novaj fakturoj"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Pli malnovaj fakturoj"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "Vi komencu aldonante partoprenantojn"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "Aldoni novan fakturon"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Pli novaj fakturoj"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Pli malnovaj fakturoj"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Kiam?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Kiu pagis?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "Por kio?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Kiom?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "Aldonita en %(date)s"
|
||||
|
@ -867,22 +858,20 @@ msgstr "Aldonita en %(date)s"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "Ĉiuj krom %(excluded)s"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "forigi"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Neniu fakturo"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "Nenio listigebla ankoraŭ."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr "Vi probable volas"
|
||||
|
||||
msgid "add a bill"
|
||||
msgstr "aldoni fakturon"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgstr "Aldono partoprenanton"
|
||||
msgid "add participants"
|
||||
msgstr "aldoni partoprenantojn"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "Rememorigilo pri pasvorto"
|
||||
|
@ -906,55 +895,36 @@ msgstr "Restarigi vian pasvorton"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "Inviti homojn aliĝi al ĉi tiu projekto"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Sendi retpoŝte"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
"Specifu (kome apartigitan) liston de tiuj retpoŝtaj adresoj, kiujn vi "
|
||||
"volas sciigi pri la\n"
|
||||
" kreado de ĉi tiu buĝet-administra projekto, kaj ni sendos"
|
||||
" al ili retpoŝtajn mesaĝojn por vi."
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Konigi identigilon kaj kodon"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
"communication means."
|
||||
msgstr "Vi povas iel ajn konigi la projektan identigilon kaj la privatan kodon."
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "Identigilo:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "Privata kodo"
|
||||
msgid "Share the Link"
|
||||
msgstr "Sendi la ligon"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr "Vi povas rekte sendi la jenan hiperligon per via preferata komunikilo"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Sendi retpoŝte"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"Specifu (kome apartigitan) liston de tiuj retpoŝtaj adresoj, kiujn vi "
|
||||
"volas sciigi pri la\n"
|
||||
" kreado de ĉi tiu buĝet-administra projekto, kaj ni sendos"
|
||||
" al ili retpoŝtajn mesaĝojn por vi."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Kiu pagas?"
|
||||
|
@ -1051,91 +1021,3 @@ msgstr "Periodo"
|
|||
|
||||
#~ msgid "People to notify"
|
||||
#~ msgstr "Sciigotaj homoj"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Enporti"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Kvanto pagita"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Fakturoj ne povas esti nulaj"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "La identigilo de la projekto estas %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "Nevalida JSON"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "Ĉu vi certas?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "Enporti JSON-dosieron"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Historio estis malŝaltita por"
|
||||
#~ " ĉi tiu projekto. Novaj agoj ne "
|
||||
#~ "aperos ĉi-sube. Vi povas ŝalti "
|
||||
#~ "historion ĉe la</i>\n"
|
||||
#~ " <a href=\"%(url)s\">paĝo pri agordoj</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>La ĉi-suba tabelo montras"
|
||||
#~ " agojn registritajn antaŭ malŝalto de "
|
||||
#~ "la projekta historio. Vi povas\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">forviŝi la projektan "
|
||||
#~ "historion</a> por forigi ilin.</i></ p >"
|
||||
#~ "\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "Sendi invitojn"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "montri"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Redakti la projekton"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "Vi probable volas"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "aldoni partoprenantojn"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr "Vi povas iel ajn konigi la projektan identigilon kaj la privatan kodon."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "Sendi la ligon"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr "Vi povas rekte sendi la jenan hiperligon per via preferata komunikilo"
|
||||
|
||||
|
|
BIN
ihatemoney/translations/es/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/es/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
ihatemoney/translations/es_419/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/es_419/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -2,9 +2,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2023-11-27 05:02+0000\n"
|
||||
"Last-Translator: Wilfredo Gomez <thepageguy@mailfence.com>\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2022-04-11 17:12+0000\n"
|
||||
"Last-Translator: Santiago José Gutiérrez Llanos <gutierrezapata17@gmail.com>"
|
||||
"\n"
|
||||
"Language-Team: Spanish (Latin America) <https://hosted.weblate.org/projects/"
|
||||
"i-hate-money/i-hate-money/es_419/>\n"
|
||||
"Language: es_419\n"
|
||||
|
@ -12,13 +13,9 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.2.1-rc\n"
|
||||
"X-Generator: Weblate 4.12-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Acabas de crear '%(project)s' para compartir tus gastos"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -29,17 +26,11 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nombre del Proyecto"
|
||||
|
||||
msgid "Current private code"
|
||||
msgstr "código privado actual"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr "Ingrese el código privado existente para editar el proyecto"
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Nuevo Código privado"
|
||||
msgstr "Nuevo código privado"
|
||||
|
||||
msgid "Enter a new code if you want to change it"
|
||||
msgstr "Introduce un nuevo código si quieres cambiarlo"
|
||||
msgstr "Entra un nuevo código si tu quieres cambiarlo"
|
||||
|
||||
msgid "Email"
|
||||
msgstr "Correo Electrónico"
|
||||
|
@ -48,31 +39,28 @@ msgid "Enable project history"
|
|||
msgstr "Habilitar historial del proyecto"
|
||||
|
||||
msgid "Use IP tracking for project history"
|
||||
msgstr "Utilice el seguimiento de IP para el historial del proyecto"
|
||||
msgstr "Registrar la IPs para el historial del proyecto"
|
||||
|
||||
msgid "Default Currency"
|
||||
msgstr "Moneda por defecto"
|
||||
|
||||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
"Establecer una moneda predeterminada permite la conversión de moneda entre "
|
||||
"billetes"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Error desconocido"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Código privado no válido."
|
||||
"Establecer una moneda predeterminada permite la conversión de divisas entre "
|
||||
"facturas"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
"Este proyecto no se puede configurar como \"sin moneda\" porque contiene "
|
||||
"billetes en varias monedas."
|
||||
"Este proyecto no se puede establecer en 'ninguna moneda' porque contiene "
|
||||
"facturas en varias monedas."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr "Compatible con Cospend"
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importar archivo JSON previamente exportado"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Identificador de proyecto"
|
||||
|
@ -92,16 +80,22 @@ msgstr ""
|
|||
"favor, elija un nuevo identificador"
|
||||
|
||||
msgid "Which is a real currency: Euro or Petro dollar?"
|
||||
msgstr "¿Cuál es la moneda real: el euro o el petrodólar?"
|
||||
msgstr "¿Cuál es una moneda real: euro o petro dólar?"
|
||||
|
||||
msgid "euro"
|
||||
msgstr "euro"
|
||||
msgstr "Euro"
|
||||
|
||||
msgid "Please, validate the captcha to proceed."
|
||||
msgstr "Por favor, valide la captcha para proceder."
|
||||
msgstr "Por favor, completa el captcha para seguir."
|
||||
|
||||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Ingrese el código privado para confirmar la eliminación"
|
||||
msgstr "Introduzca el código privado para confirmar la eliminación"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Error desconocido"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Código privado inválido."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Entrar"
|
||||
|
@ -122,22 +116,22 @@ msgid "Password"
|
|||
msgstr "Contraseña"
|
||||
|
||||
msgid "Password confirmation"
|
||||
msgstr "confirmación de contraseña"
|
||||
msgstr "Confirmar contraseña"
|
||||
|
||||
msgid "Reset password"
|
||||
msgstr "Restablecer contraseña"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "¿Cuando?"
|
||||
msgid "Date"
|
||||
msgstr "Fecha"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "¿Qué?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "¿Quién pagó?"
|
||||
msgid "Payer"
|
||||
msgstr "Paga"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "¿Cuánto?"
|
||||
msgid "Amount paid"
|
||||
msgstr "Cantidad pagada"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Moneda"
|
||||
|
@ -159,7 +153,10 @@ msgstr "Enviar y agregar uno nuevo"
|
|||
|
||||
#, python-format
|
||||
msgid "Project default: %(currency)s"
|
||||
msgstr "Projecto por defecto: %(currency)s"
|
||||
msgstr "moneda predeterminada del projecto: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Las facturas no pueden ser nulas"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
@ -182,28 +179,13 @@ msgstr "Este proyecto ya tiene a este participante"
|
|||
msgid "People to notify"
|
||||
msgstr "Personas para notificar"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Enviar las invitaciones"
|
||||
msgid "Send invites"
|
||||
msgstr "Enviar invitaciones"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "El correo electrónico %(email)s no es válido"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Cerrar sesión"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
"Por favor verifique la configuración de correo electrónico del servidor."
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"Verifique la configuración de correo electrónico del servidor o comuníquese "
|
||||
"con el administrador: %(admin_email)s"
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} y {dual_object_1}"
|
||||
|
@ -221,47 +203,60 @@ msgid "{start_object}, {next_object}"
|
|||
msgstr "{start_object}, {next_object}"
|
||||
|
||||
msgid "No Currency"
|
||||
msgstr "No Moneda"
|
||||
msgstr "no moneda"
|
||||
|
||||
#. Form error with only one error
|
||||
msgid "{prefix}: {error}"
|
||||
msgstr "{prefix}: {error}"
|
||||
msgstr "{prefijo}: {error}"
|
||||
|
||||
#. Form error with a list of errors
|
||||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:<br />{errors}"
|
||||
msgstr "{prefijo}:<br />{errores}"
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgstr "Demasiados intentos fallidos de inicio de sesión."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr ""
|
||||
"Demasiados intentos fallidos de inicio de sesión, vuelva a intentarlo más"
|
||||
" tarde."
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
msgstr ""
|
||||
"Esta contraseña de administrador no es la correcta. Solo quedan %(num)d "
|
||||
"intentos restantes."
|
||||
"intentos."
|
||||
|
||||
msgid "Provided token is invalid"
|
||||
msgstr "El token proporcionado no es válido"
|
||||
msgstr "La muestra proporcionada no es válida"
|
||||
|
||||
msgid "This private code is not the right one"
|
||||
msgstr "Este código privado no es el correcto"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Acabas de crear '%(project)s' para compartir tus gastos"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "Se le acaba de enviar un correo electrónico de recordatorio"
|
||||
msgstr "Acabamos de enviarte un email de recordatorio"
|
||||
|
||||
msgid ""
|
||||
"We tried to send you an reminder email, but there was an error. You can "
|
||||
"still use the project normally."
|
||||
msgstr ""
|
||||
"Intentamos enviarte un correo electrónico de recordatorio, pero hubo un "
|
||||
"error. Aún puedes usar el proyecto normalmente."
|
||||
"Te hemos intentado enviar un correo electrónico recordatorio pero ha "
|
||||
"habido un error. Todavía puedes usar el proyecto habitualmente."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "El identificador del proyecto es %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"Lo sentimos, hubo un error al enviarle un correo electrónico con "
|
||||
"instrucciones para restablecer la contraseña."
|
||||
"Lo sentimos, hubo un error al enviarle un correo electrónico con las "
|
||||
"instrucciones de restablecimiento de contraseña. Compruebe la configuración "
|
||||
"de correo electrónico del servidor o póngase en contacto con el "
|
||||
"administrador."
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "No se proporciono ningún token"
|
||||
|
@ -275,34 +270,24 @@ msgstr "Proyecto desconocido"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "Contraseña restablecida con éxito."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr "La configuración del proyecto se ha cambiado correctamente."
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "El proyecto se subió exitosamente"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr "No se puede analizar CSV"
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr "Atributo faltante: %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr "JSON inválido"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
"No se pueden agregar billetes en varias monedas a un proyecto sin moneda "
|
||||
"No se pueden agregar facturas en varias monedas a un proyecto sin la moneda "
|
||||
"predeterminada"
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Proyecto cargado exitosamente"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "Proyecto eliminado correctamente"
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr "Error al borrar proyecto"
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr "No se puede cerrar sesión"
|
||||
msgstr "Error al borrar poryecto"
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
|
@ -311,24 +296,28 @@ msgstr "Usted ha sido invitado a compartir sus gastos para %(project)s"
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "Sus invitaciones han sido enviadas"
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Lo sentimos, hubo un error al intentar enviar los correos electrónicos de "
|
||||
"invitación."
|
||||
"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"
|
||||
msgstr "%(member)s ha sido añadido"
|
||||
msgstr "Se añadieron %(member)s"
|
||||
|
||||
msgid "Error activating participant"
|
||||
msgstr "Error al activar el participante"
|
||||
msgstr "Error activando participante"
|
||||
|
||||
#, python-format
|
||||
msgid "%(name)s is part of this project again"
|
||||
msgstr "%(name)s es parte de este proyecto otra vez"
|
||||
msgstr "%(name)s es parte de este nuevo proyecto"
|
||||
|
||||
msgid "Error removing participant"
|
||||
msgstr "Error al eliminar el participante"
|
||||
msgstr "Error eliminando participante"
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
|
@ -350,7 +339,7 @@ msgid "The bill has been added"
|
|||
msgstr "La factura ha sido agregada"
|
||||
|
||||
msgid "Error deleting bill"
|
||||
msgstr "Error al eliminar la factura"
|
||||
msgstr "Error eliminando factura"
|
||||
|
||||
msgid "The bill has been deleted"
|
||||
msgstr "La factura ha sido eliminada"
|
||||
|
@ -358,10 +347,6 @@ msgstr "La factura ha sido eliminada"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "La factura ha sido modificada"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr "%(lang)s no es un idioma admitido"
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr "Error al eliminar el historial del proyecto"
|
||||
|
||||
|
@ -422,8 +407,8 @@ msgstr "Acciones"
|
|||
msgid "edit"
|
||||
msgstr "Editar"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "Borrar proyecto"
|
||||
msgid "delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
msgid "show"
|
||||
msgstr "enseñar"
|
||||
|
@ -437,11 +422,20 @@ msgstr "Instalar aplicación móvil"
|
|||
msgid "Get it on"
|
||||
msgstr "Conseguir en"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr "¿Estás segura?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Editar proyecto"
|
||||
|
||||
msgid "Import project"
|
||||
msgstr "Importar proyecto"
|
||||
msgid "Delete project"
|
||||
msgstr "Borrar proyecto"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "Importar JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Escoger un archivo"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Descargar datos del proyecto"
|
||||
|
@ -469,27 +463,18 @@ msgstr "Cancelar"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Ajustes de privacidad"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr "Guardar cambios"
|
||||
msgid "Edit the project"
|
||||
msgstr "Editar el proyecto"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr "Esto va a remover todas las facturas y participantes en este proyecto!"
|
||||
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Importar proyecto previamente exportado"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Escoger un archivo"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Editar esta factura"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "Agregar una factura"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr "Se permiten operaciones simples, e.j. (18+36.2)/3"
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Todos"
|
||||
|
||||
|
@ -508,17 +493,20 @@ msgstr "Editar este participante"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "john.doe@example.com, mary.moe@site.com"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Enviar las invitaciones"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Descargar"
|
||||
|
||||
msgid "Disabled Project History"
|
||||
msgstr "Historial de proyectos deshabilitado"
|
||||
msgstr "Historial de proyecto activo"
|
||||
|
||||
msgid "Disabled Project History & IP Address Recording"
|
||||
msgstr "Historial de proyecto y registros de dirección IP inactivos"
|
||||
|
||||
msgid "Enabled Project History"
|
||||
msgstr "Historial de proyectos habilitado"
|
||||
msgstr "Historial de proyecto activo"
|
||||
|
||||
msgid "Disabled IP Address Recording"
|
||||
msgstr "Registro de direcciones IP activo"
|
||||
|
@ -534,7 +522,8 @@ msgstr "Se cambiaron los ajustes del historial"
|
|||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: %(property_name)s changed from %(before)s to %(after)s"
|
||||
msgstr "Factura %(name)s: %(property_name)s ha cambiado de %(before)s a %(after)s"
|
||||
msgstr ""
|
||||
"Factura %(name)s: %(property_name)s ha cambiado de %(before)s a %(after)s"
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: %(property_name)s changed to %(after)s"
|
||||
|
@ -578,23 +567,37 @@ msgstr "Factura%(name)s: añadida %(owers_list_str)s a la lista de dueños"
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr "Factura %(name)s: removida %(owers_list_str)s de la lista de dueños"
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Este proyecto tiene el historial deshabilitado. Las nuevas acciones no "
|
||||
"aparecerán a continuación."
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "Puede habilitar el historial en la página de configuración."
|
||||
"\n"
|
||||
" <i>El historial de este proyecto ha sido desactivado. Nuevas "
|
||||
"operaciones no apareceran a continuacion. El historial se puede "
|
||||
"agregar</i> \n"
|
||||
" <a href=\"%(url)s\">en la página de ajustes</a>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"La siguiente tabla refleja las acciones registradas antes de deshabilitar el "
|
||||
"historial del proyecto."
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Puede borrar el historial del proyecto para eliminarlos."
|
||||
"\n"
|
||||
" <i>Este registro muestra la actividad previa a la "
|
||||
"desactivación del historial del proyecto. Use la opción \n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">Eliminar historial del proyecto</a> para "
|
||||
"borrarlo.</i></p>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
|
@ -606,18 +609,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "Borrar las direcciones IP registradas"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "No hay direcciones IP para borrar"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Borrar direcciones IP registradas"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "No hay historial para borrar"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Borrar el historial del proyecto"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "No hay direcciones IP para borrar"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Borrar direcciones IP registradas"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Hora"
|
||||
|
||||
|
@ -679,15 +682,9 @@ msgstr "Factura %(name)s renombrada a %(new_description)s"
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr "Participante %(name)s: peso cambiado de %(old_weight)s a %(new_weight)s"
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Paga"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Cantidad"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Fecha"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Cantidad en %(currency)s"
|
||||
|
@ -790,9 +787,6 @@ msgstr "Historial"
|
|||
msgid "Settings"
|
||||
msgstr "Configuración"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr "rss Feed"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Otros proyectos :"
|
||||
|
||||
|
@ -802,9 +796,8 @@ msgstr "cambiar a"
|
|||
msgid "Dashboard"
|
||||
msgstr "Tablero"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr "Vuelva a intentarlo después de %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr "Cerrar sesión"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Código"
|
||||
|
@ -815,7 +808,7 @@ msgstr "Aplicación móvil"
|
|||
msgid "Documentation"
|
||||
msgstr "Documentación"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "Panel de administración"
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -837,21 +830,30 @@ msgstr "¿Estás seguro?"
|
|||
msgid "Invite people"
|
||||
msgstr "Invitar personas"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Nuevas facturas"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Facturas anteriores"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "Deberías comenzar agregando participantes"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "Añadir una nueva factura"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Nuevas facturas"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Facturas anteriores"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "¿Cuando?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "¿Quién pagó?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "¿Para qué?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "¿Cuánto?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "Agregado el %(date)s"
|
||||
|
@ -860,20 +862,20 @@ msgstr "Agregado el %(date)s"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "Todo el mundo menos %(excluded)s"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Sin facturas"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "Aún no hay nada que listar."
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgstr "Añade tu primera factura"
|
||||
msgid "You probably want to"
|
||||
msgstr "Probablemente quieras"
|
||||
|
||||
msgid "Add the first participant"
|
||||
msgstr "Agregar el primer participante"
|
||||
msgid "add a bill"
|
||||
msgstr "agregar una factura"
|
||||
|
||||
msgid "add participants"
|
||||
msgstr "agregar participantes"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "Recordar contraseña"
|
||||
|
@ -897,62 +899,40 @@ msgstr "Restablecer su contraseña"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "Invita a personas a unirse a este proyecto"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr "Compartir un enlace de invitación"
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
"La forma más sencilla de invitar personas es dándoles el siguiente enlace de "
|
||||
"invitación.<br />Podrán acceder al proyecto, administrar participantes, "
|
||||
"agregar/editar/eliminar facturas. Sin embargo, no tendrán acceso a "
|
||||
"configuraciones importantes como cambiar el código privado o eliminar todo "
|
||||
"el proyecto."
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr "Escanear código QR"
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr "Utilice un dispositivo móvil con una aplicación compatible."
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Enviar por correo electrónico"
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
"Especifique una lista de direcciones de correo electrónico (separadas por "
|
||||
"comas) de las personas a las que desea notificar sobre la creación de este "
|
||||
"proyecto. Les enviaremos un correo electrónico con el enlace de invitación."
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Compartir identificador y código"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"Puede compartir el identificador del proyecto y el código privado por "
|
||||
"cualquier medio de comunicación.<br />Cualquier persona con el código "
|
||||
"privado tendrá acceso al proyecto completo, incluido el cambio de "
|
||||
"configuraciones como el código privado o la dirección de correo electrónico "
|
||||
"del proyecto, o incluso la eliminación completa. proyecto."
|
||||
"cualquier medio de comunicación."
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "Identificador:"
|
||||
|
||||
msgid "Private code:"
|
||||
msgstr "Código privado:"
|
||||
msgid "Share the Link"
|
||||
msgstr "Comparte el enlace"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgstr "el código privado se definió cuando creaste el proyecto"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
"Puedes compartir directamente el siguiente enlace a través de tu medio "
|
||||
"preferido"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Enviar por correo electrónico"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"Especifique una lista (separada por comas) de las direcciones de correo "
|
||||
"electrónico a las que desea notificar acerca de la\n"
|
||||
"creación de este proyecto de gestión presupuestaria y les enviaremos un "
|
||||
"correo electrónico para usted."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "¿Quién paga?"
|
||||
|
@ -1072,96 +1052,3 @@ msgstr "Período"
|
|||
|
||||
#~ msgid "People to notify"
|
||||
#~ msgstr "Personas a notificar"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Importar"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Cantidad pagada"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Las facturas no pueden ser nulas"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "El identificador del proyecto es %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "JSON inválido"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "¿Estás segura?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "Importar JSON"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>El historial de este "
|
||||
#~ "proyecto ha sido desactivado. Nuevas "
|
||||
#~ "operaciones no apareceran a continuacion. "
|
||||
#~ "El historial se puede agregar</i> \n"
|
||||
#~ " <a href=\"%(url)s\">en la página de ajustes</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Este registro muestra la "
|
||||
#~ "actividad previa a la desactivación del"
|
||||
#~ " historial del proyecto. Use la "
|
||||
#~ "opción \n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">Eliminar historial del "
|
||||
#~ "proyecto</a> para borrarlo.</i></p>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "Enviar invitaciones"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "enseñar"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Editar el proyecto"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "Probablemente quieras"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "agregar participantes"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
#~ "Puede compartir el identificador del "
|
||||
#~ "proyecto y el código privado por "
|
||||
#~ "cualquier medio de comunicación."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "Comparte el enlace"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
#~ "Puedes compartir directamente el siguiente "
|
||||
#~ "enlace a través de tu medio "
|
||||
#~ "preferido"
|
||||
|
|
BIN
ihatemoney/translations/fa/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/fa/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -1,201 +1,179 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2024-05-23 03:01+0000\n"
|
||||
"Last-Translator: Yamin Siahmargooei <yamin8000@yahoo.com>\n"
|
||||
"Language-Team: Persian <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/fa/>\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language: fa\n"
|
||||
"Language-Team: none\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 5.6-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
msgstr "مقدار یا عبارت نامعتبر. فقط اعداد و عملیاتهای + - * / مجاز هستند."
|
||||
msgstr ""
|
||||
|
||||
msgid "Project name"
|
||||
msgstr "نام پروژه"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "کد خصوصی جدید"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "کد خصوصی جدید"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter a new code if you want to change it"
|
||||
msgstr "اگر مایل به تغییر هستید یه کد جدید وارد کنید"
|
||||
msgstr ""
|
||||
|
||||
msgid "Email"
|
||||
msgstr "ایمیل"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable project history"
|
||||
msgstr "فعال کردن تاریخچهی پروژه"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use IP tracking for project history"
|
||||
msgstr "برای تاریخچهی پروژه از ردیابی آدرس IP استفاده شود"
|
||||
msgstr ""
|
||||
|
||||
msgid "Default Currency"
|
||||
msgstr "واحد پولی پیش فرض"
|
||||
msgstr ""
|
||||
|
||||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr "تنظیم واحد پولی پیش فرض امکان تبدیل ارز بین قبضها رو فراهم میکنه"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "خطای ناشناخته"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "کد خصوصی نامعتبر."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
"این پروژه نمیتونه به صورت «بدون واحد پولی» تنظیم بشه چون شامل قبوض با "
|
||||
"ارزهای مختلفه."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "شناسه پروژه"
|
||||
msgstr ""
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "کد خصوصی"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "ساخت پروژه"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"A project with this identifier (\"%(project)s\") already exists. Please "
|
||||
"choose a new identifier"
|
||||
msgstr ""
|
||||
"پروژهای با شناسهی (\"%(project)s\") از قبل وجود داره. لطفا یه شناسهی "
|
||||
"جدید وارد کن"
|
||||
|
||||
msgid "Which is a real currency: Euro or Petro dollar?"
|
||||
msgstr "کدوم یکی واقعا واحد پولیه: یورو یا دلار نفتی؟"
|
||||
msgstr ""
|
||||
|
||||
msgid "euro"
|
||||
msgstr "یورو"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please, validate the captcha to proceed."
|
||||
msgstr "لطفا برای ادامه کپچا رو تایید کن."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "کد خصوصی رو برای تایید حذف وارد کن"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr ""
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "بیا تو"
|
||||
msgstr ""
|
||||
|
||||
msgid "Admin password"
|
||||
msgstr "گذرواژهی مدیر"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send me the code by email"
|
||||
msgstr "کد رو برام ایمیل کن"
|
||||
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 "When?"
|
||||
msgstr "چه زمانی؟"
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
msgid "What?"
|
||||
msgstr "چی؟"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "چه کسی پرداخت کرد؟"
|
||||
msgid "Payer"
|
||||
msgstr ""
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "چقدر؟"
|
||||
msgid "Amount paid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "واحد پولی"
|
||||
msgstr ""
|
||||
|
||||
msgid "External link"
|
||||
msgstr "لینک خارجی"
|
||||
msgstr ""
|
||||
|
||||
msgid "A link to an external document, related to this bill"
|
||||
msgstr "یه لینک به سند خارجی به این قبض مربوطه"
|
||||
msgstr ""
|
||||
|
||||
msgid "For whom?"
|
||||
msgstr "برای کی؟"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit"
|
||||
msgstr "ثبت"
|
||||
msgstr ""
|
||||
|
||||
msgid "Submit and add a new one"
|
||||
msgstr "ثبت و اضافه کردن جدید"
|
||||
|
||||
#, python-format
|
||||
msgid "Project default: %(currency)s"
|
||||
msgstr "پیش فرض پروژه: %(currency)s"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "نام"
|
||||
|
||||
msgid "Weights should be positive"
|
||||
msgstr "وزن باید مثبت باشه"
|
||||
|
||||
msgid "Weight"
|
||||
msgstr "وزن"
|
||||
|
||||
msgid "Add"
|
||||
msgstr "اضافه"
|
||||
|
||||
msgid "The participant name is invalid"
|
||||
msgstr "نام شرکت کننده نامعتبره"
|
||||
|
||||
msgid "This project already have this participant"
|
||||
msgstr "این شرکت کننده از قبل عضو پروژه هست"
|
||||
|
||||
msgid "People to notify"
|
||||
msgstr "افرادی که براشون نوتیفیکیشن ارسال میشه"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "ارسال دعوت نامه ها"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "ایمیل %(email)s نامعتبره"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "خروج"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgid "Project default: %(currency)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr ""
|
||||
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Weights should be positive"
|
||||
msgstr ""
|
||||
|
||||
msgid "Weight"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
msgid "The participant name is invalid"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project already have this participant"
|
||||
msgstr ""
|
||||
|
||||
msgid "People to notify"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send invites"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr ""
|
||||
|
||||
#. List with two items only
|
||||
|
@ -215,7 +193,7 @@ msgid "{start_object}, {next_object}"
|
|||
msgstr ""
|
||||
|
||||
msgid "No Currency"
|
||||
msgstr "بدون واحد پولی"
|
||||
msgstr ""
|
||||
|
||||
#. Form error with only one error
|
||||
msgid "{prefix}: {error}"
|
||||
|
@ -225,18 +203,22 @@ msgstr ""
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
msgstr "گذرواژهی مدیر صحیح نیست. فقط %(num)d بار دیگه میشه سعی کنی."
|
||||
msgstr ""
|
||||
|
||||
msgid "Provided token is invalid"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr ""
|
||||
|
@ -246,9 +228,14 @@ msgid ""
|
|||
"still use the project normally."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
|
||||
msgid "No token provided"
|
||||
|
@ -263,14 +250,10 @@ msgstr ""
|
|||
msgid "Password successfully reset."
|
||||
msgstr ""
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -278,18 +261,12 @@ msgid ""
|
|||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
|
@ -297,7 +274,10 @@ msgstr ""
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -340,10 +320,6 @@ msgstr ""
|
|||
msgid "The bill has been modified"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr ""
|
||||
|
||||
|
@ -404,7 +380,7 @@ msgstr ""
|
|||
msgid "edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete project"
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "show"
|
||||
|
@ -419,12 +395,20 @@ msgstr ""
|
|||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgstr "ساخت پروژه"
|
||||
msgid "Delete project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr ""
|
||||
|
@ -450,27 +434,18 @@ msgstr ""
|
|||
msgid "Privacy Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save changes"
|
||||
msgid "Edit the project"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr ""
|
||||
|
||||
|
@ -489,6 +464,9 @@ msgstr ""
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
|
@ -553,18 +531,23 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -575,18 +558,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
|
||||
|
@ -648,15 +631,9 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "پرداخت کننده"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
msgid "Date"
|
||||
msgstr "تاریخ"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr ""
|
||||
|
@ -757,9 +734,6 @@ msgstr ""
|
|||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -769,8 +743,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
|
@ -782,7 +755,7 @@ msgstr ""
|
|||
msgid "Documentation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -804,21 +777,30 @@ msgstr ""
|
|||
msgid "Invite people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "When?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr ""
|
||||
|
||||
msgid "For what?"
|
||||
msgstr ""
|
||||
|
||||
msgid "How much?"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr ""
|
||||
|
@ -827,19 +809,19 @@ msgstr ""
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "No bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add the first participant"
|
||||
msgid "add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "add participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password reminder"
|
||||
|
@ -862,49 +844,31 @@ msgstr ""
|
|||
msgid "Invite people to join this project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgid "Share the Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "کد خصوصی"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
|
@ -979,116 +943,3 @@ msgstr ""
|
|||
#~ msgid "Participants to notify"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import previously exported JSON file"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "قبضها نمیتونند تهی باشن"
|
||||
|
||||
#~ msgid "Too many failed login attempts, please retry later."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ 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 ""
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Sorry, there was an error while "
|
||||
#~ "trying to send the invitation emails."
|
||||
#~ " Please check the email configuration "
|
||||
#~ "of the server or contact the "
|
||||
#~ "administrator."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "فرستادن دعوت نامه"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add a bill"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email for you."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email with the invitation "
|
||||
#~ "link."
|
||||
#~ msgstr ""
|
||||
|
|
BIN
ihatemoney/translations/fr/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/fr/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -7,9 +7,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2023-07-29 13:07+0000\n"
|
||||
"Last-Translator: Baptiste <weblate@bitsofnetworks.org>\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2023-01-29 15:17+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"
|
||||
|
@ -17,13 +17,9 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.0-dev\n"
|
||||
"X-Generator: Weblate 4.16-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Vous venez de créer « %(project)s » pour partager vos dépenses"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -34,12 +30,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nom de projet"
|
||||
|
||||
msgid "Current private code"
|
||||
msgstr "Code d’accès actuel"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr "Entrez le code d'accès existant pour éditer le projet"
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Nouveau code d’accès"
|
||||
|
||||
|
@ -63,12 +53,6 @@ msgstr ""
|
|||
"Choisir une devise par défaut permet d'activer la conversion de devises "
|
||||
"entre les factures"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Erreur inconnue"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Code d’accès invalide."
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
|
@ -76,8 +60,11 @@ msgstr ""
|
|||
"Ce projet ne peut pas être sans devise car il contient des factures "
|
||||
"utilisant des devises différentes."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr "Compatible avec Cospend"
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importer un fichier JSON précédemment exporté"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Identifiant du projet"
|
||||
|
@ -97,7 +84,7 @@ msgstr ""
|
|||
"choisir un autre"
|
||||
|
||||
msgid "Which is a real currency: Euro or Petro dollar?"
|
||||
msgstr "Quelle est la vraie monnaie : Euro ou Petrodollar ?"
|
||||
msgstr "Euro ou Petrodollar ?"
|
||||
|
||||
msgid "euro"
|
||||
msgstr "euro"
|
||||
|
@ -108,6 +95,12 @@ msgstr "Merci de valider le captcha avant de continuer."
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Entrez le code d'accès pour confirmer la suppression"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Erreur inconnue"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Code d’accès invalide."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Entrer"
|
||||
|
||||
|
@ -132,17 +125,17 @@ msgstr "Confirmation du mot de passe"
|
|||
msgid "Reset password"
|
||||
msgstr "Réinitialiser le mot de passe"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Quand ?"
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Quoi ?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Qui a payé ?"
|
||||
msgid "Payer"
|
||||
msgstr "Payeur"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Combien ?"
|
||||
msgid "Amount paid"
|
||||
msgstr "Montant"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Devise"
|
||||
|
@ -166,6 +159,9 @@ msgstr "Valider et ajouter une autre facture"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "Devise du projet : %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Le montant d’une facture ne peut pas être vide"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
|
@ -179,7 +175,7 @@ msgid "Add"
|
|||
msgstr "Ajouter"
|
||||
|
||||
msgid "The participant name is invalid"
|
||||
msgstr "Le nom du participant est incorrect"
|
||||
msgstr "Participant⋅e %(name)s réactivé⋅e"
|
||||
|
||||
msgid "This project already have this participant"
|
||||
msgstr "Ce⋅tte membre existe déjà pour ce projet"
|
||||
|
@ -187,27 +183,13 @@ msgstr "Ce⋅tte membre existe déjà pour ce projet"
|
|||
msgid "People to notify"
|
||||
msgstr "Personnes à inviter"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgid "Send invites"
|
||||
msgstr "Envoyer les invitations"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "L’email %(email)s est invalide"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Se déconnecter"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr "Veuillez vérifier la configuration email du serveur."
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"Veuillez vérifier la configuration email du serveur ou contacter "
|
||||
"l’administrateur⋅ice : %(admin_email)s"
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} et {dual_object_1}"
|
||||
|
@ -235,8 +217,8 @@ msgstr "{prefix} : {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix} :<br />{errors}"
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgstr "Trop d'échecs d’authentification successifs."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "Trop d'échecs d’authentification successifs, veuillez réessayer plus tard."
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
|
@ -250,6 +232,10 @@ msgstr "Ce jeton est invalide"
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "Le code d'accès n’est pas correct"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Vous venez de créer « %(project)s » pour partager vos dépenses"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "Un courriel de rappel vient de vous être envoyé"
|
||||
|
||||
|
@ -261,12 +247,18 @@ msgstr ""
|
|||
"s’est produite. Il est toujours possible d’utiliser le projet "
|
||||
"normalement."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "L’identifiant de ce projet est %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"Désolé, une erreur s’est produite lors de l’envoi du courriel contenant "
|
||||
"les instructions de réinitialisation de mot de passe."
|
||||
"Désolé, une erreur s’est produite lors de l’envoi du courriel contenant les "
|
||||
"instructions de réinitialisation de mot de passe. Veuillez vérifier la "
|
||||
"configuration des courriels du serveur ou contacter l’administrateur⋅ice."
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "Aucun jeton n’a été fourni"
|
||||
|
@ -280,33 +272,23 @@ msgstr "Projet inconnu"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "Le mot de passe a été changé avec succès."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr "Les paramètres du projet ont bien été enregistrés."
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Le projet a été correctement importé"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr "Erreur lors de la lecture du fichier CSV"
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr "Attribut manquant : %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr "Le fichier JSON est invalide"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr "Impossible d'ajouter plusieurs devises à un projet sans devise par défaut"
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Le projet a été correctement importé"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "Projet supprimé"
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr "Erreur lors de la suppression du projet"
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr "Impossible de se déconnecter"
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "Vous avez été invité⋅e à partager vos dépenses pour %(project)s"
|
||||
|
@ -314,10 +296,14 @@ msgstr "Vous avez été invité⋅e à partager vos dépenses pour %(project)s"
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "Vos invitations ont bien été envoyées"
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Désolé, une erreur s’est produite lors de l’envoi du courriel "
|
||||
"d’invitation."
|
||||
"Désolé, une erreur s’est produite lors de l’envoi du courriel d’invitation. "
|
||||
"Veuillez vérifier la configuration des courriels du serveur ou contacter "
|
||||
"l’administrateur⋅ice."
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
|
@ -338,8 +324,8 @@ msgid ""
|
|||
"Participant '%(name)s' has been deactivated. It will still appear in the "
|
||||
"list until its balance reach zero."
|
||||
msgstr ""
|
||||
"« %(name)s » a été désactivé⋅e. Il⋅elle continuera d’apparaître jusqu'à "
|
||||
"ce que son solde soit nul."
|
||||
"« %(name)s » a été désactivé⋅e. Il⋅elle continuera d’apparaître jusqu'à ce "
|
||||
"que son solde soit nul."
|
||||
|
||||
#, python-format
|
||||
msgid "Participant '%(name)s' has been removed"
|
||||
|
@ -361,10 +347,6 @@ msgstr "La facture a été supprimée"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "La facture a été modifiée"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr "La langue %(lang)s n'est pas prise en charge"
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr "Erreur lors de la suppression de l'historique du projet"
|
||||
|
||||
|
@ -425,8 +407,8 @@ msgstr "Actions"
|
|||
msgid "edit"
|
||||
msgstr "éditer"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "Supprimer le projet"
|
||||
msgid "delete"
|
||||
msgstr "supprimer"
|
||||
|
||||
msgid "show"
|
||||
msgstr "voir"
|
||||
|
@ -440,11 +422,20 @@ msgstr "Télécharger l’application mobile"
|
|||
msgid "Get it on"
|
||||
msgstr "Télécharger depuis"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr "Êtes-vous sûr⋅e ?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Éditer le projet"
|
||||
|
||||
msgid "Import project"
|
||||
msgstr "Importer le projet"
|
||||
msgid "Delete project"
|
||||
msgstr "Supprimer le projet"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "Importer le fichier JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Choisir un fichier"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Télécharger les données du projet"
|
||||
|
@ -470,27 +461,18 @@ msgstr "Annuler"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Vie privée"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr "Sauvegarder les modifications"
|
||||
msgid "Edit the project"
|
||||
msgstr "Éditer le projet"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr "Cela supprimera toutes les factures et participant⋅es du projet !"
|
||||
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Importer un projet précédemment exporté"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Choisir un fichier"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Éditer cette facture"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "Ajouter une facture"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr "Les opérations simples sont possibles, par exemple (18+36.2)/3"
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Tout le monde"
|
||||
|
||||
|
@ -504,11 +486,14 @@ msgid "Add participant"
|
|||
msgstr "Ajouter un⋅e participant⋅e"
|
||||
|
||||
msgid "Edit this participant"
|
||||
msgstr "Modifier un⋅e participant⋅e"
|
||||
msgstr "Ajouter un⋅e participant⋅e"
|
||||
|
||||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "marie@site.com, jean.dupont@exemple.com"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Envoyer les invitations"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Télécharger"
|
||||
|
||||
|
@ -573,31 +558,45 @@ msgstr ""
|
|||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: added %(owers_list_str)s to owers list"
|
||||
msgstr "Facture %(name)s : %(owers_list_str)s ajouté à la liste des débiteur⋅ices"
|
||||
msgstr ""
|
||||
"Facture %(name)s : %(owers_list_str)s ajouté à la liste des débiteur⋅ices"
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
"Facture %(name)s : %(owers_list_str)s supprimé de la liste des "
|
||||
"débiteur⋅ices"
|
||||
"Facture %(name)s : %(owers_list_str)s supprimé de la liste des débiteur⋅ices"
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"L'historique de ce projet est désactivé. Les nouvelles actions "
|
||||
"n'apparaîtront pas ci-dessous."
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "Vous pouvez activer l'historique dans les paramètres."
|
||||
"\n"
|
||||
" <i>L'historique de ce projet a été désactivé. Les nouvelles "
|
||||
"actions n'apparaîtront pas ci-dessous. Vous pouvez réactiver l'historique"
|
||||
" du projet dans les </i>\n"
|
||||
" <a href=\"%(url)s\">paramètres du projet</a>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Le tableau ci-dessous affiche uniquement les actions enregistrées avant "
|
||||
"que l'historique n'ait été désactivé pour ce projet."
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Vous pouvez supprimer l'historique du projet pour les enlever."
|
||||
"\n"
|
||||
" <i>Le tableau ci-dessous liste les actions enregistrées avant la "
|
||||
"désactivation de l'historique du projet. Vous pouvez\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
"target=\"#confirm-erase\">supprimer l'historique du projet</a> pour les "
|
||||
"supprimer.</i></p>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
|
@ -609,18 +608,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "Supprimer toutes les adresses IP enregistrées"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Aucune adresse IP à supprimer"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Supprimer les adresses IP enregistrées"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "Aucun historique à supprimer"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Supprimer les entrées de l'historique du projet"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Aucune adresse IP à supprimer"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Supprimer les adresses IP enregistrées"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Heure"
|
||||
|
||||
|
@ -629,8 +628,8 @@ msgstr "Évènement"
|
|||
|
||||
msgid "IP address recording can be enabled on the settings page"
|
||||
msgstr ""
|
||||
"Vous pouvez activer l'enregistrement des adresses IP dans les paramètres "
|
||||
"de la page"
|
||||
"Vous pouvez activer l'enregistrement des adresses IP dans les paramètres de "
|
||||
"la page"
|
||||
|
||||
msgid "IP address recording can be disabled on the settings page"
|
||||
msgstr ""
|
||||
|
@ -688,15 +687,9 @@ msgstr ""
|
|||
"Participant⋅e %(name)s : nombre de parts changé de %(old_weight)s en "
|
||||
"%(new_weight)s"
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Payeur"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Montant"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Montant en %(currency)s"
|
||||
|
@ -799,9 +792,6 @@ msgstr "Historique"
|
|||
msgid "Settings"
|
||||
msgstr "Options"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr "Flux RSS"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Autres projets :"
|
||||
|
||||
|
@ -811,9 +801,8 @@ msgstr "aller à"
|
|||
msgid "Dashboard"
|
||||
msgstr "Tableau de bord"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr "Veuillez réessayer après %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr "Se déconnecter"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
@ -824,7 +813,7 @@ msgstr "Application mobile"
|
|||
msgid "Documentation"
|
||||
msgstr "Documentation"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "Panneau d'administration"
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -846,21 +835,30 @@ msgstr "vous confirmez ?"
|
|||
msgid "Invite people"
|
||||
msgstr "Inviter des gens"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Factures suivantes"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Factures précédentes"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "Vous devriez commencer par ajouter des participant⋅es"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "Nouvelle facture"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Factures suivantes"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Factures précédentes"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Quand ?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Qui a payé ?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "Pour quoi ?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Combien ?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "Ajouté le %(date)s"
|
||||
|
@ -869,20 +867,20 @@ msgstr "Ajouté le %(date)s"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "Tout le monde sauf %(excluded)s"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "supprimer"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Pas encore de factures"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "Rien à lister pour le moment."
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgstr "Ajouter votre première facture"
|
||||
msgid "You probably want to"
|
||||
msgstr "Vous souhaitez sûrement"
|
||||
|
||||
msgid "Add the first participant"
|
||||
msgstr "Ajouter le premier participant ou la première participante"
|
||||
msgid "add a bill"
|
||||
msgstr "ajouter une facture"
|
||||
|
||||
msgid "add participants"
|
||||
msgstr "ajouter des participant⋅es"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "Rappel du code d’accès"
|
||||
|
@ -906,62 +904,36 @@ msgstr "Changez votre code d'accès"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "Invitez des personnes à rejoindre ce projet"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr "Partager un lien d'invitation"
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
"Pour inviter des personnes dans ce projet, vous pouvez leur donner le "
|
||||
"lien d'invitation ci-dessous.<br />Elles pourront ainsi accéder au "
|
||||
"projet, gérer les participants, ajouter/modifier/supprimer des factures. "
|
||||
"En revanche, elles ne pourront pas modifier des paramètres importants "
|
||||
"tels que le code d'accès ou supprimer le projet."
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr "Scannez le QR code"
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr "Utilisez un appareil mobile avec une application compatible."
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Envoyer par email(s)"
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
"Entrez les emails des personnes avec qui vous souhaitez partager ce projet ("
|
||||
"en séparant les adresses emails avec des virgules). Nous leur enverrons un "
|
||||
"mail avec le lien d'invitation."
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Partager l'identifiant et le code"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"Vous pouvez partager l'identifiant de ce projet et le code d'accès par "
|
||||
"tout moyen de votre choix.<br />Une personne possédant le code d'accès "
|
||||
"aura un accès complet au projet, y compris pour changer le code d'accès "
|
||||
"ou l'adresse email associée au projet, voire même supprimer complètement "
|
||||
"le projet."
|
||||
"d'autres moyens."
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "Identifiant :"
|
||||
|
||||
msgid "Private code:"
|
||||
msgstr "Code d’accès :"
|
||||
msgid "Share the Link"
|
||||
msgstr "Partagez le lien"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgstr "le code d'accès a été défini lorsque vous avez créé le projet"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr "Vous pouvez directement partager le lien suivant"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Envoyer par email(s)"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"Entrez les emails des personnes avec qui vous souhaitez partager ce projet, "
|
||||
"nous leur enverrons un lien d'invitation."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Qui doit payer ?"
|
||||
|
@ -1297,94 +1269,3 @@ msgstr "Période"
|
|||
|
||||
#~ msgid "Participants to notify"
|
||||
#~ msgstr "ajouter des participant⋅e⋅s"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Importer"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Montant"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Le montant d’une facture ne peut pas être vide"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "L’identifiant de ce projet est %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "Le fichier JSON est invalide"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "Êtes-vous sûr⋅e ?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "Importer le fichier JSON"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>L'historique de ce projet "
|
||||
#~ "a été désactivé. Les nouvelles actions"
|
||||
#~ " n'apparaîtront pas ci-dessous. Vous "
|
||||
#~ "pouvez réactiver l'historique du projet "
|
||||
#~ "dans les </i>\n"
|
||||
#~ " <a href=\"%(url)s\">paramètres du projet</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Le tableau ci-dessous "
|
||||
#~ "liste les actions enregistrées avant la"
|
||||
#~ " désactivation de l'historique du projet."
|
||||
#~ " Vous pouvez\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">supprimer l'historique du"
|
||||
#~ " projet</a> pour les supprimer.</i></p>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "Envoyer les invitations"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "voir"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Éditer le projet"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "Vous souhaitez sûrement"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "ajouter des participant⋅es"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
#~ "Vous pouvez partager l'identifiant de ce"
|
||||
#~ " projet et le code d'accès par "
|
||||
#~ "d'autres moyens."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "Partagez le lien"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr "Vous pouvez directement partager le lien suivant"
|
||||
|
|
BIN
ihatemoney/translations/he/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/he/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -1,24 +1,19 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2023-07-24 07:07+0000\n"
|
||||
"Last-Translator: Nati Lintzer <nlintzer@gmail.com>\n"
|
||||
"POT-Creation-Date: 2022-05-22 20:21+0200\n"
|
||||
"PO-Revision-Date: 2022-11-07 10:07+0000\n"
|
||||
"Last-Translator: Raanan Katz <raakatz97@gmail.com>\n"
|
||||
"Language-Team: Hebrew <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/he/>\n"
|
||||
"Language: he\n"
|
||||
"Language-Team: Hebrew <https://hosted.weblate.org/projects/i-hate-money/i"
|
||||
"-hate-money/he/>\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 "
|
||||
"&& n % 10 == 0) ? 2 : 3))\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"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "יצרת את פרויקט '%(project)s' כדי לחלוק את הוצאותיך"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
|
||||
"n % 10 == 0) ? 2 : 3));\n"
|
||||
"X-Generator: Weblate 4.14.2\n"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
|
@ -28,13 +23,6 @@ msgstr "כמות או ביטוי לא תקין. יש להזין רק מספרי
|
|||
msgid "Project name"
|
||||
msgstr "שם הפרויקט"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "קוד פרטי חדש"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "קוד פרטי חדש"
|
||||
|
||||
|
@ -56,21 +44,17 @@ msgstr "מטבע ברירת המחדל"
|
|||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr "בחירת מטבע ברירת מחדל מאפשרת המרת מטבע בין חשבונות"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "שגיאה לא ידועה"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "קוד פרטי לא תקין."
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
"בפרויקט זה לא ניתן להגדיר 'ללא מטבע' מכיוון שהוא כולל חשבונות במספר "
|
||||
"מטבעות."
|
||||
"בפרויקט זה לא ניתן להגדיר 'ללא מטבע' מכיוון שהוא כולל חשבונות במספר מטבעות."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr ""
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "ייבא קובץ JSON מיוצא"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "ייבא"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "מזהה פרויקט"
|
||||
|
@ -99,6 +83,12 @@ msgstr "אנא אמת את ה-Captcha כדי להמשיך."
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "הזן את הקוד הפרטי כדי לאשר מחיקה"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "שגיאה לא ידועה"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "קוד פרטי לא תקין."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "היכנס"
|
||||
|
||||
|
@ -123,17 +113,17 @@ msgstr "אימות סיסמה"
|
|||
msgid "Reset password"
|
||||
msgstr "איפוס סיסמה"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "מתי?"
|
||||
msgid "Date"
|
||||
msgstr "תאריך"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "מה?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "מי שילם?"
|
||||
msgid "Payer"
|
||||
msgstr "משלם"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "כמה?"
|
||||
msgid "Amount paid"
|
||||
msgstr "כמות ששולמה"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "מטבע"
|
||||
|
@ -157,6 +147,9 @@ msgstr "הזן והוסף אחד חדש"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "ברירת המחדל בפרויקט: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "חשבונות לא יכולים להיות ריקים"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "שם"
|
||||
|
||||
|
@ -178,27 +171,13 @@ msgstr "המשתתף כבר נמצא בפרויקט זה"
|
|||
msgid "People to notify"
|
||||
msgstr "אנשים להתריע להם"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "שלח את ההזמנות"
|
||||
msgid "Send invites"
|
||||
msgstr "שלח הזמנות"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "כתובת הדוא\"ל %(email)s אינה תקינה"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "להתנתק"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"מצטערים, אך אירעה שגיאה בעת ששלחנו לכם את המייל עם הוראות איפוס הסיסמה. "
|
||||
"אנא בדקו את הגדרות המייל בשרת או פנו למנהל השרת:%(admin_email)s"
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} ו- {dual_object_1}"
|
||||
|
@ -226,8 +205,8 @@ msgstr "{prefix}: {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:<br />{errors}"
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgstr "יותר מדי ניסיון התחברות כושלים."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "יותר מדי ניסיון התחברות כושלים, אנא נסו שם מאוחר יותר."
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
|
@ -239,6 +218,10 @@ msgstr "הטוקן שהוזן אינו תקין"
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "קוד פרטי זה שגוי"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "יצרת את פרויקט '%(project)s' כדי לחלוק את הוצאותיך"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "דוא\"ל תזכורת נשלח אליך כעת"
|
||||
|
||||
|
@ -246,13 +229,17 @@ 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 "מזהה הפרויקט הוא %(project)s"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"מצטערים, אך אירעה שגיאה בעת ששלחנו לכם את המייל עם הוראות איפוס הסיסמה. "
|
||||
"בבקשה תבדקו את הגדרות המייל בשרת או פנו למנהל השרת."
|
||||
|
@ -269,33 +256,23 @@ msgstr "פרויקט לא ידוע"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "הסיסמה אופסה בהצלחה."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "הפרויקט הועלה בהצלחה"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr "תכונה חסרה:%(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr "פורמט JSON לא תקין"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr "לא ניתן להוסיף חשבונות במספר מטבעות לפרויקט ללא מטבע ברירת מחדל"
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "הפרויקט הועלה בהצלחה"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "הפרויקט נמחק בהצלחה"
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr "שגיאה במחיקת הפרויקט"
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr "לא ניתן להתנתק"
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "הוזמנת לשתף הוצאות בפרויקט %(project)s"
|
||||
|
@ -303,8 +280,11 @@ msgstr "הוזמנת לשתף הוצאות בפרויקט %(project)s"
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "ההזמנות שלך נשלחו"
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgstr "מצטערים, אך אירעה שגיאה בעת שליחת ההזמנות."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
|
@ -335,22 +315,17 @@ msgid "Participant '%(name)s' has been modified"
|
|||
msgstr ""
|
||||
|
||||
msgid "The bill has been added"
|
||||
msgstr "החשבון נוסף"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting bill"
|
||||
msgstr "שגיאה בעת מחיקת החשבון"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "The bill has been deleted"
|
||||
msgstr "ההוצאה נמחקה"
|
||||
msgstr ""
|
||||
|
||||
msgid "The bill has been modified"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr "%(lang)s אינה שפה נתמכת"
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr "שגיאה במחיקת הסטוריית הפרויקט"
|
||||
|
||||
|
@ -364,7 +339,7 @@ msgid "Deleted recorded IP addresses in project history."
|
|||
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 "כנראה שהדבר הטוב ביותר לעשות הוא לחזור לעמוד הראשי."
|
||||
|
@ -388,7 +363,7 @@ msgid "?"
|
|||
msgstr "?"
|
||||
|
||||
msgid "Create a new project"
|
||||
msgstr "צור פרויקט חדש"
|
||||
msgstr "צור פרויקט"
|
||||
|
||||
msgid "Project"
|
||||
msgstr "פרויקט"
|
||||
|
@ -409,10 +384,10 @@ msgid "Actions"
|
|||
msgstr "פעולות"
|
||||
|
||||
msgid "edit"
|
||||
msgstr "ערוך"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "מחק פרויקט"
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "show"
|
||||
msgstr ""
|
||||
|
@ -426,11 +401,20 @@ msgstr "הורד אפליקציית מובייל"
|
|||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import project"
|
||||
msgstr "ייבא פרוייקטים"
|
||||
msgid "Delete project"
|
||||
msgstr "מחק פרויקט"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "ייבא JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "בחר קובץ"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr ""
|
||||
|
@ -456,50 +440,44 @@ msgstr ""
|
|||
msgid "Privacy Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save changes"
|
||||
msgid "Edit the project"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported project"
|
||||
msgstr "ייבא פרוייקט קודם מיוצא"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "בחר קובץ"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "ערוך את החשבון"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "הוסף חשבון"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "כולם"
|
||||
msgstr ""
|
||||
|
||||
msgid "No one"
|
||||
msgstr "אף אחד"
|
||||
msgstr ""
|
||||
|
||||
msgid "More options"
|
||||
msgstr "יותר אפשרויות"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add participant"
|
||||
msgstr "הוסף משתתפים"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this participant"
|
||||
msgstr "ערוך את המשתתף"
|
||||
msgstr ""
|
||||
|
||||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download"
|
||||
msgstr "הורד"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disabled Project History"
|
||||
msgstr "היסטורית פרויקט מושבתת"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disabled Project History & IP Address Recording"
|
||||
msgstr ""
|
||||
|
@ -559,18 +537,23 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -581,18 +564,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr "זמן"
|
||||
|
||||
|
@ -654,15 +637,9 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "משלם"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "סכום"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "תאריך"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr ""
|
||||
|
@ -755,7 +732,7 @@ msgid "Projects"
|
|||
msgstr "פרויקטים"
|
||||
|
||||
msgid "Start a new project"
|
||||
msgstr "התחל פרוייקט חדש"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr "הסטוריה"
|
||||
|
@ -763,32 +740,28 @@ msgstr "הסטוריה"
|
|||
msgid "Settings"
|
||||
msgstr "הגדרות"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "פרויקטים אחרים:"
|
||||
|
||||
msgid "switch to"
|
||||
msgstr "שנה ל"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr "קוד"
|
||||
|
||||
msgid "Mobile Application"
|
||||
msgstr "יישום לנייד"
|
||||
msgstr ""
|
||||
|
||||
msgid "Documentation"
|
||||
msgstr "דוקומנטציה"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -798,33 +771,42 @@ msgid "\"I hate money\" is free software"
|
|||
msgstr "\"אני שונא כסף\" היא תוכנה חינמית"
|
||||
|
||||
msgid "you can contribute and improve it!"
|
||||
msgstr "אתה יכול לתרום ולשפר אותו!"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(amount)s each"
|
||||
msgstr ""
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "האם אתה בטוח?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invite people"
|
||||
msgstr "הזמן אנשים"
|
||||
msgstr ""
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "הוצאות ישנות"
|
||||
msgstr ""
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "כדאי להתחיל בהוספת משתמשים"
|
||||
msgid "When?"
|
||||
msgstr "מתי?"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "הוסף הוצאה חדשה"
|
||||
msgid "Who paid?"
|
||||
msgstr "מי שילם?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "עבור מה?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "כמה?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "נוסף בתאריך %(date)s"
|
||||
|
@ -833,21 +815,20 @@ msgstr "נוסף בתאריך %(date)s"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "delete"
|
||||
msgstr "מחק"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "אין הוצאות"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgstr "ערוך את המשתתף"
|
||||
msgid "add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "add participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "תזכורת סיסמה"
|
||||
|
@ -855,7 +836,7 @@ msgstr "תזכורת סיסמה"
|
|||
msgid ""
|
||||
"A link to reset your password has been sent to you, please check your "
|
||||
"emails."
|
||||
msgstr "נשלח לחשבונך לינק לאיפוס הסיסמה, אנא בדוק את תיבת הדוא\"ל שלך."
|
||||
msgstr ""
|
||||
|
||||
msgid "Return to home page"
|
||||
msgstr "חזור לעמוד הבית"
|
||||
|
@ -864,54 +845,36 @@ msgid "Your projects"
|
|||
msgstr "הפרויקטים שלך"
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr "אפס את סיסמתך"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invite people to join this project"
|
||||
msgstr "הזמן אנשים להצטרף לפרויקט"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr "סרוק את הברקוד"
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr "השתמש במכשיר נייד עם יישום תואם."
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "שלח באמצעות דוא\"ל"
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "שתף מזהה וקוד"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
"communication means."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "מזהה:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "קוד פרטי"
|
||||
msgid "Share the Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
|
@ -924,7 +887,7 @@ msgid "Who?"
|
|||
msgstr "מי?"
|
||||
|
||||
msgid "Balance"
|
||||
msgstr "מאזן"
|
||||
msgstr ""
|
||||
|
||||
msgid "deactivate"
|
||||
msgstr ""
|
||||
|
@ -939,108 +902,7 @@ msgid "Spent"
|
|||
msgstr ""
|
||||
|
||||
msgid "Expenses by Month"
|
||||
msgstr "הוצאות לפי חודש"
|
||||
msgstr ""
|
||||
|
||||
msgid "Period"
|
||||
msgstr "תקופה"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "ייבא"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "כמות ששולמה"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "חשבונות לא יכולים להיות ריקים"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "מזהה הפרויקט הוא %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "פורמט JSON לא תקין"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Sorry, there was an error while "
|
||||
#~ "trying to send the invitation emails."
|
||||
#~ " Please check the email configuration "
|
||||
#~ "of the server or contact the "
|
||||
#~ "administrator."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "ייבא JSON"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "שלח הזמנות"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "אתה כנראה רוצה"
|
||||
|
||||
#~ msgid "add a bill"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "הוסף משתמשים"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr "אתה יכול לשתף את מזהה הפרויקט והקוד הפרטי באמצעות כל אמצעי תקשורת."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "שתף את הלינק"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr "אתה יכול לשתף ישירות את הלינק באמצעי המועדף עליך"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email for you."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email with the invitation "
|
||||
#~ "link."
|
||||
#~ msgstr ""
|
||||
|
||||
|
|
BIN
ihatemoney/translations/hi/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/hi/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2020-06-14 14:41+0000\n"
|
||||
"Last-Translator: raghupalash <singhpalash0@gmail.com>\n"
|
||||
"Language: hi\n"
|
||||
|
@ -15,10 +15,6 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "आपने अभी अभी अपने खर्चों को साझा करने के लिए '%(project)s' बनाया है"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -29,13 +25,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "परियोजना का नाम"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "निजी कोड"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "निजी कोड"
|
||||
|
@ -58,21 +47,16 @@ msgstr "डिफ़ॉल्ट मुद्रा"
|
|||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "अज्ञात परियोजना"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Invalid private code."
|
||||
msgstr "निजी कोड"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr ""
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "पूर्व में निर्यात की गई JSON फ़ाइल आयात करें"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "आयात"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "परियोजना पहचानकर्ता"
|
||||
|
@ -104,6 +88,14 @@ msgstr ""
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "अज्ञात परियोजना"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Invalid private code."
|
||||
msgstr "निजी कोड"
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "अंदर जाइये"
|
||||
|
||||
|
@ -128,17 +120,17 @@ msgstr "पासवर्ड पुष्टीकरण"
|
|||
msgid "Reset password"
|
||||
msgstr "पासवर्ड रीसेट"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "कब?"
|
||||
msgid "Date"
|
||||
msgstr "तारीख"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "क्या?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "किसने भुगतान किया?"
|
||||
msgid "Payer"
|
||||
msgstr "भुगतानकर्ता"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "कितना?"
|
||||
msgid "Amount paid"
|
||||
msgstr "भुगतान की गई राशि"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "मुद्रा"
|
||||
|
@ -162,6 +154,9 @@ msgstr "जमा करें और एक नया जोड़ें"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "प्रोजेक्ट डिफ़ॉल्ट:%(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "बिल शून्य नहीं हो सकते"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "नाम"
|
||||
|
||||
|
@ -185,27 +180,13 @@ msgstr "इस परियोजना में पहले से ही य
|
|||
msgid "People to notify"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "निमंत्रण भेजें"
|
||||
msgid "Send invites"
|
||||
msgstr "आमंत्रण भेजें"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "ईमेल %(email)s मान्य नहीं है"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "लॉग आउट"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"क्षमा करें, आमंत्रण ईमेल भेजने का प्रयास करते समय कोई त्रुटि हुई। कृपया "
|
||||
"सर्वर के ईमेल कॉन्फ़िगरेशन की जाँच करें या व्यवस्थापक से संपर्क करें।"
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr ""
|
||||
|
@ -233,8 +214,7 @@ msgstr ""
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "बहुत से विफल लॉगिन प्रयास, कृपया बाद में पुनः प्रयास करें।"
|
||||
|
||||
#, python-format
|
||||
|
@ -247,6 +227,10 @@ msgstr ""
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "यह निजी कोड सही नहीं है"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "आपने अभी अभी अपने खर्चों को साझा करने के लिए '%(project)s' बनाया है"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "आपको अभी एक अनुस्मारक ईमेल भेजा गया है"
|
||||
|
||||
|
@ -257,10 +241,14 @@ msgstr ""
|
|||
"हमने आपको एक अनुस्मारक ईमेल भेजने की कोशिश की, लेकिन कोई त्रुटि थी। आप "
|
||||
"अभी भी सामान्य रूप से प्रोजेक्ट का उपयोग कर सकते हैं।"
|
||||
|
||||
#, fuzzy
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "प्रोजेक्ट पहचानकर्ता %(project)s है"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"क्षमा करें, पासवर्ड रीसेट निर्देशों के साथ आपको एक ईमेल भेजते समय कोई "
|
||||
"त्रुटि हुई थी। कृपया सर्वर के ईमेल कॉन्फ़िगरेशन की जाँच करें या "
|
||||
|
@ -278,33 +266,23 @@ msgstr "अज्ञात परियोजना"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "पासवर्ड सफलतापूर्वक रीसेट हो गया है।"
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "प्रोजेक्ट सफलतापूर्वक अपलोड किया गया"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr ""
|
||||
msgid "Invalid JSON"
|
||||
msgstr "अमान्य JSON"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "प्रोजेक्ट सफलतापूर्वक अपलोड किया गया"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "प्रोजेक्ट सफलतापूर्वक हटा दिया गया"
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
|
@ -314,8 +292,10 @@ msgstr ""
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "आपके निमंत्रण भेज दिए गए हैं"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"क्षमा करें, आमंत्रण ईमेल भेजने का प्रयास करते समय कोई त्रुटि हुई। कृपया "
|
||||
"सर्वर के ईमेल कॉन्फ़िगरेशन की जाँच करें या व्यवस्थापक से संपर्क करें।"
|
||||
|
@ -362,10 +342,6 @@ msgstr "बिल को हटा दिया गया है"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "बिल को संशोधित कर दिया गया है"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Error deleting project history"
|
||||
msgstr "प्रोजेक्ट इतिहास सक्षम करें"
|
||||
|
@ -433,9 +409,8 @@ msgstr "कार्य"
|
|||
msgid "edit"
|
||||
msgstr "संपादित करें"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Delete project"
|
||||
msgstr "परियोजना संपादित करें"
|
||||
msgid "delete"
|
||||
msgstr "हटाइये"
|
||||
|
||||
msgid "show"
|
||||
msgstr "प्रदर्शन"
|
||||
|
@ -451,13 +426,23 @@ msgstr "मोबाइल एप्लीकेशन"
|
|||
msgid "Get it on"
|
||||
msgstr "अंदर जाइये"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Are you sure?"
|
||||
msgstr "आपको यकीन है?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "परियोजना संपादित करें"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgid "Delete project"
|
||||
msgstr "परियोजना संपादित करें"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "JSON को आयात करे"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "फ़ाइल चुनें"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "प्रोजेक्ट का डेटा डाउनलोड करें"
|
||||
|
||||
|
@ -482,28 +467,18 @@ msgstr "रद्द करें"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "प्राइवेसी सेटिंग्स"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr ""
|
||||
msgid "Edit the project"
|
||||
msgstr "प्रोजेक्ट संपादित करें"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "पूर्व में निर्यात की गई JSON फ़ाइल आयात करें"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "फ़ाइल चुनें"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "इस बिल को संपादित करें"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "बिल जोड़ें"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "सब"
|
||||
|
||||
|
@ -523,6 +498,9 @@ msgstr "प्रतिभागी जोड़ें"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "john.doe@example.com, mary.moe@site.com"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "निमंत्रण भेजें"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "डाउनलोड"
|
||||
|
||||
|
@ -594,21 +572,36 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "आईपी पता रिकॉर्डिंग को सेटिंग पेज पर सक्षम किया जा सकता है"
|
||||
"\n"
|
||||
" <i>इस प्रोजेक्ट में इतिहास अक्षम है। नई कार्रवाइयां नीचे "
|
||||
"दिखाई नहीं देंगी। आप इतिहास को यहाँ से सक्षम कर सकते हैं</i>\n"
|
||||
" <a href=\"%(url)s\">सेटिंग्स पृष्ठ</a>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "किसी ने शायद परियोजना के इतिहास को हटा दिया है।"
|
||||
"\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 "
|
||||
|
@ -620,18 +613,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "संग्रहीत IP पते हटाएं"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "मिटाने के लिए कोई IP पते नहीं हैं"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "संग्रहीत IP पते हटाएं"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "मिटाने के लिए कोई इतिहास नहीं है"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "प्रोजेक्ट इतिहास हटाएं"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "मिटाने के लिए कोई IP पते नहीं हैं"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "संग्रहीत IP पते हटाएं"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "समय"
|
||||
|
||||
|
@ -693,15 +686,9 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "भुगतानकर्ता"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "रकम"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "तारीख"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "%(currency)s में राशि"
|
||||
|
@ -804,9 +791,6 @@ msgstr "इतिहास"
|
|||
msgid "Settings"
|
||||
msgstr "सेटिंग्स"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "अन्य परियोजनाएँ :"
|
||||
|
||||
|
@ -816,9 +800,8 @@ msgstr "पर स्विच करें"
|
|||
msgid "Dashboard"
|
||||
msgstr "डैशबोर्ड"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr ""
|
||||
msgid "Logout"
|
||||
msgstr "लॉग आउट"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "कोड"
|
||||
|
@ -829,7 +812,7 @@ msgstr "मोबाइल एप्लीकेशन"
|
|||
msgid "Documentation"
|
||||
msgstr "प्रलेखन"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "व्यवस्थापन डैशबोर्ड"
|
||||
|
||||
#, fuzzy
|
||||
|
@ -852,21 +835,30 @@ msgstr "आपको यकीन है?"
|
|||
msgid "Invite people"
|
||||
msgstr "लोगों को निमंत्रण भेजें"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "नए बिल"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "पुराने बिल"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "शुरू करने के लिए प्रतिभागियों को जोड़ें"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "नया बिल जोड़ें"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "नए बिल"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "पुराने बिल"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "कब?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "किसने भुगतान किया?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "किस लिए?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "कितना?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "%(date)s पर जोड़ा गया"
|
||||
|
@ -875,22 +867,20 @@ msgstr "%(date)s पर जोड़ा गया"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "%(excluded)s को छोड़ के बाकी सब"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "हटाइये"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "कोई बिल नहीं"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "सूचि बनाने के लिए कुछ नहीं।"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr "आप शायद यह करना चाहते हैं"
|
||||
|
||||
msgid "add a bill"
|
||||
msgstr "बिल जोड़ें"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgstr "प्रतिभागी जोड़ें"
|
||||
msgid "add participants"
|
||||
msgstr "प्रतिभागियों को जोड़ें"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "पासवर्ड अनुस्मारक"
|
||||
|
@ -914,55 +904,38 @@ msgstr "अपना पासवर्ड रीसेट करें"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "इस परियोजना से जुड़ने के लिए लोगों को आमंत्रित करें"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "ईमेल के माध्यम से भेजें"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
"उन ईमेल पतों की एक (अल्पविराम से अलग की गयी) सूची निर्दिष्ट करें जिन्हे "
|
||||
"आप इस \n"
|
||||
"\t\t बजट प्रबंधन परियोजना के निर्माण के बारे में सूचित करना चाहते हैं "
|
||||
"और हम उन्हें आपके लिए एक ईमेल भेजेंगे।"
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "पहचानकर्ता और कोड साझा करें"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"आप किसी भी संचार माध्यम से परियोजना पहचानकर्ता और निजी कोड साझा कर सकते "
|
||||
"हैं।"
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "पहचानकर्ता:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "निजी कोड"
|
||||
msgid "Share the Link"
|
||||
msgstr "लिंक साझा करें"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr "आप नीचे दिए गए लिंक को सीधे अपने पसंदीदा माध्यम से साझा कर सकते हैं"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "ईमेल के माध्यम से भेजें"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"उन ईमेल पतों की एक (अल्पविराम से अलग की गयी) सूची निर्दिष्ट करें जिन्हे "
|
||||
"आप इस \n"
|
||||
"\t\t बजट प्रबंधन परियोजना के निर्माण के बारे में सूचित करना चाहते हैं "
|
||||
"और हम उन्हें आपके लिए एक ईमेल भेजेंगे।"
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "किसे भुगतान करना है?"
|
||||
|
@ -1062,95 +1035,3 @@ msgstr "अवधि"
|
|||
|
||||
#~ msgid "People to notify"
|
||||
#~ msgstr "सूचित किये जाने वाले लोग"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "आयात"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "भुगतान की गई राशि"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "बिल शून्य नहीं हो सकते"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "प्रोजेक्ट पहचानकर्ता %(project)s है"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "अमान्य JSON"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "आपको यकीन है?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "JSON को आयात करे"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>इस प्रोजेक्ट में इतिहास "
|
||||
#~ "अक्षम है। नई कार्रवाइयां नीचे दिखाई "
|
||||
#~ "नहीं देंगी। आप इतिहास को यहाँ से"
|
||||
#~ " सक्षम कर सकते हैं</i>\n"
|
||||
#~ " <a href=\"%(url)s\">सेटिंग्स पृष्ठ</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>नीचे दी गई तालिका "
|
||||
#~ "परियोजना इतिहास को अक्षम करने से "
|
||||
#~ "पहले दर्ज की गई कार्रवाइयों को "
|
||||
#~ "दर्शाती है। आप उन्हें हटाने के लिए"
|
||||
#~ "\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">प्रोजेक्ट इतिहास "
|
||||
#~ "हटा</a>सकते हैं।</i></p>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "आमंत्रण भेजें"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "प्रदर्शन"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "प्रोजेक्ट संपादित करें"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "आप शायद यह करना चाहते हैं"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "प्रतिभागियों को जोड़ें"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
#~ "आप किसी भी संचार माध्यम से "
|
||||
#~ "परियोजना पहचानकर्ता और निजी कोड साझा "
|
||||
#~ "कर सकते हैं।"
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "लिंक साझा करें"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr "आप नीचे दिए गए लिंक को सीधे अपने पसंदीदा माध्यम से साझा कर सकते हैं"
|
||||
|
||||
|
|
BIN
ihatemoney/translations/hu/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/hu/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
ihatemoney/translations/id/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/id/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -1,25 +1,21 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2022-04-11 17:12+0000\n"
|
||||
"Last-Translator: Santiago José Gutiérrez Llanos "
|
||||
"<gutierrezapata17@gmail.com>\n"
|
||||
"Last-Translator: Santiago José Gutiérrez Llanos <gutierrezapata17@gmail.com>"
|
||||
"\n"
|
||||
"Language-Team: Indonesian <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/id/>\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.12-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Anda baru saja membuat %(project)s untuk membagikan harga Anda"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -30,13 +26,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nama proyek"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "Kode pribadi baru"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Kode pribadi baru"
|
||||
|
||||
|
@ -56,13 +45,8 @@ msgid "Default Currency"
|
|||
msgstr "Mata Uang Standar"
|
||||
|
||||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr "Menetapkan mata uang default memungkinkan konversi mata uang antar tagihan"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Kesalahan tidak diketahui"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Kode pribadi tidak valid."
|
||||
msgstr ""
|
||||
"Menetapkan mata uang default memungkinkan konversi mata uang antar tagihan"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
|
@ -71,8 +55,11 @@ msgstr ""
|
|||
"Proyek ini tidak dapat disetel ke 'tanpa mata uang' karena berisi tagihan"
|
||||
" dalam berbagai mata uang."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr ""
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Impor file JSON yang sudah diekspor sebelumnya"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Impor"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Pengidentifikasi proyek"
|
||||
|
@ -103,6 +90,12 @@ msgstr "Mohon, silahkan validasi captcha untuk melanjutkan."
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Masukkan kode pribadi untuk mengkonfirmasi penghapusan"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Kesalahan tidak diketahui"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Kode pribadi tidak valid."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Masuk"
|
||||
|
||||
|
@ -127,17 +120,17 @@ msgstr "Konfirmasi kata sandi"
|
|||
msgid "Reset password"
|
||||
msgstr "Atur ulang kata sandi"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Kapan?"
|
||||
msgid "Date"
|
||||
msgstr "Tanggal"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Apa?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Siapa yang bayar?"
|
||||
msgid "Payer"
|
||||
msgstr "Pembayar"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Berapa banyak?"
|
||||
msgid "Amount paid"
|
||||
msgstr "Jumlah bayar"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Mata Uang"
|
||||
|
@ -161,6 +154,9 @@ msgstr "Ajukan dan tambah yang baru"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "Default proyek: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Tagihan tidak boleh kosong"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Nama"
|
||||
|
||||
|
@ -182,27 +178,13 @@ msgstr "Proyek ini sudah mempunyai /ada anggota ini"
|
|||
msgid "People to notify"
|
||||
msgstr "Orang yang akan dinotifikasi"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgid "Send invites"
|
||||
msgstr "Kirim undangan"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "Surel %(email)s tidak valid"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Keluar"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"Maaf, ada galat saat mencoba mengirim email undangan. Silakan periksa "
|
||||
"konfigurasi email peladen atau hubungi administrator."
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} dan {dual_object_1}"
|
||||
|
@ -230,8 +212,7 @@ msgstr "{prefix}: {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:1<br />{errors}"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "Terlalu banyak percobaan masuk, silakan coba lagi nanti."
|
||||
|
||||
#, python-format
|
||||
|
@ -244,6 +225,10 @@ msgstr "Token yang disediakan tidak valid"
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "Kode pribadi ini tidak benar"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Anda baru saja membuat %(project)s untuk membagikan harga Anda"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "Email pengingat baru saja dikirimkan kepada Anda"
|
||||
|
||||
|
@ -254,10 +239,14 @@ msgstr ""
|
|||
"Kami telah mengirimi Anda email pengingat, tetapi ada kesalahan. Anda "
|
||||
"masih dapat menggunakan proyek secara normal."
|
||||
|
||||
#, fuzzy
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "Pengidentifikasi proyek adalah %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"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 "
|
||||
|
@ -275,33 +264,23 @@ msgstr "Proyek tidak diketahui"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "Kata sandi berhasil diatur ulang."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Proyek berhasil diunggah"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr ""
|
||||
msgid "Invalid JSON"
|
||||
msgstr "JSON tidak valid"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Proyek berhasil diunggah"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "Proyek berhasil dihapus"
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "Anda telah diundang untuk membagikan harga Anda untuk %(project)s"
|
||||
|
@ -309,8 +288,10 @@ msgstr "Anda telah diundang untuk membagikan harga Anda untuk %(project)s"
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "Undangan Anda telah dikirim"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Maaf, ada galat saat mencoba mengirim email undangan. Silakan periksa "
|
||||
"konfigurasi email peladen atau hubungi administrator."
|
||||
|
@ -357,10 +338,6 @@ msgstr "Tagihan telah dihapus"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "Tagihan telah diperbarui"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr "Kesalahan saat menghapus riwayat proyek"
|
||||
|
||||
|
@ -421,8 +398,8 @@ msgstr "Aksi"
|
|||
msgid "edit"
|
||||
msgstr "ubah"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "Hapus proyek"
|
||||
msgid "delete"
|
||||
msgstr "hapus"
|
||||
|
||||
msgid "show"
|
||||
msgstr "tampilkan"
|
||||
|
@ -436,12 +413,20 @@ msgstr "Unduh Aplikasi Seluler"
|
|||
msgid "Get it on"
|
||||
msgstr "Dapatkan di"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr "Apakah Anda yakin?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Ubah proyek"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgstr "Ubah proyek"
|
||||
msgid "Delete project"
|
||||
msgstr "Hapus proyek"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "Impor JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Pilih berkas"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Unduh data proyek"
|
||||
|
@ -467,28 +452,18 @@ msgstr "Batalkan"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Pengaturan Privasi"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr ""
|
||||
msgid "Edit the project"
|
||||
msgstr "Ubah proyek"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Impor file JSON yang sudah diekspor sebelumnya"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Pilih berkas"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Ubah tagihan ini"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "Tambah tagihan"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Semua orang"
|
||||
|
||||
|
@ -507,6 +482,9 @@ msgstr "Sunting anggota ini"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "john.doe@example.com, mary.moe@site.com"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Kirim undangan"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Unduh"
|
||||
|
||||
|
@ -577,21 +555,37 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "Perekaman alamat IP dapat diaktifkan di halaman pengaturan"
|
||||
"\n"
|
||||
" <i> Proyek ini memiliki riwayat yang dinonaktifkan. Tindakan "
|
||||
"baru tidak akan muncul di bawah ini. Anda dapat mengaktifkan riwayat "
|
||||
"pada</i>\n"
|
||||
" <a href=\"%(url)s\">halaman pengaturan</a>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Seseorang mungkin membersihkan riwayat proyek."
|
||||
"\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 "
|
||||
|
@ -603,18 +597,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "Hapus alamat IP yang disimpan"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Tidak ada Alamat IP untuk dihapus"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Hapus alamat IP yang disimpan"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "Tidak ada riwayat untuk dihapus"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Bersihkan Riwayat Proyek"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Tidak ada Alamat IP untuk dihapus"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Hapus alamat IP yang disimpan"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Waktu"
|
||||
|
||||
|
@ -676,15 +670,9 @@ msgstr "Tagihan %(name)s diganti ke %(new_description)s"
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr "Pengguna %(name)s: berat berubah dari %(old_weight)s ke %(new_weight)s"
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Pembayar"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Jumlah"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Tanggal"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Jumlah dalam %(currency)s"
|
||||
|
@ -787,9 +775,6 @@ msgstr "Riwayat"
|
|||
msgid "Settings"
|
||||
msgstr "Pengaturan"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Proyek lainnya:"
|
||||
|
||||
|
@ -799,9 +784,8 @@ msgstr "ganti ke"
|
|||
msgid "Dashboard"
|
||||
msgstr "Dasbor"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr ""
|
||||
msgid "Logout"
|
||||
msgstr "Keluar"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Kode"
|
||||
|
@ -812,7 +796,7 @@ msgstr "Aplikasi Gawai"
|
|||
msgid "Documentation"
|
||||
msgstr "Dokumentasi"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "Dasbor Administrasi"
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -834,21 +818,30 @@ msgstr "Anda yakin?"
|
|||
msgid "Invite people"
|
||||
msgstr "Undang orang"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Tagihan terbaru"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Tagihan terdahulu"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "Anda harus mulai dengan menambahkan partisipan"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "Tambah tagihan baru"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Tagihan terbaru"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Tagihan terdahulu"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Kapan?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Siapa yang bayar?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "Untuk apa?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Berapa banyak?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "Ditambahkan pada %(date)s"
|
||||
|
@ -857,22 +850,20 @@ msgstr "Ditambahkan pada %(date)s"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "Semua orang kecuali %(excluded)s"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "hapus"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Tidak ada tagihan"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "Belum ada untuk didaftarkan."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr "Anda mungkin menginginkan"
|
||||
|
||||
msgid "add a bill"
|
||||
msgstr "tambah tagihan"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgstr "Sunting anggota ini"
|
||||
msgid "add participants"
|
||||
msgstr "tambah partisipan"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "Pengingat kata sandi"
|
||||
|
@ -896,55 +887,40 @@ msgstr "Atur ulang kata sandi Anda"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "Undang orang untuk bergabung dalam proyek ini"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Kirim melalui surel"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
"Spesifikkan daftar alamat surel (dipisah dengan koma) yang akan Anda "
|
||||
"kirim pemberitahuan tentang\n"
|
||||
" pembuatan dari manajemen anggaran proyek ini dan kami "
|
||||
"akan memngirim mereka sebuah surel."
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Bagikan ID & kode"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"Anda bisa membagikan ID proyek dan kode pribadi dengan cara komunikasi "
|
||||
"apapun."
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "ID:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "Kode pribadi"
|
||||
msgid "Share the Link"
|
||||
msgstr "Bagikan tautan"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
"Anda bisa membagikan tautan secara langsung melalui media yang Anda "
|
||||
"inginkan"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Kirim melalui surel"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"Spesifikkan daftar alamat surel (dipisah dengan koma) yang akan Anda "
|
||||
"kirim pemberitahuan tentang\n"
|
||||
" pembuatan dari manajemen anggaran proyek ini dan kami "
|
||||
"akan memngirim mereka sebuah surel."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Siapa membayar?"
|
||||
|
@ -1070,99 +1046,3 @@ msgstr "Periode"
|
|||
|
||||
#~ msgid "People to notify"
|
||||
#~ msgstr "Orang yang akan diberi pemberitahuan"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Impor"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Jumlah bayar"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Tagihan tidak boleh kosong"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "Pengidentifikasi proyek adalah %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "JSON tidak valid"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "Apakah Anda yakin?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "Impor JSON"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i> Proyek ini memiliki "
|
||||
#~ "riwayat yang dinonaktifkan. Tindakan baru "
|
||||
#~ "tidak akan muncul di bawah ini. "
|
||||
#~ "Anda dapat mengaktifkan riwayat pada</i>\n"
|
||||
#~ ""
|
||||
#~ " <a href=\"%(url)s\">halaman pengaturan</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove 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 "Send invites"
|
||||
#~ msgstr "Kirim undangan"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "tampilkan"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Ubah proyek"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "Anda mungkin menginginkan"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "tambah partisipan"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
#~ "Anda bisa membagikan ID proyek dan "
|
||||
#~ "kode pribadi dengan cara komunikasi "
|
||||
#~ "apapun."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "Bagikan tautan"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
#~ "Anda bisa membagikan tautan secara "
|
||||
#~ "langsung melalui media yang Anda "
|
||||
#~ "inginkan"
|
||||
|
||||
|
|
BIN
ihatemoney/translations/it/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/it/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
BIN
ihatemoney/translations/ja/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/ja/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -1,24 +1,20 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2024-06-24 15:09+0000\n"
|
||||
"Last-Translator: Khang Tran <tranchikhang@outlook.com>\n"
|
||||
"Language-Team: Japanese <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/ja/>\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2020-11-11 16:28+0000\n"
|
||||
"Last-Translator: Jwen921 <yangjingwen0921@gmail.com>\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-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.6-rc\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "費用を共有するため、%(project)sが作られました"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -27,17 +23,12 @@ msgstr "無効な入力です。数字と「+ - * / 」の演算子しか入力
|
|||
msgid "Project name"
|
||||
msgstr "プロジェクトの名前"
|
||||
|
||||
msgid "Current private code"
|
||||
msgstr "現在の暗証コード"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr "プロジェクトを編集するために、暗証コードを入力してください"
|
||||
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "新暗証コード"
|
||||
msgstr "暗証コード"
|
||||
|
||||
msgid "Enter a new code if you want to change it"
|
||||
msgstr "変更するために、新しい暗証コードを入力してください"
|
||||
msgstr ""
|
||||
|
||||
msgid "Email"
|
||||
msgstr "メールアドレス"
|
||||
|
@ -52,21 +43,18 @@ msgid "Default Currency"
|
|||
msgstr "初期設定にする通貨"
|
||||
|
||||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr "明細通貨変換のため、デフォルトの通貨を設定してください"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "不明エラー"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "無効な暗証コード。"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr ""
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "以前のJSONファイルをインポートする"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "インポート"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "プロジェクトの名前"
|
||||
|
@ -96,6 +84,14 @@ msgstr ""
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "未知のプロジェクト"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Invalid private code."
|
||||
msgstr "暗証コード"
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "入る"
|
||||
|
||||
|
@ -120,17 +116,17 @@ msgstr "パスワードの確認"
|
|||
msgid "Reset password"
|
||||
msgstr "パスワードの再設定"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "いつ?"
|
||||
msgid "Date"
|
||||
msgstr "日付"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "何ですか?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "誰が支払った?"
|
||||
msgid "Payer"
|
||||
msgstr "支払人"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "いくら?"
|
||||
msgid "Amount paid"
|
||||
msgstr "支払額"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "通貨"
|
||||
|
@ -154,6 +150,9 @@ msgstr "確認して、新しいのを作成します"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "初期プロジェクト: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "数値を空値にしてはいけません"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "名前"
|
||||
|
||||
|
@ -175,28 +174,15 @@ msgid "This project already have this participant"
|
|||
msgstr "プロジェクトはすでにこのメンバーを含めています"
|
||||
|
||||
msgid "People to notify"
|
||||
msgstr "通知したい人"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "招待状を送る"
|
||||
msgid "Send invites"
|
||||
msgstr "招待状を出す"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "メールアドレス%(email)sは無効"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "ログアウト"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr "申し訳ございませんが、エラーが発生しました。メールアドレスを再度チェックする"
|
||||
"か、または管理者( %(admin_email)s)に連絡ください"
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr ""
|
||||
|
@ -224,8 +210,7 @@ msgstr ""
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "何度もログインに失敗したので、時間をおいてから再度ログインして下さい。"
|
||||
|
||||
#, python-format
|
||||
|
@ -238,6 +223,10 @@ msgstr ""
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "私用コードは正しくない"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "費用を共有するため、%(project)sが作られました"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "催促メールがただいまあなたに送りました"
|
||||
|
||||
|
@ -246,10 +235,14 @@ msgid ""
|
|||
"still use the project normally."
|
||||
msgstr "催促メールを送った時、エラーが発生しました。このプロジェクトはまだ使えます。"
|
||||
|
||||
#, fuzzy
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "プロジェクト名は%(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr "申し訳ございませんが、パスワード再設定の説明メールを送った時、エラーが発生しました。メールアドレスを一度確認してまたは管理者に連絡してください。"
|
||||
|
||||
msgid "No token provided"
|
||||
|
@ -264,33 +257,23 @@ msgstr "未知のプロジェクト"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "パスワードを再設定できました。"
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "プロジェクトをアップロードできました"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr "CSVを読み込むことができません"
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr ""
|
||||
msgid "Invalid JSON"
|
||||
msgstr "無効なJSON"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "プロジェクトをアップロードできました"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "プロジェクトを削除できました"
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr "ログアウトできません"
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "%(project)sの費用を共有すると、あなたが誘われた"
|
||||
|
@ -298,8 +281,10 @@ msgstr "%(project)sの費用を共有すると、あなたが誘われた"
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "あなたの招待状が送られました"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr "申し訳ございませんが、招待メールを送ったとき、エラーが発生しました。メールアドレスを再度チェックするかまたは管理者に連絡ください。"
|
||||
|
||||
#, python-format
|
||||
|
@ -342,16 +327,13 @@ msgstr "明細が削除されました"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "明細が変更されました"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Error deleting project history"
|
||||
msgstr "プロジェクトの歴史を有効にする"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Deleted project history."
|
||||
msgstr "プロジェクトの歴史を削除しました。"
|
||||
msgstr "プロジェクトの歴史を有効にする"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Error deleting recorded IP addresses"
|
||||
|
@ -410,9 +392,8 @@ msgstr "操作"
|
|||
msgid "edit"
|
||||
msgstr "編集"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Delete project"
|
||||
msgstr "プロジェクトを編集する"
|
||||
msgid "delete"
|
||||
msgstr "削除"
|
||||
|
||||
msgid "show"
|
||||
msgstr "表示"
|
||||
|
@ -428,13 +409,23 @@ msgstr "携帯アプリ"
|
|||
msgid "Get it on"
|
||||
msgstr "入る"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Are you sure?"
|
||||
msgstr "確認?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "プロジェクトを編集する"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgid "Delete project"
|
||||
msgstr "プロジェクトを編集する"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "JSONを導入する"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "ファイルを選択する"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "プロジェクトのデータをダウンロードする"
|
||||
|
||||
|
@ -459,28 +450,18 @@ msgstr "キャンセル"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "プライバシーの設定"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr ""
|
||||
msgid "Edit the project"
|
||||
msgstr "プロジェクトを編集する"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "以前のJSONファイルをインポートする"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "ファイルを選択する"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "明細を編集する"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "新しい明細書を追加する"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "皆"
|
||||
|
||||
|
@ -500,6 +481,9 @@ msgstr "参加者を追加する"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "john.doe@example.com, mary.moe@site.com"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "招待状を送る"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "ダウンロードする"
|
||||
|
||||
|
@ -567,20 +551,33 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "設定ページでIPアドレス記録を編集可能にすることができる。"
|
||||
"\n"
|
||||
" <i>このプロジェクトの歴史は操作できません。新しい操作は下に出ません。</i>で歴史を操作可能にすることができます。\n"
|
||||
"<a href=\"%(url)s\">設定ページ</a>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "プロジェクトの歴史が誰かに取り除かれたかもしれません。"
|
||||
"\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 "
|
||||
|
@ -590,18 +587,18 @@ msgstr "このプロジェクトのIP記録が操作できない一方、下の
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "保存されたIPアドレスを削除する"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "削除できるIPアドレスはない"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "保存されたIPアドレスを削除する"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "削除できる歴史はない"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "プロジェクトの歴史を取り除く"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "削除できるIPアドレスはない"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "保存されたIPアドレスを削除する"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "時間"
|
||||
|
||||
|
@ -617,13 +614,13 @@ msgstr "設定ページでIPアドレス記録を編集不可にすることが
|
|||
msgid "From IP"
|
||||
msgstr "IPから"
|
||||
|
||||
#, python-format
|
||||
#, fuzzy, python-format
|
||||
msgid "Project %(name)s added"
|
||||
msgstr "プロジェクト%(name)sが作成されました"
|
||||
msgstr "プロジェクトの名前"
|
||||
|
||||
#, python-format
|
||||
#, fuzzy, python-format
|
||||
msgid "Bill %(name)s added"
|
||||
msgstr "%(name)s明細が追加されました"
|
||||
msgstr "明細が追加されました"
|
||||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s added"
|
||||
|
@ -636,9 +633,9 @@ msgstr "プロジェクトの私用コードが変更された"
|
|||
msgid "Project renamed to %(new_project_name)s"
|
||||
msgstr "プロジェクト名は%(new_project_name)s"
|
||||
|
||||
#, python-format
|
||||
#, fuzzy, python-format
|
||||
msgid "Project contact email changed to %(new_email)s"
|
||||
msgstr "プロジェクトの連絡メールが%(new_email)sに変更されました"
|
||||
msgstr "プロジェクトの連絡メールが…に変更された"
|
||||
|
||||
msgid "Project settings modified"
|
||||
msgstr "プロジェクトの設定が修正された"
|
||||
|
@ -663,22 +660,16 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "支払人"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "金額"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "日付"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "%(currency)sでの金額"
|
||||
|
||||
#, python-format
|
||||
#, fuzzy, python-format
|
||||
msgid "Bill %(name)s modified"
|
||||
msgstr "%(name)s明細が変更されました"
|
||||
msgstr "明細が変更されました"
|
||||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s modified"
|
||||
|
@ -692,17 +683,17 @@ msgstr "ユーザー%(name)sが既に取り除かれました"
|
|||
msgid "Participant %(name)s removed"
|
||||
msgstr "ユーザー%(name)sが既に取り除かれました"
|
||||
|
||||
#, python-format
|
||||
#, fuzzy, python-format
|
||||
msgid "Project %(name)s changed in an unknown way"
|
||||
msgstr "プロジェクト%(name)sが不明な方法で変更されました"
|
||||
msgstr "未知の方法で変更された"
|
||||
|
||||
#, python-format
|
||||
#, fuzzy, python-format
|
||||
msgid "Bill %(name)s changed in an unknown way"
|
||||
msgstr "明細%(name)sが不明な方法で変更されました"
|
||||
msgstr "未知の方法で変更された"
|
||||
|
||||
#, python-format
|
||||
#, fuzzy, python-format
|
||||
msgid "Participant %(name)s changed in an unknown way"
|
||||
msgstr "参加者%(name)sが不明な方法で変更されました"
|
||||
msgstr "未知の方法で変更された"
|
||||
|
||||
msgid "Nothing to list"
|
||||
msgstr "表示できるものがない"
|
||||
|
@ -772,9 +763,6 @@ msgstr "歴史"
|
|||
msgid "Settings"
|
||||
msgstr "設定"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "他のプロジェクト:"
|
||||
|
||||
|
@ -784,9 +772,8 @@ msgstr "…に切り替える"
|
|||
msgid "Dashboard"
|
||||
msgstr "ダッシュボード"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr ""
|
||||
msgid "Logout"
|
||||
msgstr "ログアウト"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "コード"
|
||||
|
@ -797,7 +784,7 @@ msgstr "携帯アプリ"
|
|||
msgid "Documentation"
|
||||
msgstr "書類"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "管理ダッシュボード"
|
||||
|
||||
#, fuzzy
|
||||
|
@ -820,21 +807,30 @@ msgstr "確認?"
|
|||
msgid "Invite people"
|
||||
msgstr "人を誘う"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "もっと新しい明細"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "もっと古い明細"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "参加者を追加して始めましょう"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "新しい明細を追加する"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "もっと新しい明細"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "もっと古い明細"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "いつ?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "誰が支払った?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "何のため?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "いくら?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "%(date)sに追加された"
|
||||
|
@ -843,21 +839,19 @@ msgstr "%(date)sに追加された"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "%(excluded)s以外にみんな"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "削除"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "明細なし"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "表示できるものはありません。"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr "…したいかもしれない"
|
||||
|
||||
msgid "add a bill"
|
||||
msgstr "明細を追加する"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgid "add participants"
|
||||
msgstr "参加者を追加する"
|
||||
|
||||
msgid "Password reminder"
|
||||
|
@ -880,50 +874,34 @@ msgstr "パスワードを再設定する"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "他人をこのプロジェクトに招待する"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "メールで送る"
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr "知らせたいメールアドレスのリスト(カンマ区切り)を指定してください。メールで"
|
||||
"招待リンクを送信します。"
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "名前とコードを共有する"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
"communication means."
|
||||
msgstr "プロジェクト名と私用コードは何の方法でも共有できます。"
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "名前:"
|
||||
|
||||
msgid "Private code:"
|
||||
msgstr "暗証コード:"
|
||||
msgid "Share the Link"
|
||||
msgstr "リンクを共有する"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr "好きの手段で以下のリンクを直接に共有できる"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "メールで送る"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"…を知らせたいメールアドレスのリストを特定する(カンマ区切り)\n"
|
||||
"彼らにこの予算管理プロジェクトの作成をメールでお知らせします。"
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "誰が支払った?"
|
||||
|
@ -1020,84 +998,3 @@ msgstr "期間"
|
|||
|
||||
#~ msgid "People to notify"
|
||||
#~ msgstr "知らせたい人"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "インポート"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "支払額"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "数値を空値にしてはいけません"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "プロジェクト名は%(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "無効なJSON"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "確認?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "JSONを導入する"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " "
|
||||
#~ "<i>このプロジェクトの歴史は操作できません。新しい操作は下に出ません。</i>で歴史を操作可能にすることができます。\n"
|
||||
#~ "<a href=\"%(url)s\">設定ページ</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>下の表では操作不可になる前に、プロジェクトの歴史に対して記録された操作が反映されています。…できます。\n"
|
||||
#~ "<a href=\"#\" data-toggle=\"modal\" data-"
|
||||
#~ "keyboard=\"false\" data-target=\"#confirm-"
|
||||
#~ "erase\">プロジェクトの歴史を取り除く</a> で取り除きます.</i></p>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "招待状を出す"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "表示"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "プロジェクトを編集する"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "…したいかもしれない"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "参加者を追加する"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr "プロジェクト名と私用コードは何の方法でも共有できます。"
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "リンクを共有する"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr "好きの手段で以下のリンクを直接に共有できる"
|
||||
|
|
BIN
ihatemoney/translations/kn/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/kn/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -1,26 +1,20 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2023-09-16 10:59+0000\n"
|
||||
"Last-Translator: Baptiste <weblate@bitsofnetworks.org>\n"
|
||||
"Language-Team: Kannada <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/kn/>\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2021-10-17 04:56+0000\n"
|
||||
"Last-Translator: a-g-rao <athrigrao@gmail.com>\n"
|
||||
"Language: kn\n"
|
||||
"Language-Team: Kannada <https://hosted.weblate.org/projects/i-hate-"
|
||||
"money/i-hate-money/kn/>\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 5.0.2\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
"ನೀವು ನಿಮ್ಮ ಖರ್ಚು/ವೆಚ್ಚವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು %(project)s ಯೋಜನೆಯನ್ನು "
|
||||
"ಸೃಷ್ಟಿಸಿದ್ದೀರಿ"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -31,17 +25,11 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "ಯೋಜನೆಯ ಹೆಸರು"
|
||||
|
||||
msgid "Current private code"
|
||||
msgstr "ಪ್ರಸ್ತುತ ಸಂಕೇತಪದ"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr "ಯೋಜನೆಯನ್ನು ಪರಿಷ್ಕರಿಸಲು ಚಾಲ್ತಿಯಲ್ಲಿರುವ ಸಂಕೇತಪದವನ್ನು ನಮೂದಿಸಿ"
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "ಹೊಸ ಸಂಕೇತಪದ"
|
||||
|
||||
msgid "Enter a new code if you want to change it"
|
||||
msgstr "ಸಂಕೇತಪದ ಬದಲಾಯಿಸಬೇಕೆಂದರೆ ನಮೂದಿಸಿ"
|
||||
msgstr "ಸಂಕೇತಪದ ಬದಲಾಯಿಸಬೇಕೆಂದರೆ ನಮೂದಿಸಿ."
|
||||
|
||||
msgid "Email"
|
||||
msgstr "ಮಿನ್ನಂಚೆ"
|
||||
|
@ -53,31 +41,24 @@ msgid "Use IP tracking for project history"
|
|||
msgstr ""
|
||||
|
||||
msgid "Default Currency"
|
||||
msgstr "ಪುರ್ವನಿಯೋಜಿತ ಕರನ್ಸಿ"
|
||||
msgstr ""
|
||||
|
||||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
"ಪುರ್ವನಿಯೋಜಿತ ಕರನ್ಸಿಯನ್ನು ನಮೋದಿಸುವುದರಿಂದ ರಶೀದಿಗಳ ನಡುವೆ ಕರನ್ಸಿ ಪರಿವರ್ತನೆಯನ್ನು "
|
||||
"ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "ಅಜ್ಞಾತ ದೋಷ"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "ನಮೂದಿಸಿರುವ ಸಂಕೇತಪದ ಅಮಾನ್ಯವಾಗಿದೆ."
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
"ಅನೇಕ ಕರೆನ್ಸಿಯ ರಶೀದಿ ಇರುವುದರಿಂದ ಈ ಯೋಜನೆಯನ್ನು \"ಯಾವುದೆ ಕರೆನ್ಸಿ ಇಲ್ಲ\" ಯಂದು "
|
||||
"ನಮೋದಿಸಲು ಆಗುವುದಿಲ್ಲ."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr "ಖರ್ಚನ್ನು ಜೊತೆಗಾರನೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಬಹುದು"
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import"
|
||||
msgstr "ಆಮದು"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "ಯೋಜನೆ ಸಂಕೇತ"
|
||||
msgstr ""
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "ಸಂಕೇತಪದ"
|
||||
|
@ -90,21 +71,25 @@ msgid ""
|
|||
"A project with this identifier (\"%(project)s\") already exists. Please "
|
||||
"choose a new identifier"
|
||||
msgstr ""
|
||||
"ಈ ಸಂಕೇತದ (\"%(project)s\") ಇನೊಂದು ಯೋಜನೆ ಆಗಲೆ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ. ದಯವಿಟ್ಟು ಹೊಸ "
|
||||
"ಸಂಕೇತವನ್ನು ಆರಿಸಿ"
|
||||
|
||||
msgid "Which is a real currency: Euro or Petro dollar?"
|
||||
msgstr "ನಿಜವಾದ ಕರೆನ್ಸಿ ಯಾವುದು: ಯುರೋ ಅಥವಾ ಪೆಟ್ರೋ ಡಾಲರ್?"
|
||||
msgstr ""
|
||||
|
||||
msgid "euro"
|
||||
msgstr "ಯೂರೋ"
|
||||
|
||||
msgid "Please, validate the captcha to proceed."
|
||||
msgstr "ಮುಂದುವರೆಯಲು ದಯವಿಟ್ಟು, ಕ್ಯಾಪ್ಚಾವನ್ನು ಮೌಲ್ಯೀಕರಿಸಿ."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "ತೆಗೆದುಹಾಕಲು ನಿಮ್ಮ ಸಂಕೇತಪದವನ್ನು ನಮೂದಿಸಿ"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "ಅಜ್ಞಾತ ದೋಷ"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "ನಮೂದಿಸಿರುವ ಸಂಕೇತಪದ ಅಮಾನ್ಯವಾಗಿದೆ."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "ಒಳಹೊಗು"
|
||||
|
||||
|
@ -129,27 +114,26 @@ msgstr "ಪ್ರವೇಶಪದ ದೃಢೀಕರಿಸಿ"
|
|||
msgid "Reset password"
|
||||
msgstr "ಪ್ರವೇಶಪದ ಮರುಹೊಂದಿಸಿ"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "ಯಾವಾಗ?"
|
||||
msgid "Date"
|
||||
msgstr "ದಿನಾಂಕ"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "ಏನು?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "ಯಾರು ಪಾವತಿಸಿದ್ದಾರೆ?"
|
||||
msgid "Payer"
|
||||
msgstr "ಪಾವತಿಸಿದವರು"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "ಎಷ್ಟು?"
|
||||
msgid "Amount paid"
|
||||
msgstr "ಪಾವತಿಸಿದ ಮೊತ್ತ"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "ನಾಣ್ಯಪದ್ಧತಿ"
|
||||
|
||||
#, fuzzy
|
||||
msgid "External link"
|
||||
msgstr "ಬಾಹ್ಯ ಲಿಂಕ್"
|
||||
msgstr ""
|
||||
|
||||
msgid "A link to an external document, related to this bill"
|
||||
msgstr "ಈ ರಶೀದಿಗೆ ಸಂಬಂಧಿಸಿದ ಬಾಹ್ಯ ಕಡತದ ಲಿಂಕ್"
|
||||
msgstr ""
|
||||
|
||||
msgid "For whom?"
|
||||
msgstr "ಯಾರಿಂದ?"
|
||||
|
@ -162,13 +146,16 @@ msgstr "ಕೋರಿಕೆ ಸಲ್ಲಿಸಿ ಹೊಸದನ್ನುಸೇ
|
|||
|
||||
#, python-format
|
||||
msgid "Project default: %(currency)s"
|
||||
msgstr "ಯೋಜನೆಯ ಪೂರ್ವನಿಯೋಜಿತ ಕರೆನ್ಸಿ: %(currency)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr ""
|
||||
|
||||
msgid "Name"
|
||||
msgstr "ಹೆಸರು"
|
||||
|
||||
msgid "Weights should be positive"
|
||||
msgstr "ತೂಕವು ಧನಾತ್ಮಕವಾಗಿರಬೇಕು"
|
||||
msgstr ""
|
||||
|
||||
msgid "Weight"
|
||||
msgstr "ತೂಕ"
|
||||
|
@ -177,34 +164,22 @@ msgid "Add"
|
|||
msgstr "ಕೂಡು"
|
||||
|
||||
msgid "The participant name is invalid"
|
||||
msgstr "ಸದಸ್ಯರ ಹೆಸರು ಅಮಾನ್ಯವಾಗಿದೆ"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "This project already have this participant"
|
||||
msgstr "ಈ ಸದಸ್ಯರು ಈಗಾಗಲೆ ಈ ಯೋಜನೆಯ ಸದಸ್ಯರಾಗಿದ್ದಾರೆ"
|
||||
|
||||
msgid "People to notify"
|
||||
msgstr "ಸೂಚಿಸಬೇಕಾದ ಜನರು"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "ಆಮಂತ್ರಣಗಳನ್ನು ಕಳುಹಿಸಿ"
|
||||
msgid "Send invites"
|
||||
msgstr "ಆಮಂತ್ರಣ ಕಳುಹಿಸು"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "ಮಿನ್ನಂಚೆ %(email)s ಸಮಂಜಸವಾಗಿಲ್ಲ"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "ನಿರ್ಗಮಿಸಿ"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr "ದಯವಿಟ್ಟು, ಇಮೇಲ್ ಸಂರಚನೆ ಪರಿಶೀಲಿಸಿ."
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"ದಯವಿಟ್ಟು, ಇಮೇಲ್ ಸಂರಚನೆ ಪರಿಶೀಲಿಸಿ ಅಥವಾ ನಿರ್ವಾಹಕನನ್ನು ಸಂಪರ್ಕಿಸಿ:%(admin_email)s"
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} ಮತ್ತು {dual_object_1}"
|
||||
|
@ -222,7 +197,7 @@ msgid "{start_object}, {next_object}"
|
|||
msgstr "{start_object}, {next_object}"
|
||||
|
||||
msgid "No Currency"
|
||||
msgstr "ಯಾವುದೆ ಕರೆನ್ಸಿ ಇಲ್ಲ"
|
||||
msgstr ""
|
||||
|
||||
#. Form error with only one error
|
||||
msgid "{prefix}: {error}"
|
||||
|
@ -232,7 +207,7 @@ msgstr "{prefix}: {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:<br />{errors}"
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -245,6 +220,12 @@ msgstr ""
|
|||
msgid "This private code is not the right one"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
"ನೀವು ನಿಮ್ಮ ಖರ್ಚು/ವೆಚ್ಚವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು %(project)s ಯೋಜನೆಯನ್ನು "
|
||||
"ಸೃಷ್ಟಿಸಿದ್ದೀರಿ"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "ನಿಮಗೆ ನೆನೆವಿ ಮಿನ್ನಂಚೆಯನ್ನು ಈಗ ಕಳುಹಿಸಲಾಗಿದೆ"
|
||||
|
||||
|
@ -255,9 +236,14 @@ msgstr ""
|
|||
"ನಿಮಗೆ ನೆನವಿ ಮಿನ್ನಂಚೆ ಕಳುಹಿಸಲು ಪ್ರಯತ್ನಿಸಿದ್ದೆವೆ, ಆದರೆ ದೋಷವಿತ್ತು. ನೀವು "
|
||||
"ಯೋಜನೆಯನ್ನು ಸಾಮಾನ್ಯ ಪದತಿಯಂತೆ ಉಪಯೋಗಿಸ ಬಹುದು."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
|
||||
msgid "No token provided"
|
||||
|
@ -272,14 +258,10 @@ msgstr "ಗೊತ್ತಿಲ್ಲದ ಯೋಜನೆ"
|
|||
msgid "Password successfully reset."
|
||||
msgstr ""
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -287,18 +269,12 @@ msgid ""
|
|||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
|
@ -308,7 +284,10 @@ msgstr ""
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "ನಿಮ್ಮ ಆಮಂತ್ರಣವನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ"
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -351,10 +330,6 @@ msgstr "ಬೆಲೆಪಟ್ಟಿಯನ್ನುತೆಗೆಯಲಾಗಿದ
|
|||
msgid "The bill has been modified"
|
||||
msgstr "ಬೆಲೆಪಟ್ಟಿಯನ್ನು ಮಾರ್ಪಡಿಸಲಾಗಿದೆ"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr "ಯೋಜನೆಯ ಇತಿಹಾಸವನ್ನು ತೆಗೆಯಲು ದೋಷವಾಗಿದೆ"
|
||||
|
||||
|
@ -415,8 +390,8 @@ msgstr "ಕಾರ್ಯಗಳು"
|
|||
msgid "edit"
|
||||
msgstr "ಪರಿಷ್ಕರಿಸಿ"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr ""
|
||||
msgid "delete"
|
||||
msgstr "ತೆಗೆಯಿರಿ"
|
||||
|
||||
msgid "show"
|
||||
msgstr "ತೋರಿಸಿ"
|
||||
|
@ -430,12 +405,20 @@ msgstr ""
|
|||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgstr "ಯೋಜನೆಯನ್ನು ರಚಿಸಿ/ಸೃಷ್ಟಿಸಿ"
|
||||
msgid "Delete project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr ""
|
||||
|
@ -461,27 +444,18 @@ msgstr ""
|
|||
msgid "Privacy Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save changes"
|
||||
msgid "Edit the project"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr ""
|
||||
|
||||
|
@ -500,6 +474,9 @@ msgstr ""
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
|
@ -564,18 +541,23 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -586,18 +568,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
|
||||
|
@ -659,15 +641,9 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "ಪಾವತಿಸಿದವರು"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
msgid "Date"
|
||||
msgstr "ದಿನಾಂಕ"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr ""
|
||||
|
@ -768,9 +744,6 @@ msgstr ""
|
|||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -780,8 +753,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
|
@ -793,7 +765,7 @@ msgstr ""
|
|||
msgid "Documentation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -815,21 +787,30 @@ msgstr ""
|
|||
msgid "Invite people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "When?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr ""
|
||||
|
||||
msgid "For what?"
|
||||
msgstr ""
|
||||
|
||||
msgid "How much?"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr ""
|
||||
|
@ -838,19 +819,19 @@ msgstr ""
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "delete"
|
||||
msgstr "ತೆಗೆಯಿರಿ"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add the first participant"
|
||||
msgid "add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "add participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password reminder"
|
||||
|
@ -873,48 +854,31 @@ msgstr ""
|
|||
msgid "Invite people to join this project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgid "Share the Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Private code:"
|
||||
msgstr "ಸಂಕೇತಪದ:"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
|
@ -980,116 +944,3 @@ msgstr ""
|
|||
#~ msgid "Participants to notify"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import previously exported JSON file"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "ಆಮದು"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "ಪಾವತಿಸಿದ ಮೊತ್ತ"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Too many failed login attempts, please retry later."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ 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 ""
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Sorry, there was an error while "
|
||||
#~ "trying to send the invitation emails."
|
||||
#~ " Please check the email configuration "
|
||||
#~ "of the server or contact the "
|
||||
#~ "administrator."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "ಆಮಂತ್ರಣ ಕಳುಹಿಸು"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "ತೋರಿಸಿ"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add a bill"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email for you."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email with the invitation "
|
||||
#~ "link."
|
||||
#~ msgstr ""
|
||||
|
|
BIN
ihatemoney/translations/ms/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/ms/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2021-07-18 12:32+0000\n"
|
||||
"Last-Translator: Kemystra <izzmin97@gmail.com>\n"
|
||||
"Language: ms\n"
|
||||
|
@ -15,10 +15,6 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -27,13 +23,6 @@ msgstr "Nilai atau ungkapan yang sah. Hanya nombor dan operasi + - * / diterima.
|
|||
msgid "Project name"
|
||||
msgstr "Nama projek"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "Kod peribadi baharu"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Kod peribadi baharu"
|
||||
|
||||
|
@ -58,13 +47,6 @@ msgstr "Mata wang asal"
|
|||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "Ralat yang tidak dikenalpasti"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Kod peribadi tidak sah."
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
|
@ -73,8 +55,12 @@ msgstr ""
|
|||
"Projek ini tidak boleh disetkan kepada 'tiada mata wang' kerana projek "
|
||||
"ini mempunyai wang dalam beberapa bentuk mata wang"
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Import fail JSON yang telah dieksport sebelum ini"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Import"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr ""
|
||||
|
@ -103,6 +89,13 @@ msgstr ""
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Masukkan kod peribadi untuk mengesahkan penghapusan"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "Ralat yang tidak dikenalpasti"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Kod peribadi tidak sah."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Masuk"
|
||||
|
||||
|
@ -129,17 +122,17 @@ msgstr "Pengesahan kata laluan"
|
|||
msgid "Reset password"
|
||||
msgstr "Tetapkan semula kata laluan"
|
||||
|
||||
msgid "When?"
|
||||
msgstr ""
|
||||
msgid "Date"
|
||||
msgstr "Tarikh"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Apa?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr ""
|
||||
msgid "Payer"
|
||||
msgstr "Pembayar"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr ""
|
||||
msgid "Amount paid"
|
||||
msgstr "Jumlah dibayar"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Mata wang"
|
||||
|
@ -165,6 +158,10 @@ msgstr "Hantar dan tambah yang baharu"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Bil tidak boleh kosong"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Nama"
|
||||
|
||||
|
@ -189,25 +186,13 @@ msgstr "Projek ini sudah mempunyai ahli"
|
|||
msgid "People to notify"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgid "Send invites"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr ""
|
||||
|
@ -235,7 +220,7 @@ msgstr ""
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -248,6 +233,10 @@ msgstr ""
|
|||
msgid "This private code is not the right one"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr ""
|
||||
|
||||
|
@ -256,9 +245,14 @@ msgid ""
|
|||
"still use the project normally."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
|
||||
msgid "No token provided"
|
||||
|
@ -273,14 +267,10 @@ msgstr ""
|
|||
msgid "Password successfully reset."
|
||||
msgstr ""
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -288,18 +278,12 @@ msgid ""
|
|||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
|
@ -307,7 +291,10 @@ msgstr ""
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
|
@ -350,10 +337,6 @@ msgstr ""
|
|||
msgid "The bill has been modified"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr ""
|
||||
|
||||
|
@ -414,7 +397,7 @@ msgstr ""
|
|||
msgid "edit"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete project"
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "show"
|
||||
|
@ -429,12 +412,20 @@ msgstr ""
|
|||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgstr "Cipta projek ini"
|
||||
msgid "Delete project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr ""
|
||||
|
@ -460,28 +451,18 @@ msgstr ""
|
|||
msgid "Privacy Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save changes"
|
||||
msgid "Edit the project"
|
||||
msgstr ""
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Import fail JSON yang telah dieksport sebelum ini"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr ""
|
||||
|
||||
|
@ -500,6 +481,9 @@ msgstr ""
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
|
@ -564,18 +548,23 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -586,18 +575,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
|
||||
|
@ -659,15 +648,9 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Pembayar"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Tarikh"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr ""
|
||||
|
@ -768,9 +751,6 @@ msgstr ""
|
|||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
|
@ -780,8 +760,7 @@ msgstr ""
|
|||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
|
@ -793,7 +772,7 @@ msgstr ""
|
|||
msgid "Documentation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -815,21 +794,30 @@ msgstr ""
|
|||
msgid "Invite people"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "When?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr ""
|
||||
|
||||
msgid "For what?"
|
||||
msgstr ""
|
||||
|
||||
msgid "How much?"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr ""
|
||||
|
@ -838,19 +826,19 @@ msgstr ""
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "delete"
|
||||
msgstr ""
|
||||
|
||||
msgid "No bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr ""
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add the first participant"
|
||||
msgid "add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "add participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password reminder"
|
||||
|
@ -873,49 +861,31 @@ msgstr ""
|
|||
msgid "Invite people to join this project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgid "Share the Link"
|
||||
msgstr ""
|
||||
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "Kod peribadi"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
|
@ -984,114 +954,3 @@ msgstr ""
|
|||
#~ msgid "Participants to notify"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Import"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Jumlah dibayar"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Bil tidak boleh kosong"
|
||||
|
||||
#~ msgid "Too many failed login attempts, please retry later."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ 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 ""
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Sorry, there was an error while "
|
||||
#~ "trying to send the invitation emails."
|
||||
#~ " Please check the email configuration "
|
||||
#~ "of the server or contact the "
|
||||
#~ "administrator."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add a bill"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email for you."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Specify a (comma separated) list of "
|
||||
#~ "email adresses you want to notify "
|
||||
#~ "about the\n"
|
||||
#~ " creation of this budget "
|
||||
#~ "management project and we will send "
|
||||
#~ "them an email with the invitation "
|
||||
#~ "link."
|
||||
#~ msgstr ""
|
||||
|
||||
|
|
BIN
ihatemoney/translations/nb_NO/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/nb_NO/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -1,24 +1,20 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2022-02-13 16:54+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.11-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Du har akkurat opprettet \"%(project)s\" for å dele dine utgifter"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -29,13 +25,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Prosjektnavn"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "Ny privat kode"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Ny privat kode"
|
||||
|
||||
|
@ -57,12 +46,6 @@ msgstr "Forvalgt valuta"
|
|||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr "En forvalg valutainnstilling skrur på konvertering mellom regninger"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Ukjent feil"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Ugyldig privat kode"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
|
@ -71,8 +54,11 @@ msgstr ""
|
|||
"Dette prosjektet kan ikke settes til «Ingen valuta» fordi det inneholder "
|
||||
"regninger i flere valutaer."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr ""
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importer tidligere eksportert JSON-fil"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Prosjektidentifikator"
|
||||
|
@ -104,6 +90,12 @@ msgstr "Bekreft CAPTCHA-en for å fortsette."
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Skriv inn privat kode for å bekrefte sletting"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Ukjent feil"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Ugyldig privat kode"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get in"
|
||||
msgstr "Til prosjektet"
|
||||
|
@ -129,17 +121,17 @@ msgstr "Passordbekreftelse"
|
|||
msgid "Reset password"
|
||||
msgstr "Tilbakestill passord"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Når?"
|
||||
msgid "Date"
|
||||
msgstr "Dato"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Hva?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Hvem betalte?"
|
||||
msgid "Payer"
|
||||
msgstr "Betaler"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Hvor meget?"
|
||||
msgid "Amount paid"
|
||||
msgstr "Beløp betalt"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Valuta"
|
||||
|
@ -163,6 +155,9 @@ msgstr "Send inn og legg til ny"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "Prosjektforvalg: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Regninger kan ikke være null"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Navn"
|
||||
|
||||
|
@ -186,28 +181,13 @@ msgstr "Allerede medlem av prosjektet"
|
|||
msgid "People to notify"
|
||||
msgstr "Folk å varsle"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Send ut invitasjonene"
|
||||
msgid "Send invites"
|
||||
msgstr "Send invitasjoner"
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "E-posten \"%(email)s\" er ikke gyldig"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Logout"
|
||||
msgstr "Logg ut"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"Kunne ikke sende invitasjoner per e-post. Sjekk at e-postoppsettet på "
|
||||
"tjeneren stemmer, eller kontakt administratoren."
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} og {dual_object_1}"
|
||||
|
@ -235,8 +215,7 @@ msgstr "{prefix}: {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:<br />{errors}"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "For mange mislykkede innloggingsforsøk, prøv igjen senere."
|
||||
|
||||
#, python-format
|
||||
|
@ -249,6 +228,10 @@ msgstr "Angitt symbol er ugyldig"
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "Denne private koden er ikke rett"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Du har akkurat opprettet \"%(project)s\" for å dele dine utgifter"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "En påminnelse har blitt sendt til deg per e-post"
|
||||
|
||||
|
@ -260,10 +243,15 @@ msgstr ""
|
|||
"En påminnelse ble sendt til deg per e-post, men en feil inntraff. Du kan "
|
||||
"fremdeles bruke prosjektet normalt."
|
||||
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "Prosjektidentifikatoren er %(project)s"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"En feil inntraff under forsendelse av passordtilbakestilling til deg per "
|
||||
"e-post. Sjekk at e-postoppsettet til tjeneren er rett, eller kontakt "
|
||||
|
@ -282,15 +270,12 @@ msgstr "Ukjent prosjekt"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "Passord tilbakestilt."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Prosjekt opplastet"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr ""
|
||||
msgid "Invalid JSON"
|
||||
msgstr "Ugyldig JSON"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
|
@ -299,10 +284,6 @@ msgstr ""
|
|||
"Kan ikke legge til regninger i flere valutaer i et prosjekt uten forvalgt "
|
||||
"valuta"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Prosjekt opplastet"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "Prosjekt slettet"
|
||||
|
@ -311,9 +292,6 @@ msgstr "Prosjekt slettet"
|
|||
msgid "Error deleting project"
|
||||
msgstr "Kunne ikke slette prosjekt"
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
|
@ -324,7 +302,10 @@ msgid "Your invitations have been sent"
|
|||
msgstr "Invitasjonene dine har blitt sendt"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Kunne ikke sende invitasjoner per e-post. Sjekk at e-postoppsettet på "
|
||||
"tjeneren stemmer, eller kontakt administratoren."
|
||||
|
@ -373,10 +354,6 @@ msgstr "Regningen har blitt slettet"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "Regningen har blitt endret"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Error deleting project history"
|
||||
msgstr "Skru på prosjekthistorikk"
|
||||
|
@ -444,8 +421,8 @@ msgstr "Handlinger"
|
|||
msgid "edit"
|
||||
msgstr "rediger"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "Slett prosjekt"
|
||||
msgid "delete"
|
||||
msgstr "slett"
|
||||
|
||||
msgid "show"
|
||||
msgstr "vis"
|
||||
|
@ -460,12 +437,21 @@ msgstr "Last ned mobilprogram"
|
|||
msgid "Get it on"
|
||||
msgstr "Til prosjektet"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Are you sure?"
|
||||
msgstr "er du sikker?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Rediger prosjekt"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgstr "Rediger prosjekt"
|
||||
msgid "Delete project"
|
||||
msgstr "Slett prosjekt"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "Importer JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Velg fil"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Last ned prosjektets data"
|
||||
|
@ -494,28 +480,18 @@ msgstr "Avbryt"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Personvernsinnstillinger"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr ""
|
||||
msgid "Edit the project"
|
||||
msgstr "Rediger prosjektet"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr "Dette vil fjerne alle regninger og deltagere i prosjektet!"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Importer tidligere eksportert JSON-fil"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Velg fil"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Rediger denne regningen"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "Legg til en regning"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Alle"
|
||||
|
||||
|
@ -536,6 +512,9 @@ msgstr "Legg til deltager"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "ola@eksempel.no, kari@eksempel.no"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Send ut invitasjonene"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Last nd"
|
||||
|
||||
|
@ -612,21 +591,37 @@ msgstr "Regning %(name)s: La til %(owers_list_str)s på eierlisten"
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr "Regning %(name)s: fjernet %(owers_list_str)s fra eierlisten"
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "IP-adresseregistrering kan skrus på fra innstillingssiden"
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" <i>Prosjektets historikk er avskrudd. Nye handlinger vil ikke"
|
||||
" vises nedenfor. Du kan skru på hisorikk på</i>\n"
|
||||
" <a href=\"%(url)s\">innstillingssiden</a>\n"
|
||||
" "
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Noen tømte antagelig prosjekthistorikken."
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" <i>Tabellen nedenfor viser handlinger registrert før "
|
||||
"prosjekthistorikken ble avskrudd. Du kan\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">tømme prosjekthistorikken</a> for å fjerne"
|
||||
" dem.</i></p>\n"
|
||||
" "
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
|
@ -639,6 +634,12 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "Slett lagrede IP-adresser"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "Ingen historikk å slette"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Tøm prosjekthistorikk"
|
||||
|
||||
#, fuzzy
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Ingen IP-adresser å slette"
|
||||
|
@ -647,12 +648,6 @@ msgstr "Ingen IP-adresser å slette"
|
|||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Slett lagrede IP-adresser"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "Ingen historikk å slette"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Tøm prosjekthistorikk"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Tid"
|
||||
|
||||
|
@ -716,15 +711,9 @@ msgstr "Regningen %(name)s fikk sitt navn endret til %(new_description)s"
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr "Deltager %(name)s: vekting endret fra %(old_weight)s til %(new_weight)s"
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Betaler"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Beløp"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Dato"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Beløp i %(currency)s"
|
||||
|
@ -829,9 +818,6 @@ msgstr "Historikk"
|
|||
msgid "Settings"
|
||||
msgstr "Innstillinger"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Other projects :"
|
||||
msgstr "Andre prosjekter:"
|
||||
|
@ -842,9 +828,9 @@ msgstr "bytt til"
|
|||
msgid "Dashboard"
|
||||
msgstr "Oversikt"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
msgid "Logout"
|
||||
msgstr "Logg ut"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Kode"
|
||||
|
@ -855,7 +841,7 @@ msgstr "Mobilprogram"
|
|||
msgid "Documentation"
|
||||
msgstr "Dokumentasjon"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "Administrasjonsoversiktspanel"
|
||||
|
||||
#, fuzzy
|
||||
|
@ -879,21 +865,30 @@ msgstr "er du sikker?"
|
|||
msgid "Invite people"
|
||||
msgstr "Inviter folk"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Nyere regninger"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Eldre regninger"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "Du kan starte ved å legge til deltagere"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "Legg til en ny regning"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Nyere regninger"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Eldre regninger"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Når?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Hvem betalte?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "For hva?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Hvor meget?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "Lagt til %(date)s"
|
||||
|
@ -902,9 +897,6 @@ msgstr "Lagt til %(date)s"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "Alle, unntagen %(excluded)s"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "slett"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Ingen regninger"
|
||||
|
||||
|
@ -912,13 +904,14 @@ msgstr "Ingen regninger"
|
|||
msgid "Nothing to list yet."
|
||||
msgstr "Ingenting å liste opp enda."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr "Du ønsker antagelig å"
|
||||
|
||||
msgid "add a bill"
|
||||
msgstr "legge til en regning"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgstr "Legg til deltager"
|
||||
msgid "add participants"
|
||||
msgstr "legge til deltagere"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "Passordpåminner"
|
||||
|
@ -942,21 +935,26 @@ msgstr "Tilbakestill passordet ditt"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "Inviter folk til å ta del i dette prosjektet"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Del identifikator og kode"
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"Du kan dele prosjektidentifikatoren og den private koden slik det måtte "
|
||||
"passe deg."
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr ""
|
||||
msgid "Identifier:"
|
||||
msgstr "Identifikator:"
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr ""
|
||||
#, fuzzy
|
||||
msgid "Share the Link"
|
||||
msgstr "Del lenken"
|
||||
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr "Du kan dele denne lenken slik du ønsker"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Send via Emails"
|
||||
|
@ -964,35 +962,15 @@ msgstr "Send via e-poster"
|
|||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"Angi en (kommainndelt) liste over e-postadresser du ønsker å varsle om\n"
|
||||
"opprettelsen av dette budsjetthåndteringsprosjektet, og de vil få en "
|
||||
"e-post om det."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Del identifikator og kode"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "Identifikator:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "Privat kode"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Hvem betaler?"
|
||||
|
||||
|
@ -1249,93 +1227,3 @@ msgstr "Periode"
|
|||
|
||||
#~ msgid "Participants to notify"
|
||||
#~ msgstr "legge til deltagere"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Importer"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Beløp betalt"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Regninger kan ikke være null"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "Prosjektidentifikatoren er %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "Ugyldig JSON"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "er du sikker?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "Importer JSON"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Prosjektets historikk er "
|
||||
#~ "avskrudd. Nye handlinger vil ikke vises"
|
||||
#~ " nedenfor. Du kan skru på hisorikk"
|
||||
#~ " på</i>\n"
|
||||
#~ " <a href=\"%(url)s\">innstillingssiden</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Tabellen nedenfor viser "
|
||||
#~ "handlinger registrert før prosjekthistorikken "
|
||||
#~ "ble avskrudd. Du kan\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">tømme prosjekthistorikken</a>"
|
||||
#~ " for å fjerne dem.</i></p>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "Send invitasjoner"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "vis"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Rediger prosjektet"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "Du ønsker antagelig å"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "legge til deltagere"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
#~ "Du kan dele prosjektidentifikatoren og "
|
||||
#~ "den private koden slik det måtte "
|
||||
#~ "passe deg."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "Del lenken"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr "Du kan dele denne lenken slik du ønsker"
|
||||
|
||||
|
|
BIN
ihatemoney/translations/nl/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/nl/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -1,26 +1,20 @@
|
|||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2024-03-17 12:01+0000\n"
|
||||
"Last-Translator: Xander Jennie <xanderjennie21@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/nl/>\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2021-02-17 02:50+0000\n"
|
||||
"Last-Translator: Sander Kooijmans <weblate@gogognome.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 5.5-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
"Je hebt zojuist het project '%(project)s' aangemaakt om je uitgaven te "
|
||||
"verdelen"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -31,17 +25,12 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Projectnaam"
|
||||
|
||||
msgid "Current private code"
|
||||
msgstr "Huidige Privécode"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr "Voer het huidige privécode in om dit project te bewerken"
|
||||
|
||||
#, fuzzy
|
||||
msgid "New private code"
|
||||
msgstr "Nieuwe privécode"
|
||||
msgstr "Privécode"
|
||||
|
||||
msgid "Enter a new code if you want to change it"
|
||||
msgstr "Voer een nieuwe code in als u deze wilt wijzigen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Email"
|
||||
msgstr "E-mailadres"
|
||||
|
@ -57,24 +46,17 @@ msgstr "Standaard munteenheid"
|
|||
|
||||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
"Door een standaardvaluta in te stellen, is valutaconversie tussen facturen "
|
||||
"mogelijk"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Onbekende fout"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Ongeldige privécode."
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
"Dit project kan niet op 'geen valuta' worden gezet, omdat het facturen in "
|
||||
"meerdere valuta's bevat."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr "Compatibel met mede besteden"
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Eerder geëxporteerd JSON-bestand importeren"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importeren"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Project-id"
|
||||
|
@ -92,16 +74,25 @@ msgid ""
|
|||
msgstr "Er is al een project genaamd (\"%(project)s\"). Kies een andere naam"
|
||||
|
||||
msgid "Which is a real currency: Euro or Petro dollar?"
|
||||
msgstr "Wat is een echte valuta: de euro of de petro-dollar?"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "euro"
|
||||
msgstr "euro"
|
||||
msgstr "Periode"
|
||||
|
||||
msgid "Please, validate the captcha to proceed."
|
||||
msgstr "Valideer de captcha om door te gaan."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Voer de privécode in om de verwijder opdracht te bevestigen"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "Onbekend project"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Invalid private code."
|
||||
msgstr "Privécode"
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Inloggen"
|
||||
|
@ -125,19 +116,19 @@ msgid "Password confirmation"
|
|||
msgstr "Wachtwoord bevestigen"
|
||||
|
||||
msgid "Reset password"
|
||||
msgstr "Wachtwoord opnieuw instellen"
|
||||
msgstr "Wachtwoord herstellen"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Wanneer?"
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Wat?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Wie heeft er betaald?"
|
||||
msgid "Payer"
|
||||
msgstr "Betaler"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Hoeveel?"
|
||||
msgid "Amount paid"
|
||||
msgstr "Betaald bedrag"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Munteenheid"
|
||||
|
@ -161,6 +152,9 @@ msgstr "Versturen en nieuwe toevoegen"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "Projectstandaard: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Rekeningen mogen niet null zijn"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Naam"
|
||||
|
||||
|
@ -173,76 +167,70 @@ msgstr "Gewicht"
|
|||
msgid "Add"
|
||||
msgstr "Toevoegen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "The participant name is invalid"
|
||||
msgstr "De naam van de deelnemer is ongeldig"
|
||||
msgstr "De gebruiker '%(name)s' is verwijderd"
|
||||
|
||||
#, fuzzy
|
||||
msgid "This project already have this participant"
|
||||
msgstr "Deze deelnemer is al lid van het project"
|
||||
|
||||
msgid "People to notify"
|
||||
msgstr "Mensen om op de hoogte te stellen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgid "Send invites"
|
||||
msgstr "Uitnodigingen versturen"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "Het e-mailadres '%(email)s' is onjuist"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Uitloggen"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr "Controleer de e-mailconfiguratie van de server."
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"Controleer de e-mailinstellingen van de server of neem contact op met de "
|
||||
"beheerder: %(admin_email)s"
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} en {dual_object_1}"
|
||||
msgstr ""
|
||||
|
||||
#. Last two items of a list with more than 3 items
|
||||
msgid "{previous_object}, and {end_object}"
|
||||
msgstr "{previous_object} en{end_object}"
|
||||
msgstr ""
|
||||
|
||||
#. Two items in a middle of a list with more than 5 objects
|
||||
msgid "{previous_object}, {next_object}"
|
||||
msgstr "{previous_object}, {next_object}"
|
||||
msgstr ""
|
||||
|
||||
#. First two items of a list with more than 3 items
|
||||
msgid "{start_object}, {next_object}"
|
||||
msgstr "{start_object}, {next_object}"
|
||||
msgstr ""
|
||||
|
||||
msgid "No Currency"
|
||||
msgstr "Geen valuta"
|
||||
msgstr "Geen munteenheid"
|
||||
|
||||
#. Form error with only one error
|
||||
msgid "{prefix}: {error}"
|
||||
msgstr "{prefix}: {error}"
|
||||
msgstr ""
|
||||
|
||||
#. Form error with a list of errors
|
||||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:<br />{errors}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgstr "Te veel mislukte inlogpogingen."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "Te vaak onjuist ingelogd. Probeer het later opnieuw."
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
msgstr "Het admin-wachtwoord is onjuist. Je kunt het nog %(num)d keer proberen."
|
||||
|
||||
msgid "Provided token is invalid"
|
||||
msgstr "Het opgegeven token is ongeldig"
|
||||
msgstr ""
|
||||
|
||||
msgid "This private code is not the right one"
|
||||
msgstr "Deze privécode is onjuist"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr ""
|
||||
"Je hebt zojuist het project '%(project)s' aangemaakt om je uitgaven te "
|
||||
"verdelen"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "Een herinneringsmail is zojuist naar u verzonden"
|
||||
|
||||
|
@ -253,12 +241,18 @@ msgstr ""
|
|||
"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"
|
||||
msgstr "Het project-id is %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"Sorry, er is iets fout gegaan bij het verzenden van een e-mail met "
|
||||
"instructies om je wachtwoord te herstellen."
|
||||
"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"
|
||||
|
@ -272,33 +266,23 @@ msgstr "Onbekend project"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "Wachtwoord is hersteld."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Project succesvol geüpload"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr "Kan CSV niet parseren"
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr "Ontbrekende attribute: %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr "Ongeldige JSON"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Project succesvol geüpload"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "Project is verwijderd"
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr "Kan niet uitloggen"
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "Je bent uitgenodigd om je uitgaven te delen met %(project)s"
|
||||
|
@ -306,8 +290,10 @@ msgstr "Je bent uitgenodigd om je uitgaven te delen met %(project)s"
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "Je uitnodigingen zijn verstuurd"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"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"
|
||||
|
@ -347,18 +333,14 @@ msgid "The bill has been added"
|
|||
msgstr "De rekening is toegevoegd"
|
||||
|
||||
msgid "Error deleting bill"
|
||||
msgstr "Fout bij verwijderen factuur"
|
||||
msgstr ""
|
||||
|
||||
msgid "The bill has been deleted"
|
||||
msgstr "De factuur is verwijderd"
|
||||
msgstr "De rekening is verwijderd"
|
||||
|
||||
msgid "The bill has been modified"
|
||||
msgstr "De rekening is aangepast"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Error deleting project history"
|
||||
msgstr "Projectgeschiedenis inschakelen"
|
||||
|
@ -386,8 +368,9 @@ msgstr "Terug naar de lijst"
|
|||
msgid "Administration tasks are currently disabled."
|
||||
msgstr "Beheerderstaken zijn momenteel uitgeschakeld."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Authentication"
|
||||
msgstr "Authenticatie"
|
||||
msgstr "Documentatie"
|
||||
|
||||
msgid "The project you are trying to access do not exist, do you want to"
|
||||
msgstr "Het project dat je probeert te benaderen bestaat niet. Wil je"
|
||||
|
@ -404,17 +387,18 @@ msgstr "Nieuw project aanmaken"
|
|||
msgid "Project"
|
||||
msgstr "Project"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Number of participants"
|
||||
msgstr "Aantal deelnemers"
|
||||
msgstr "deelnemers toevoegen"
|
||||
|
||||
msgid "Number of bills"
|
||||
msgstr "Aantal facturen"
|
||||
msgstr "Aantal rekeningen"
|
||||
|
||||
msgid "Newest bill"
|
||||
msgstr "Nieuwste factuur"
|
||||
msgstr "Nieuwste rekening"
|
||||
|
||||
msgid "Oldest bill"
|
||||
msgstr "Oudste factuur"
|
||||
msgstr "Oudste rekening"
|
||||
|
||||
msgid "Actions"
|
||||
msgstr "Acties"
|
||||
|
@ -422,8 +406,8 @@ msgstr "Acties"
|
|||
msgid "edit"
|
||||
msgstr "bewerken"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "Project verwijderen"
|
||||
msgid "delete"
|
||||
msgstr "verwijderen"
|
||||
|
||||
msgid "show"
|
||||
msgstr "tonen"
|
||||
|
@ -431,18 +415,30 @@ msgstr "tonen"
|
|||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr "De overzichtspagina is momenteel uitgeschakeld."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Download Mobile Application"
|
||||
msgstr "Mobiele applicatie downloaden"
|
||||
msgstr "Mobiele app"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Get it on"
|
||||
msgstr "Inloggen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Are you sure?"
|
||||
msgstr "weet je het zeker?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Project aanpassen"
|
||||
|
||||
msgid "Import project"
|
||||
msgstr "Project importeren"
|
||||
#, fuzzy
|
||||
msgid "Delete project"
|
||||
msgstr "Project aanpassen"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "JSON importeren"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Bestand kiezen"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Projectgegevens downloaden"
|
||||
|
@ -470,28 +466,18 @@ msgstr "Annuleren"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Privacy-instellingen"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr ""
|
||||
msgid "Edit the project"
|
||||
msgstr "Project bewerken"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Eerder geëxporteerd JSON-bestand importeren"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Bestand kiezen"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Deze rekening bewerken"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "Rekening toevoegen"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Iedereen"
|
||||
|
||||
|
@ -511,6 +497,9 @@ msgstr "Deelnemer toevoegen"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "jan.jansen@voorbeeld.nl, maria.magdalena@website.nl"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Uitnodigingen versturen"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Downloaden"
|
||||
|
||||
|
@ -582,21 +571,31 @@ msgstr ""
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" <i>Dit project heeft de geschiedenis uitgeschakeld. Nieuwe "
|
||||
"acties zullen niet hieronder verschijnen. Je kunt de geschiedenis "
|
||||
"aanzetten op de </i>\n"
|
||||
" <a href=\"%(url)s\">instellingen-pagina</a>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Iemand heeft waarschijnlijk de projectgeschiedenis verwijderd."
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
"recording disabled. "
|
||||
|
@ -605,18 +604,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Geen IP-adressen te verwijderen"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Verwijder opgeslagen IP-adressen"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "Geen geschiedenis om te wissen"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Verwijder Projectgeschiedenis"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Geen IP-adressen te verwijderen"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Verwijder opgeslagen IP-adressen"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Tijd"
|
||||
|
||||
|
@ -678,15 +677,9 @@ msgstr ""
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Betaler"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Hoeveelheid"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Hoeveelheid in %(currency)s"
|
||||
|
@ -789,9 +782,6 @@ msgstr "Geschiedenis"
|
|||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Overige projecten:"
|
||||
|
||||
|
@ -801,9 +791,8 @@ msgstr "overschakelen naar"
|
|||
msgid "Dashboard"
|
||||
msgstr "Overzicht"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr ""
|
||||
msgid "Logout"
|
||||
msgstr "Uitloggen"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
@ -814,7 +803,7 @@ msgstr "Mobiele app"
|
|||
msgid "Documentation"
|
||||
msgstr "Documentatie"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "Administratie-overzicht"
|
||||
|
||||
#, fuzzy
|
||||
|
@ -837,21 +826,30 @@ msgstr "weet je het zeker?"
|
|||
msgid "Invite people"
|
||||
msgstr "Anderen uitnodigen"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "Begin met het toevoegen van deelnemers"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "Nieuwe rekening toevoegen"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Wanneer?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Wie heeft er betaald?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "Voor wat?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Hoeveel?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "Toegevoegd op %(date)s"
|
||||
|
@ -860,22 +858,20 @@ msgstr "Toegevoegd op %(date)s"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "Iedereen, behalve %(excluded)s"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "verwijderen"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Geen rekeningen"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "Nog niks."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr "Waarschijnlijk wil je"
|
||||
|
||||
msgid "add a bill"
|
||||
msgstr "een rekening toevoegen"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgstr "Deelnemer toevoegen"
|
||||
msgid "add participants"
|
||||
msgstr "deelnemers toevoegen"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "Wachtwoordhint"
|
||||
|
@ -899,55 +895,38 @@ msgstr "Wachtwoord herstellen"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "Nodig mensen uit voor dit project"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Versturen via e-mail"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
"Stel een (kommagescheiden) lijst op met e-mailadressen van personen die "
|
||||
"je op de\n"
|
||||
" hoogte wilt stellen van dit project - wij sturen hen een "
|
||||
"e-mail."
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Identificatie en code delen"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"Je kunt de projectidentificatie en privécode delen via welk "
|
||||
"communicatieplatform dan ook."
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "Identificatie:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "Privécode"
|
||||
msgid "Share the Link"
|
||||
msgstr "Link delen"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr "Je kunt de volgende link direct delen"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Versturen via e-mail"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"Stel een (kommagescheiden) lijst op met e-mailadressen van personen die "
|
||||
"je op de\n"
|
||||
" hoogte wilt stellen van dit project - wij sturen hen een "
|
||||
"e-mail."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Wie betaalt?"
|
||||
|
@ -1070,84 +1049,3 @@ msgstr "Periode"
|
|||
|
||||
#~ msgid "People to notify"
|
||||
#~ msgstr "Te melden personen"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Importeren"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Betaald bedrag"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Rekeningen mogen niet null zijn"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "Het project-id is %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "Ongeldige JSON"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "weet je het zeker?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "JSON importeren"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Dit project heeft de "
|
||||
#~ "geschiedenis uitgeschakeld. Nieuwe acties "
|
||||
#~ "zullen niet hieronder verschijnen. Je "
|
||||
#~ "kunt de geschiedenis aanzetten op de "
|
||||
#~ "</i>\n"
|
||||
#~ " <a href=\"%(url)s\">instellingen-pagina</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "Uitnodigingen versturen"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "tonen"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Project bewerken"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "Waarschijnlijk wil je"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "deelnemers toevoegen"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
#~ "Je kunt de projectidentificatie en "
|
||||
#~ "privécode delen via welk communicatieplatform"
|
||||
#~ " dan ook."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "Link delen"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr "Je kunt de volgende link direct delen"
|
||||
|
|
|
@ -1,932 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-06-15 16:06+0200\n"
|
||||
"PO-Revision-Date: 2024-07-03 19:09+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <quentinantonin@free.fr>\n"
|
||||
"Language-Team: Occitan <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/oc/>\n"
|
||||
"Language: oc\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 5.7-dev\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Venètz de crear « %(project)s » per despartir vòstras despensas"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
msgstr ""
|
||||
"Quantitat o expression non valida. Sonque los nombre e operator +-*/ son "
|
||||
"acceptats."
|
||||
|
||||
msgid "Project name"
|
||||
msgstr "Nom del projècte"
|
||||
|
||||
msgid "Current private code"
|
||||
msgstr "Còdi d’accès actual"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr "Picatz lo còdi d’accès existissent per editar lo projècte"
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Còdi privat novèl"
|
||||
|
||||
msgid "Enter a new code if you want to change it"
|
||||
msgstr "Picatz lo còdi novèl se lo volètz cambiar"
|
||||
|
||||
msgid "Email"
|
||||
msgstr "Adreça electronica"
|
||||
|
||||
msgid "Enable project history"
|
||||
msgstr "Activar l’istoric de projècte"
|
||||
|
||||
msgid "Use IP tracking for project history"
|
||||
msgstr "Reculhir las adreças IP dins l’istoric de projècte"
|
||||
|
||||
msgid "Default Currency"
|
||||
msgstr "Moneda predeterminada"
|
||||
|
||||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Error desconeguda"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Còdi d’accès invalid."
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr "Compatible amb Cospend"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Identificant del projècte"
|
||||
|
||||
msgid "Private code"
|
||||
msgstr "Còdi privat"
|
||||
|
||||
msgid "Create the project"
|
||||
msgstr "Crear lo projècte"
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"A project with this identifier (\"%(project)s\") already exists. Please "
|
||||
"choose a new identifier"
|
||||
msgstr ""
|
||||
|
||||
msgid "Which is a real currency: Euro or Petro dollar?"
|
||||
msgstr ""
|
||||
|
||||
msgid "euro"
|
||||
msgstr "èuro"
|
||||
|
||||
msgid "Please, validate the captcha to proceed."
|
||||
msgstr "Se vos plai, validatz el captcha per contunhar."
|
||||
|
||||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Picatz lo còdi d’accès per confirmar la supression"
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Dintrar"
|
||||
|
||||
msgid "Admin password"
|
||||
msgstr "Senhal d’administracion"
|
||||
|
||||
msgid "Send me the code by email"
|
||||
msgstr "Mandatz-me lo còdi per corrièl"
|
||||
|
||||
msgid "This project does not exists"
|
||||
msgstr "Aqueste projècte existís pas"
|
||||
|
||||
msgid "Password mismatch"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Senhal"
|
||||
|
||||
msgid "Password confirmation"
|
||||
msgstr "Confirmacion del senhla"
|
||||
|
||||
msgid "Reset password"
|
||||
msgstr "Reïnicializar lo senhal"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Quand ?"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Qué ?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Qual paguèt ?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Quant ?"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Moneda"
|
||||
|
||||
msgid "External link"
|
||||
msgstr "Ligam extèrne"
|
||||
|
||||
msgid "A link to an external document, related to this bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "For whom?"
|
||||
msgstr "Per qual ?"
|
||||
|
||||
msgid "Submit"
|
||||
msgstr "Enviar"
|
||||
|
||||
msgid "Submit and add a new one"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Project default: %(currency)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
msgid "Weights should be positive"
|
||||
msgstr ""
|
||||
|
||||
msgid "Weight"
|
||||
msgstr "Pes"
|
||||
|
||||
msgid "Add"
|
||||
msgstr "Apondre"
|
||||
|
||||
msgid "The participant name is invalid"
|
||||
msgstr "Lo nom del participant es incorrècte"
|
||||
|
||||
msgid "This project already have this participant"
|
||||
msgstr "Aqueste projècte a ja aqueste participant"
|
||||
|
||||
msgid "People to notify"
|
||||
msgstr "Personas de convidar"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Enviar las invitacions"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Desconnexion"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr ""
|
||||
|
||||
#. Last two items of a list with more than 3 items
|
||||
msgid "{previous_object}, and {end_object}"
|
||||
msgstr ""
|
||||
|
||||
#. Two items in a middle of a list with more than 5 objects
|
||||
msgid "{previous_object}, {next_object}"
|
||||
msgstr "{previous_object}, {next_object}"
|
||||
|
||||
#. First two items of a list with more than 3 items
|
||||
msgid "{start_object}, {next_object}"
|
||||
msgstr "{start_object}, {next_object}"
|
||||
|
||||
msgid "No Currency"
|
||||
msgstr "Cap de moneda"
|
||||
|
||||
#. Form error with only one error
|
||||
msgid "{prefix}: {error}"
|
||||
msgstr "{prefix} : {error}"
|
||||
|
||||
#. Form error with a list of errors
|
||||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix} :<br />{errors}"
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
msgstr ""
|
||||
|
||||
msgid "Provided token is invalid"
|
||||
msgstr "Aqueste geton es invalid"
|
||||
|
||||
msgid "This private code is not the right one"
|
||||
msgstr ""
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"We tried to send you an reminder email, but there was an error. You can "
|
||||
"still use the project normally."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
msgstr ""
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid token"
|
||||
msgstr "Geton invalid"
|
||||
|
||||
msgid "Unknown project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password successfully reset."
|
||||
msgstr ""
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr "Atribut mancant : %(attribute)s"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your invitations have been sent"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error activating participant"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(name)s is part of this project again"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error removing participant"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Participant '%(name)s' has been deactivated. It will still appear in the "
|
||||
"list until its balance reach zero."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Participant '%(name)s' has been removed"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Participant '%(name)s' has been modified"
|
||||
msgstr ""
|
||||
|
||||
msgid "The bill has been added"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "The bill has been deleted"
|
||||
msgstr ""
|
||||
|
||||
msgid "The bill has been modified"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr ""
|
||||
|
||||
msgid "Deleted project history."
|
||||
msgstr ""
|
||||
|
||||
msgid "Error deleting recorded IP addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "Deleted recorded IP addresses in project history."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sorry, we were unable to find the page you've asked for."
|
||||
msgstr ""
|
||||
|
||||
msgid "The best thing to do is probably to get back to the main page."
|
||||
msgstr ""
|
||||
|
||||
msgid "Back to the list"
|
||||
msgstr ""
|
||||
|
||||
msgid "Administration tasks are currently disabled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Authentication"
|
||||
msgstr ""
|
||||
|
||||
msgid "The project you are trying to access do not exist, do you want to"
|
||||
msgstr ""
|
||||
|
||||
msgid "create it"
|
||||
msgstr ""
|
||||
|
||||
msgid "?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create a new project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project"
|
||||
msgstr "Projècte"
|
||||
|
||||
msgid "Number of participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Number of bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Newest bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Oldest bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
|
||||
msgid "edit"
|
||||
msgstr "modifica"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr ""
|
||||
|
||||
msgid "show"
|
||||
msgstr "mostrar"
|
||||
|
||||
msgid "The Dashboard is currently deactivated."
|
||||
msgstr ""
|
||||
|
||||
msgid "Download Mobile Application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get it on"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bill items"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download the list of bills with owner, amount, reason,... "
|
||||
msgstr ""
|
||||
|
||||
msgid "Settle plans"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download the list of transactions needed to settle the current bills."
|
||||
msgstr ""
|
||||
|
||||
msgid "Can't remember the password?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancel"
|
||||
msgstr "Anullar"
|
||||
|
||||
msgid "Privacy Settings"
|
||||
msgstr "Paramètres de confidencialitat"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr "Enregistrar las modificacions"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Import previously exported project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr ""
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Tot lo monde"
|
||||
|
||||
msgid "No one"
|
||||
msgstr "Degun"
|
||||
|
||||
msgid "More options"
|
||||
msgstr "Mai d'opcions"
|
||||
|
||||
msgid "Add participant"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edit this participant"
|
||||
msgstr ""
|
||||
|
||||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr ""
|
||||
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disabled Project History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disabled Project History & IP Address Recording"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enabled Project History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disabled IP Address Recording"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enabled Project History & IP Address Recording"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enabled IP Address Recording"
|
||||
msgstr ""
|
||||
|
||||
msgid "History Settings Changed"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: %(property_name)s changed from %(before)s to %(after)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: %(property_name)s changed to %(after)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm Remove IP Adresses"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Are you sure you want to delete all recorded IP addresses from this "
|
||||
"project?\n"
|
||||
" The rest of the project history will be unaffected. This "
|
||||
"action cannot be undone."
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm deletion"
|
||||
msgstr "Confirmar la supression"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Tampar"
|
||||
|
||||
msgid "Delete Confirmation"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Are you sure you want to erase all history for this project? This action "
|
||||
"cannot be undone."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: added %(owers_list_str)s to owers list"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr ""
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
msgstr ""
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
"recording disabled. "
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete stored IP addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr ""
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Time"
|
||||
msgstr ""
|
||||
|
||||
msgid "Event"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address recording can be enabled on the settings page"
|
||||
msgstr ""
|
||||
|
||||
msgid "IP address recording can be disabled on the settings page"
|
||||
msgstr ""
|
||||
|
||||
msgid "From IP"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Project %(name)s added"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s added"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s added"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project private code changed"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Project renamed to %(new_project_name)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Project contact email changed to %(new_email)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Project settings modified"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s deactivated"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s reactivated"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s renamed to %(new_name)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s renamed to %(new_description)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Pagaire"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Soma"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s modified"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s modified"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s removed"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s removed"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Project %(name)s changed in an unknown way"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s changed in an unknown way"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Participant %(name)s changed in an unknown way"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nothing to list"
|
||||
msgstr "Pas res a listar"
|
||||
|
||||
msgid "Someone probably cleared the project history."
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage your shared <br />expenses, easily"
|
||||
msgstr ""
|
||||
|
||||
msgid "Try out the demo"
|
||||
msgstr ""
|
||||
|
||||
msgid "You're sharing a house?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Going on holidays with friends?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Simply sharing money with others?"
|
||||
msgstr ""
|
||||
|
||||
msgid "We can help!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in to an existing project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log in"
|
||||
msgstr "Connexion"
|
||||
|
||||
msgid "can't remember your password?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create"
|
||||
msgstr "Crear"
|
||||
|
||||
msgid ""
|
||||
"Don\\'t reuse a personal password. Choose a private code and send it to "
|
||||
"your friends"
|
||||
msgstr ""
|
||||
|
||||
msgid "Account manager"
|
||||
msgstr "Gestionari de compte"
|
||||
|
||||
msgid "Bills"
|
||||
msgstr "Facturas"
|
||||
|
||||
msgid "Settle"
|
||||
msgstr ""
|
||||
|
||||
msgid "Statistics"
|
||||
msgstr "Estatisticas"
|
||||
|
||||
msgid "Languages"
|
||||
msgstr "Lengas"
|
||||
|
||||
msgid "Projects"
|
||||
msgstr "Projèctes"
|
||||
|
||||
msgid "Start a new project"
|
||||
msgstr ""
|
||||
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr ""
|
||||
|
||||
msgid "switch to"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr "Panèl d’administracion"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr ""
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Còdi"
|
||||
|
||||
msgid "Mobile Application"
|
||||
msgstr ""
|
||||
|
||||
msgid "Documentation"
|
||||
msgstr "Documentacion"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgstr "Panèl d’administracion"
|
||||
|
||||
msgid "Legal information"
|
||||
msgstr ""
|
||||
|
||||
msgid "\"I hate money\" is free software"
|
||||
msgstr ""
|
||||
|
||||
msgid "you can contribute and improve it!"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "%(amount)s each"
|
||||
msgstr "%(amount)s cadun"
|
||||
|
||||
msgid "you sure?"
|
||||
msgstr "O volètz vertadièrament ?"
|
||||
|
||||
msgid "Invite people"
|
||||
msgstr "Convidar de monde"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr ""
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "Per qué ?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Everyone but %(excluded)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "delete"
|
||||
msgstr "suprimir"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Cap de factura"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "Pas res a listar pel moment."
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgstr ""
|
||||
|
||||
msgid "Add the first participant"
|
||||
msgstr ""
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"A link to reset your password has been sent to you, please check your "
|
||||
"emails."
|
||||
msgstr ""
|
||||
|
||||
msgid "Return to home page"
|
||||
msgstr ""
|
||||
|
||||
msgid "Your projects"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset your password"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invite people to join this project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr ""
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr ""
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
msgstr ""
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Private code:"
|
||||
msgstr "Còdi privat :"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgstr ""
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Qual paga ?"
|
||||
|
||||
msgid "To whom?"
|
||||
msgstr "A qual ?"
|
||||
|
||||
msgid "Who?"
|
||||
msgstr "Qual ?"
|
||||
|
||||
msgid "Balance"
|
||||
msgstr ""
|
||||
|
||||
msgid "deactivate"
|
||||
msgstr ""
|
||||
|
||||
msgid "reactivate"
|
||||
msgstr ""
|
||||
|
||||
msgid "Paid"
|
||||
msgstr "Pagat"
|
||||
|
||||
msgid "Spent"
|
||||
msgstr "Despensat"
|
||||
|
||||
msgid "Expenses by Month"
|
||||
msgstr "Despensas per mes"
|
||||
|
||||
msgid "Period"
|
||||
msgstr "Periòde"
|
BIN
ihatemoney/translations/pl/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/pl/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -2,9 +2,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2023-08-24 18:48+0000\n"
|
||||
"Last-Translator: Eryk Michalak <gnu.ewm@protonmail.com>\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2022-09-27 14:19+0000\n"
|
||||
"Last-Translator: Andrzej Ochodek <andrzej.ochodek@gmail.com>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/i-hate-money/"
|
||||
"i-hate-money/pl/>\n"
|
||||
"Language: pl\n"
|
||||
|
@ -13,13 +13,9 @@ msgstr ""
|
|||
"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 5.0\n"
|
||||
"X-Generator: Weblate 4.14.1\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Właśnie utworzyłeś „%(project)s”, aby podzielić się wydatkami"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -30,12 +26,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nazwa projektu"
|
||||
|
||||
msgid "Current private code"
|
||||
msgstr "Bieżący kod prywatny"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr "Wprowadź kod prywatny aby edytować projekt"
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Nowy kod prywatny"
|
||||
|
||||
|
@ -56,24 +46,20 @@ msgstr "Domyślna waluta"
|
|||
|
||||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr ""
|
||||
"Wybranie domyślnej waluty pozwala na konwersję walutową pomiędzy "
|
||||
"rachunkami"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Nieznany błąd"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Nieprawidłowy kod prywatny."
|
||||
"Wybranie domyślnej waluty pozwala na konwersję walutową pomiędzy rachunkami"
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
"Ten projekt nie może zostać oznaczony jako 'bez waluty', ponieważ zawiera"
|
||||
" on rachunki w różnych walutach."
|
||||
"Ten projekt nie może zostać oznaczony jako 'bez waluty', ponieważ zawiera on "
|
||||
"rachunki w różnych walutach."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr "Zgodne z Cospend"
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Zaimportuj wcześniej wyeksportowany plik JSON"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importuj"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Identyfikator projektu"
|
||||
|
@ -89,8 +75,8 @@ msgid ""
|
|||
"A project with this identifier (\"%(project)s\") already exists. Please "
|
||||
"choose a new identifier"
|
||||
msgstr ""
|
||||
"Projekt o tym identyfikatorze (\"%(project)s\") już istnieje. Wybierz "
|
||||
"nowy identyfikator"
|
||||
"Projekt o tym identyfikatorze (\"%(project)s\") już istnieje. Wybierz nowy "
|
||||
"identyfikator"
|
||||
|
||||
msgid "Which is a real currency: Euro or Petro dollar?"
|
||||
msgstr "Która waluta jest prawdziwa: euro czy petrodolar?"
|
||||
|
@ -104,6 +90,12 @@ msgstr "Rozwiąż captcha, by kontynuować."
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Wprowadź kod prywatny w celu potwierdzenia usunięcia"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Nieznany błąd"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Nieprawidłowy kod prywatny."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Wejdź"
|
||||
|
||||
|
@ -128,17 +120,17 @@ msgstr "Potwierdzenie hasła"
|
|||
msgid "Reset password"
|
||||
msgstr "Zmień hasło"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Kiedy?"
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "Co?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Kto zapłacił?"
|
||||
msgid "Payer"
|
||||
msgstr "Płatnik"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Jak dużo?"
|
||||
msgid "Amount paid"
|
||||
msgstr "Zapłacona kwota"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Waluta"
|
||||
|
@ -162,6 +154,9 @@ msgstr "Zatwierdź i dodaj nowy"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "Wartość domyślna projektu: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Rachunki nie mogą być zerowe"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Nazwa"
|
||||
|
||||
|
@ -183,27 +178,13 @@ msgstr "Ten projekt ma już tego członka"
|
|||
msgid "People to notify"
|
||||
msgstr "Osoby do powiadomienia"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgid "Send invites"
|
||||
msgstr "Wyślij zaproszenia"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "Ten email %(email)s jest nieprawidłowy"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Wyloguj"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr "Prosimy sprawdzić konfigurację e-mail serwera."
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
msgstr ""
|
||||
"Prosimy sprawdzić konfigurację e-mail serwera lub skontaktować się z "
|
||||
"administratorem: %(admin_email)s"
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} i {dual_object_1}"
|
||||
|
@ -231,8 +212,8 @@ msgstr "{prefix}: {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:<br />{errors}"
|
||||
|
||||
msgid "Too many failed login attempts."
|
||||
msgstr "Zbyt wiele nieudanych prób logowania."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "Zbyt wiele nieudanych prób logowania, spróbuj ponownie później."
|
||||
|
||||
#, python-format
|
||||
msgid "This admin password is not the right one. Only %(num)d attempts left."
|
||||
|
@ -244,6 +225,10 @@ msgstr "Podany token jest niepoprawny"
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "Ten prywatny kod jest niewłaściwy"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Właśnie utworzyłeś „%(project)s”, aby podzielić się wydatkami"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "Wiadomość e-mail z przypomnieniem została właśnie wysłana"
|
||||
|
||||
|
@ -254,12 +239,18 @@ msgstr ""
|
|||
"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"
|
||||
msgstr "Identyfikator projektu to %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"contact the administrator."
|
||||
msgstr ""
|
||||
"Przepraszamy, wystąpił błąd podczas wysyłania wiadomości e-mail z "
|
||||
"instrukcjami resetowania hasła."
|
||||
"instrukcjami resetowania hasła. Sprawdź konfigurację e-mail serwera lub "
|
||||
"skontaktuj się z administratorem."
|
||||
|
||||
msgid "No token provided"
|
||||
msgstr "Nie podano tokena"
|
||||
|
@ -273,25 +264,17 @@ msgstr "Nieznany projekt"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "Hasło zostało pomyślnie zresetowane."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr "Ustawienia projektu zostały pomyślnie zmienione."
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Projekt został pomyślnie przesłany"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr "Nie udało się odczytać pliku CSV"
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr "Brakujący atrybut: %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr "Niepoprawny JSON"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
"currency"
|
||||
msgstr ""
|
||||
"Nie można dodawać rachunków w wielu walutach do projektu bez waluty "
|
||||
"domyślnej"
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Projekt został pomyślnie przesłany"
|
||||
"Nie można dodawać rachunków w wielu walutach do projektu bez waluty domyślnej"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "Projekt został pomyślnie usunięty"
|
||||
|
@ -299,9 +282,6 @@ msgstr "Projekt został pomyślnie usunięty"
|
|||
msgid "Error deleting project"
|
||||
msgstr "Błąd podczas usuwania projektu"
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr "Nie można się wylogować"
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "Zostałeś zaproszony do podzielenia się swoimi wydatkami w %(project)s"
|
||||
|
@ -309,10 +289,14 @@ msgstr "Zostałeś zaproszony do podzielenia się swoimi wydatkami w %(project)s
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "Twoje zaproszenia zostały wysłane"
|
||||
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator."
|
||||
msgstr ""
|
||||
"Przepraszamy, wystąpił błąd podczas próby wysłania wiadomości e-mail z "
|
||||
"zaproszeniem."
|
||||
"zaproszeniem. Sprawdź konfigurację e-mail serwera lub skontaktuj się z "
|
||||
"administratorem."
|
||||
|
||||
#, python-format
|
||||
msgid "%(member)s has been added"
|
||||
|
@ -333,8 +317,8 @@ msgid ""
|
|||
"Participant '%(name)s' has been deactivated. It will still appear in the "
|
||||
"list until its balance reach zero."
|
||||
msgstr ""
|
||||
"Uczestnik „%(name)s” został wyłączony. Będzie nadal pojawiać się na "
|
||||
"liście użytkowników, dopóki jego saldo nie wyniesie zero."
|
||||
"Uczestnik „%(name)s” został wyłączony. Będzie nadal pojawiać się na liście "
|
||||
"użytkowników, dopóki jego saldo nie wyniesie zero."
|
||||
|
||||
#, python-format
|
||||
msgid "Participant '%(name)s' has been removed"
|
||||
|
@ -356,10 +340,6 @@ msgstr "Rachunek został usunięty"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "Rachunek został zmieniony"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr "%(lang)s nie jest obsługowanym językiem"
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr "Błąd podczas usuwania historii projektu"
|
||||
|
||||
|
@ -422,8 +402,8 @@ msgstr "Akcje"
|
|||
msgid "edit"
|
||||
msgstr "edytuj"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "Usuń projekt"
|
||||
msgid "delete"
|
||||
msgstr "usuń"
|
||||
|
||||
msgid "show"
|
||||
msgstr "pokaż"
|
||||
|
@ -437,11 +417,20 @@ msgstr "Pobierz aplikację mobilną"
|
|||
msgid "Get it on"
|
||||
msgstr "Pobierz na"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr "Czy jesteś pewien?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Edytuj projekt"
|
||||
|
||||
msgid "Import project"
|
||||
msgstr "Importuj projekt"
|
||||
msgid "Delete project"
|
||||
msgstr "Usuń projekt"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "Importuj JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Wybierz plik"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Pobierz dane projektu"
|
||||
|
@ -467,17 +456,12 @@ msgstr "Anuluj"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Ustawienia prywatności"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr "Zapisz zmiany"
|
||||
msgid "Edit the project"
|
||||
msgstr "Edytuj projekt"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr "Spowoduje to usunięcie wszystkich rachunków i uczestników tego projektu!"
|
||||
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Zaimportuj wcześniej wyeksportowany projekt"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Wybierz plik"
|
||||
msgstr ""
|
||||
"Spowoduje to usunięcie wszystkich rachunków i uczestników tego projektu!"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Edytuj ten rachunek"
|
||||
|
@ -485,9 +469,6 @@ msgstr "Edytuj ten rachunek"
|
|||
msgid "Add a bill"
|
||||
msgstr "Dodaj rachunek"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr "Dozwolone są proste operacje, np. (18+36.2)/3"
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Wszyscy"
|
||||
|
||||
|
@ -506,6 +487,9 @@ msgstr "Edytuj tego uczestnika"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "jan.kowalski@przykład.com, anna.nowak@strona.com"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Wyślij zaproszenia"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Pobierz"
|
||||
|
||||
|
@ -532,7 +516,8 @@ msgstr "Ustawienia historii zmienione"
|
|||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: %(property_name)s changed from %(before)s to %(after)s"
|
||||
msgstr "Rachunek %(name)s: %(property_name)s zmieniono z %(before)s na %(after)s"
|
||||
msgstr ""
|
||||
"Rachunek %(name)s: %(property_name)s zmieniono z %(before)s na %(after)s"
|
||||
|
||||
#, python-format
|
||||
msgid "Bill %(name)s: %(property_name)s changed to %(after)s"
|
||||
|
@ -576,22 +561,36 @@ msgstr "Bill %(name)s: dodano %(owers_list_str)s do listy właścicieli"
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr "Bill %(name)s: usunięto %(owers_list_str)s z listy właścicieli"
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Ten projekt ma wyłączoną historię. Nowe działania nie pojawią się poniżej."
|
||||
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "Możliwe jest włączenie historii na stronie ustawień."
|
||||
"\n"
|
||||
" <i>Historia tego projektu została wyłączona. Nowe działania "
|
||||
"nie pojawią się poniżej. Możesz włączyć historię w</i>\n"
|
||||
" <a href=\"%(url)s\">ustawieniach</a>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Poniższa tabela przedstawia działania zarejestrowane przed wyłączeniem "
|
||||
"historii projektu."
|
||||
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Możesz wyczyścić historię projektu aby ją usunąć."
|
||||
"\n"
|
||||
" <i>Poniższa tabela przedstawia działania zarejestrowane przed"
|
||||
" wyłączeniem historii projektu. Możesz\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">wyczyścić historię projektu</a>, aby je "
|
||||
"usunąć.</i></p>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
|
@ -603,18 +602,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "Usuń przechowywane adresy IP"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Brak adresów IP do usunięcia"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Usuń przechowywane adresy IP"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "Brak historii do usunięcia"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Wyczyść historię projektu"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Brak adresów IP do usunięcia"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Usuń przechowywane adresy IP"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Czas"
|
||||
|
||||
|
@ -651,7 +650,8 @@ msgstr "Nazwa projektu zmieniona na %(new_project_name)s"
|
|||
|
||||
#, python-format
|
||||
msgid "Project contact email changed to %(new_email)s"
|
||||
msgstr "Adres e-mail osoby kontaktowej projektu został zmieniony na %(new_email)s"
|
||||
msgstr ""
|
||||
"Adres e-mail osoby kontaktowej projektu został zmieniony na %(new_email)s"
|
||||
|
||||
msgid "Project settings modified"
|
||||
msgstr "Zmieniono ustawienia projektu"
|
||||
|
@ -676,15 +676,9 @@ msgstr "Rachunek %(name)s zmienił nazwę na %(new_description)s"
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr "Uczestnik %(name)s: zmiana wagi z %(old_weight)s na %(new_weight)s"
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Płatnik"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Ilość"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Ilość w %(currency)s"
|
||||
|
@ -787,9 +781,6 @@ msgstr "Historia"
|
|||
msgid "Settings"
|
||||
msgstr "Ustawienia"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr "Kanał RSS"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Inne projekty:"
|
||||
|
||||
|
@ -799,9 +790,8 @@ msgstr "przełącz na"
|
|||
msgid "Dashboard"
|
||||
msgstr "Kokpit"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr "Prosimy spróbować ponownie po %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr "Wyloguj"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Kod"
|
||||
|
@ -812,7 +802,7 @@ msgstr "Aplikacja mobilna"
|
|||
msgid "Documentation"
|
||||
msgstr "Dokumentacja"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "Kokpit administracyjny"
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -834,21 +824,30 @@ msgstr "jesteś pewny?"
|
|||
msgid "Invite people"
|
||||
msgstr "Zaproś ludzi"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Nowsze rachunki"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Starsze rachunki"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "Powinieneś zacząć od dodania uczestników"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "Dodaj nowy rachunek"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Nowsze rachunki"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Starsze rachunki"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Kiedy?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Kto zapłacił?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "Za co?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Jak dużo?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "Dodano %(date)s"
|
||||
|
@ -857,20 +856,20 @@ msgstr "Dodano %(date)s"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "Wszyscy poza %(excluded)s"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "usuń"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Brak rachunków"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "Nie ma jeszcze żadnej listy."
|
||||
|
||||
msgid "Add your first bill"
|
||||
msgstr "Dodaj swój pierwszy rachunek"
|
||||
msgid "You probably want to"
|
||||
msgstr "Prawdopodobnie chcesz"
|
||||
|
||||
msgid "Add the first participant"
|
||||
msgstr "Dodaj pierwszego uczestnika"
|
||||
msgid "add a bill"
|
||||
msgstr "dodać rachunek"
|
||||
|
||||
msgid "add participants"
|
||||
msgstr "dodać członków"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "Przypomnienie hasła"
|
||||
|
@ -894,61 +893,40 @@ msgstr "Zresetuj swoje hasło"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "Zaproś ludzi do dołączenia do tego projektu"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr "Udostępnij link z zaproszeniem"
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
"Najłatwiejszym sposobem zapraszania nowych osób jest podanie im poniższego "
|
||||
"linku ze zaproszeniem.<br />Osoby te będą mogły uzyskać dostęp do projektu, "
|
||||
"zarządzać uczestnikami, dodawać/edytować/usuwać rachunki. Nie będą jednak "
|
||||
"mieli dostępu do ważnych ustawień, takich jak zmiana kodu prywatnego lub "
|
||||
"usunięcie całego projektu."
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr "Skanuj kod QR"
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr "Użyj urządzenia mobilnego ze zgodną aplikacją."
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Wyślij przez maile"
|
||||
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
msgstr ""
|
||||
"Podaj listę adresów e-mail (oddzielonych przecinkami) osób, które chcesz "
|
||||
"powiadomić o utworzeniu tego projektu. Wyślemy im wiadomość e-mail z linkiem "
|
||||
"zaproszającym."
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Udostępnij identyfikator i kod"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"Identyfikator projektu i kod prywatny można udostępniać za pomocą dowolnych "
|
||||
"środków komunikacji.<br />Każda osoba posiadająca kod prywatny będzie miała "
|
||||
"dostęp do całego projektu, w tym do zmiany ustawień, takich jak kod prywatny "
|
||||
"lub adres e-mail projektu, a nawet do usunięcia całego projektu."
|
||||
"Identyfikator projektu i kod prywatny można udostępniać dowolnymi "
|
||||
"środkami komunikacji."
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "Identyfikator:"
|
||||
|
||||
msgid "Private code:"
|
||||
msgstr "Kod prywatny:"
|
||||
msgid "Share the Link"
|
||||
msgstr "Udostępnij link"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgstr "kod prywatny został zdefiniowany podczas tworzenia projektu"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
"Możesz bezpośrednio udostępnić poniższy link za pośrednictwem "
|
||||
"preferowanego medium"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Wyślij przez maile"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
msgstr ""
|
||||
"Podaj (adresy rozdzielone przecinkami) adresy email, które chcesz "
|
||||
"powiadomić o \n"
|
||||
" utworzeniu tego projektu zarządzania budżetem, a my "
|
||||
"wyślemy Ci wiadomość email."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Kto płaci?"
|
||||
|
@ -1065,94 +1043,3 @@ msgstr "Okres"
|
|||
|
||||
#~ msgid "People to notify"
|
||||
#~ msgstr "Osoby do powiadomienia"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Importuj"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Zapłacona kwota"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Rachunki nie mogą być zerowe"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "Identyfikator projektu to %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "Niepoprawny JSON"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "Czy jesteś pewien?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "Importuj JSON"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Historia tego projektu została"
|
||||
#~ " wyłączona. Nowe działania nie pojawią "
|
||||
#~ "się poniżej. Możesz włączyć historię "
|
||||
#~ "w</i>\n"
|
||||
#~ " <a href=\"%(url)s\">ustawieniach</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Poniższa tabela przedstawia "
|
||||
#~ "działania zarejestrowane przed wyłączeniem "
|
||||
#~ "historii projektu. Możesz\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">wyczyścić historię "
|
||||
#~ "projektu</a>, aby je usunąć.</i></p>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "Wyślij zaproszenia"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "pokaż"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Edytuj projekt"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "Prawdopodobnie chcesz"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "dodać członków"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You can share the project identifier "
|
||||
#~ "and the private code by any "
|
||||
#~ "communication means."
|
||||
#~ msgstr ""
|
||||
#~ "Identyfikator projektu i kod prywatny "
|
||||
#~ "można udostępniać dowolnymi środkami "
|
||||
#~ "komunikacji."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "Udostępnij link"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
#~ "Możesz bezpośrednio udostępnić poniższy link"
|
||||
#~ " za pośrednictwem preferowanego medium"
|
||||
|
|
BIN
ihatemoney/translations/pt/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/pt/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
|
@ -2,9 +2,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-29 14:24+0200\n"
|
||||
"PO-Revision-Date: 2024-05-10 07:26+0000\n"
|
||||
"Last-Translator: Gesiane Pajarinen <gesianef@hotmail.com>\n"
|
||||
"POT-Creation-Date: 2021-11-01 18:01+0100\n"
|
||||
"PO-Revision-Date: 2023-01-10 12:50+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"
|
||||
|
@ -12,13 +12,9 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.5.4-rc\n"
|
||||
"X-Generator: Weblate 4.15.1-dev\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Acabou de criar '%(project)s' para compartilhar as suas despesas"
|
||||
|
||||
msgid ""
|
||||
"Not a valid amount or expression. Only numbers and + - * / operators are "
|
||||
"accepted."
|
||||
|
@ -29,13 +25,6 @@ msgstr ""
|
|||
msgid "Project name"
|
||||
msgstr "Nome do projeto"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Current private code"
|
||||
msgstr "Código privado novo"
|
||||
|
||||
msgid "Enter existing private code to edit project"
|
||||
msgstr "Insira o código privado existente para editar o projeto"
|
||||
|
||||
msgid "New private code"
|
||||
msgstr "Código privado novo"
|
||||
|
||||
|
@ -57,21 +46,18 @@ msgstr "Moeda predefinida"
|
|||
msgid "Setting a default currency enables currency conversion between bills"
|
||||
msgstr "Definir uma moeda padrão permite a conversão de moeda entre faturas"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Erro desconhecido"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Código privado inválido."
|
||||
|
||||
msgid ""
|
||||
"This project cannot be set to 'no currency' because it contains bills in "
|
||||
"multiple currencies."
|
||||
msgstr ""
|
||||
"Este projeto não pode ser definido como 'sem moeda' porque contém faturas"
|
||||
" em várias moedas."
|
||||
"Este projeto não pode ser definido como 'sem moeda' porque contém faturas em "
|
||||
"várias moedas."
|
||||
|
||||
msgid "Compatible with Cospend"
|
||||
msgstr "Compatível com Cospend"
|
||||
msgid "Import previously exported JSON file"
|
||||
msgstr "Importar ficheiro JSON exportado anteriormente"
|
||||
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
msgid "Project identifier"
|
||||
msgstr "Identificador do projeto"
|
||||
|
@ -102,6 +88,12 @@ msgstr "Por favor, valide o captcha para prosseguir."
|
|||
msgid "Enter private code to confirm deletion"
|
||||
msgstr "Digite o código privado para confirmar a exclusão"
|
||||
|
||||
msgid "Unknown error"
|
||||
msgstr "Erro desconhecido"
|
||||
|
||||
msgid "Invalid private code."
|
||||
msgstr "Código privado inválido."
|
||||
|
||||
msgid "Get in"
|
||||
msgstr "Entrar"
|
||||
|
||||
|
@ -126,17 +118,17 @@ msgstr "Confirmação da palavra-passe"
|
|||
msgid "Reset password"
|
||||
msgstr "Redefinir palavra-passe"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Quando?"
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
msgid "What?"
|
||||
msgstr "O quê?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Quem pagou?"
|
||||
msgid "Payer"
|
||||
msgstr "Pagador"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Quanto?"
|
||||
msgid "Amount paid"
|
||||
msgstr "Quantia paga"
|
||||
|
||||
msgid "Currency"
|
||||
msgstr "Moeda"
|
||||
|
@ -160,6 +152,9 @@ msgstr "Enviar e adicionar um novo"
|
|||
msgid "Project default: %(currency)s"
|
||||
msgstr "Projeto predefinido: %(currency)s"
|
||||
|
||||
msgid "Bills can't be null"
|
||||
msgstr "Contas não podem ser null"
|
||||
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
|
@ -181,28 +176,13 @@ msgstr "Este projeto já tem este participante"
|
|||
msgid "People to notify"
|
||||
msgstr "Pessoas a notificar"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Enviar os convites"
|
||||
msgid "Send invites"
|
||||
msgstr "Enviar convites"
|
||||
|
||||
#, python-format
|
||||
msgid "The email %(email)s is not valid"
|
||||
msgstr "O email %(email)s não é válido"
|
||||
|
||||
msgid "Logout"
|
||||
msgstr "Sair"
|
||||
|
||||
msgid "Please check the email configuration of the server."
|
||||
msgstr "Verifique a configuração de e-mail do servidor."
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgid ""
|
||||
"Please check the email configuration of the server or contact the "
|
||||
"administrator: %(admin_email)s"
|
||||
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."
|
||||
|
||||
#. List with two items only
|
||||
msgid "{dual_object_0} and {dual_object_1}"
|
||||
msgstr "{dual_object_0} e {dual_object_1"
|
||||
|
@ -230,8 +210,7 @@ msgstr "{prefix}: {error}"
|
|||
msgid "{prefix}:<br />{errors}"
|
||||
msgstr "{prefix}:<br />{errors}"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Too many failed login attempts."
|
||||
msgid "Too many failed login attempts, please retry later."
|
||||
msgstr "Muitas tentativas de login falhas, por favor, tente novamente mais tarde."
|
||||
|
||||
#, python-format
|
||||
|
@ -247,6 +226,10 @@ msgstr "O token fornecido é inválido"
|
|||
msgid "This private code is not the right one"
|
||||
msgstr "Este código privado não é o correto"
|
||||
|
||||
#, python-format
|
||||
msgid "You have just created '%(project)s' to share your expenses"
|
||||
msgstr "Acabou de criar '%(project)s' para compartilhar as suas despesas"
|
||||
|
||||
msgid "A reminder email has just been sent to you"
|
||||
msgstr "Um email de lembrete acabou de ser enviado a si"
|
||||
|
||||
|
@ -257,10 +240,14 @@ msgstr ""
|
|||
"Tentamos lhe enviar um email de lembrete, mas aconteceu um erro. Pode "
|
||||
"continuar usando o projeto normalmente."
|
||||
|
||||
#, fuzzy
|
||||
#, python-format
|
||||
msgid "The project identifier is %(project)s"
|
||||
msgstr "O identificador do projeto é %(project)s"
|
||||
|
||||
msgid ""
|
||||
"Sorry, there was an error while sending you an email with password reset "
|
||||
"instructions."
|
||||
"instructions. Please check the email configuration of the server or "
|
||||
"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"
|
||||
|
@ -278,15 +265,11 @@ msgstr "Projeto desconhecido"
|
|||
msgid "Password successfully reset."
|
||||
msgstr "Palavra-passe redefinida corretamente."
|
||||
|
||||
msgid "Project settings have been changed successfully."
|
||||
msgstr "As configurações do projeto foram alteradas com sucesso."
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Projeto enviado corretamente"
|
||||
|
||||
msgid "Unable to parse CSV"
|
||||
msgstr "Não foi possível processar o CSV"
|
||||
|
||||
#, python-format
|
||||
msgid "Missing attribute: %(attribute)s"
|
||||
msgstr "Faltando o atributo: %(attribute)s"
|
||||
msgid "Invalid JSON"
|
||||
msgstr "JSON inválido"
|
||||
|
||||
msgid ""
|
||||
"Cannot add bills in multiple currencies to a project without default "
|
||||
|
@ -295,18 +278,12 @@ msgstr ""
|
|||
"Não é possível adicionar faturas em várias moedas a um projeto sem moeda "
|
||||
"padrão"
|
||||
|
||||
msgid "Project successfully uploaded"
|
||||
msgstr "Projeto enviado corretamente"
|
||||
|
||||
msgid "Project successfully deleted"
|
||||
msgstr "Projeto deletado com sucesso"
|
||||
|
||||
msgid "Error deleting project"
|
||||
msgstr "Erro ao apagar o projeto"
|
||||
|
||||
msgid "Unable to logout"
|
||||
msgstr "Não é possível sair"
|
||||
|
||||
#, python-format
|
||||
msgid "You have been invited to share your expenses for %(project)s"
|
||||
msgstr "Foi convidado a compartilhar suas despesas com %(project)s"
|
||||
|
@ -314,8 +291,10 @@ msgstr "Foi convidado a compartilhar suas despesas com %(project)s"
|
|||
msgid "Your invitations have been sent"
|
||||
msgstr "Seus convites foram enviados"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Sorry, there was an error while trying to send the invitation emails."
|
||||
msgid ""
|
||||
"Sorry, there was an error while trying to send the invitation emails. "
|
||||
"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 "
|
||||
|
@ -340,8 +319,8 @@ msgid ""
|
|||
"Participant '%(name)s' has been deactivated. It will still appear in the "
|
||||
"list until its balance reach zero."
|
||||
msgstr ""
|
||||
"O participante '%(name)s' foi desativado. Ele ainda aparecerá na lista "
|
||||
"até que o saldo dele seja zero."
|
||||
"O participante '%(name)s' foi desativado. Ele ainda aparecerá na lista até "
|
||||
"que o saldo dele seja zero."
|
||||
|
||||
#, python-format
|
||||
msgid "Participant '%(name)s' has been removed"
|
||||
|
@ -363,10 +342,6 @@ msgstr "A fatura foi apagada"
|
|||
msgid "The bill has been modified"
|
||||
msgstr "A fatura foi modificada"
|
||||
|
||||
#, python-format
|
||||
msgid "%(lang)s is not a supported language"
|
||||
msgstr "Não temos configuração para o idioma %(lang)s"
|
||||
|
||||
msgid "Error deleting project history"
|
||||
msgstr "Erro ao apagar o histórico do projeto"
|
||||
|
||||
|
@ -427,8 +402,8 @@ msgstr "Ações"
|
|||
msgid "edit"
|
||||
msgstr "editar"
|
||||
|
||||
msgid "Delete project"
|
||||
msgstr "Apagarr projeto"
|
||||
msgid "delete"
|
||||
msgstr "deletar"
|
||||
|
||||
msgid "show"
|
||||
msgstr "exibir"
|
||||
|
@ -442,12 +417,20 @@ msgstr "Descarregar Aplicação Mobile"
|
|||
msgid "Get it on"
|
||||
msgstr "Vamos"
|
||||
|
||||
msgid "Are you sure?"
|
||||
msgstr "Tem certeza?"
|
||||
|
||||
msgid "Edit project"
|
||||
msgstr "Editar projeto"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import project"
|
||||
msgstr "Editar projeto"
|
||||
msgid "Delete project"
|
||||
msgstr "Apagarr projeto"
|
||||
|
||||
msgid "Import JSON"
|
||||
msgstr "Importar JSON"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Escolher ficheiro"
|
||||
|
||||
msgid "Download project's data"
|
||||
msgstr "Descarregar dados do projeto"
|
||||
|
@ -475,28 +458,18 @@ msgstr "Cancelar"
|
|||
msgid "Privacy Settings"
|
||||
msgstr "Configurações de Privacidade"
|
||||
|
||||
msgid "Save changes"
|
||||
msgstr "Salvar as alterações"
|
||||
msgid "Edit the project"
|
||||
msgstr "Editar o projeto"
|
||||
|
||||
msgid "This will remove all bills and participants in this project!"
|
||||
msgstr "Isso removerá todas as faturas e os participantes deste projeto!"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Import previously exported project"
|
||||
msgstr "Importar ficheiro JSON exportado anteriormente"
|
||||
|
||||
msgid "Choose file"
|
||||
msgstr "Escolher ficheiro"
|
||||
|
||||
msgid "Edit this bill"
|
||||
msgstr "Editar esta fatura"
|
||||
|
||||
msgid "Add a bill"
|
||||
msgstr "Adicionar uma fatura"
|
||||
|
||||
msgid "Simple operations are allowed, e.g. (18+36.2)/3"
|
||||
msgstr "Operações simples são permitidas, por ex. (18+36,2)/3"
|
||||
|
||||
msgid "Everyone"
|
||||
msgstr "Todos"
|
||||
|
||||
|
@ -515,6 +488,9 @@ msgstr "Editar este participante"
|
|||
msgid "john.doe@example.com, mary.moe@site.com"
|
||||
msgstr "flano.tal@exemplo.com, flana.maria@site.com"
|
||||
|
||||
msgid "Send the invitations"
|
||||
msgstr "Enviar os convites"
|
||||
|
||||
msgid "Download"
|
||||
msgstr "Descarregar"
|
||||
|
||||
|
@ -561,8 +537,9 @@ msgstr ""
|
|||
" O resto do histórico do projeto não será afetado. Esta "
|
||||
"ação não pode ser desfeita."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Confirm deletion"
|
||||
msgstr "Confirmar exclusão"
|
||||
msgstr "Confirmar eliminação"
|
||||
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
@ -585,24 +562,36 @@ msgstr "Fatura %(name)s: adicionado %(owers_list_str)s à lista de proprietário
|
|||
msgid "Bill %(name)s: removed %(owers_list_str)s from owers list"
|
||||
msgstr "Fatura %(name)s: removido %(owers_list_str)s da lista de proprietários"
|
||||
|
||||
msgid "This project has history disabled. New actions won't appear below."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" <i>This project has history disabled. New actions won't "
|
||||
"appear below. You can enable history on the</i>\n"
|
||||
" <a href=\"%(url)s\">settings page</a>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Este projeto tem o histórico desativado. Novas ações não aparecerão abaixo."
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can enable history on the settings page."
|
||||
msgstr "A gravação do endereço IP pode ser ativada na página de configurações"
|
||||
"\n"
|
||||
" <i>Este projeto tem o histórico desativado. Novas ações não "
|
||||
"serão exibidas abaixo. Pode ativar o histórico na</i>\n"
|
||||
" <a href=\"%(url)s\">página de configurações</a>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"The table below reflects actions recorded prior to disabling project "
|
||||
"history."
|
||||
"\n"
|
||||
" <i>The table below reflects actions recorded prior to "
|
||||
"disabling project history. You can\n"
|
||||
" <a href=\"#\" data-toggle=\"modal\" data-keyboard=\"false\" "
|
||||
"data-target=\"#confirm-erase\">clear project history</a> to remove "
|
||||
"them.</i></p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"A tabela abaixo contém as ações registradas antes da desativação do "
|
||||
"histórico do projeto."
|
||||
|
||||
#, fuzzy
|
||||
msgid "You can clear the project history to remove them."
|
||||
msgstr "Alguém provavelmente limpou o histórico do projeto."
|
||||
"\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 "
|
||||
"removê-las.</i></p>\n"
|
||||
" "
|
||||
|
||||
msgid ""
|
||||
"Some entries below contain IP addresses, even though this project has IP "
|
||||
|
@ -614,18 +603,18 @@ msgstr ""
|
|||
msgid "Delete stored IP addresses"
|
||||
msgstr "Deletar endereços IP gravados"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Não há endereços IP para apagar"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Deletar endereços IP gravados"
|
||||
|
||||
msgid "No history to erase"
|
||||
msgstr "Não há histórico para apagar"
|
||||
|
||||
msgid "Clear Project History"
|
||||
msgstr "Limpar Histórico do Projeto"
|
||||
|
||||
msgid "No IP Addresses to erase"
|
||||
msgstr "Não há endereços IP para apagar"
|
||||
|
||||
msgid "Delete Stored IP Addresses"
|
||||
msgstr "Deletar endereços IP gravados"
|
||||
|
||||
msgid "Time"
|
||||
msgstr "Tempo"
|
||||
|
||||
|
@ -687,15 +676,9 @@ msgstr "Fatura %(name)s renomeada a %(new_description)s"
|
|||
msgid "Participant %(name)s: weight changed from %(old_weight)s to %(new_weight)s"
|
||||
msgstr "Participante %(name)s: peso alterado de %(old_weight)s a %(new_weight)s"
|
||||
|
||||
msgid "Payer"
|
||||
msgstr "Pagador"
|
||||
|
||||
msgid "Amount"
|
||||
msgstr "Quantia"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
#, python-format
|
||||
msgid "Amount in %(currency)s"
|
||||
msgstr "Quantia em %(currency)s"
|
||||
|
@ -798,9 +781,6 @@ msgstr "Histórico"
|
|||
msgid "Settings"
|
||||
msgstr "Configurações"
|
||||
|
||||
msgid "RSS Feed"
|
||||
msgstr "RSS Feed"
|
||||
|
||||
msgid "Other projects :"
|
||||
msgstr "Outros projetos:"
|
||||
|
||||
|
@ -810,9 +790,8 @@ msgstr "mudar para"
|
|||
msgid "Dashboard"
|
||||
msgstr "Painel de controle"
|
||||
|
||||
#, python-format
|
||||
msgid "Please retry after %(date)s."
|
||||
msgstr "Por favor, tente novamente após %(date)s."
|
||||
msgid "Logout"
|
||||
msgstr "Sair"
|
||||
|
||||
msgid "Code"
|
||||
msgstr "Código"
|
||||
|
@ -823,7 +802,7 @@ msgstr "Aplicação Mobile"
|
|||
msgid "Documentation"
|
||||
msgstr "Documentação"
|
||||
|
||||
msgid "Administration Dashboard"
|
||||
msgid "Administation Dashboard"
|
||||
msgstr "Painel de Administração"
|
||||
|
||||
msgid "Legal information"
|
||||
|
@ -845,21 +824,30 @@ msgstr "tem certeza?"
|
|||
msgid "Invite people"
|
||||
msgstr "Convidar pessoas"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Contas mais recentes"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Contas mais antigas"
|
||||
|
||||
msgid "You should start by adding participants"
|
||||
msgstr "Deveria começar adicionando pessoas"
|
||||
|
||||
msgid "Add a new bill"
|
||||
msgstr "Adicionar uma nova fatura"
|
||||
|
||||
msgid "Newer bills"
|
||||
msgstr "Contas mais recentes"
|
||||
|
||||
msgid "Older bills"
|
||||
msgstr "Contas mais antigas"
|
||||
|
||||
msgid "When?"
|
||||
msgstr "Quando?"
|
||||
|
||||
msgid "Who paid?"
|
||||
msgstr "Quem pagou?"
|
||||
|
||||
msgid "For what?"
|
||||
msgstr "Para quê?"
|
||||
|
||||
msgid "How much?"
|
||||
msgstr "Quanto?"
|
||||
|
||||
#, python-format
|
||||
msgid "Added on %(date)s"
|
||||
msgstr "Adicionado em %(date)s"
|
||||
|
@ -868,22 +856,20 @@ msgstr "Adicionado em %(date)s"
|
|||
msgid "Everyone but %(excluded)s"
|
||||
msgstr "Todos menos %(excluded)s"
|
||||
|
||||
msgid "delete"
|
||||
msgstr "deletar"
|
||||
|
||||
msgid "No bills"
|
||||
msgstr "Sem faturas"
|
||||
|
||||
msgid "Nothing to list yet."
|
||||
msgstr "Nada para listar ainda."
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add your first bill"
|
||||
msgid "You probably want to"
|
||||
msgstr "Provavelmente gostaria de"
|
||||
|
||||
msgid "add a bill"
|
||||
msgstr "adicionar uma fatura"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Add the first participant"
|
||||
msgstr "Editar este participante"
|
||||
msgid "add participants"
|
||||
msgstr "adicionar participantes"
|
||||
|
||||
msgid "Password reminder"
|
||||
msgstr "Lembrete de palavra-passe"
|
||||
|
@ -907,65 +893,40 @@ msgstr "Redefinir sua palavra-passe"
|
|||
msgid "Invite people to join this project"
|
||||
msgstr "Convide pessoas para participar deste projeto"
|
||||
|
||||
msgid "Share an invitation link"
|
||||
msgstr "Compartilhe um link do convite"
|
||||
|
||||
msgid ""
|
||||
"The easiest way to invite people is to give them the following invitation"
|
||||
" link.<br />They will be able to access the project, manage participants,"
|
||||
" add/edit/delete bills. However, they will not have access to important "
|
||||
"settings such as changing the private code or deleting the whole project."
|
||||
msgstr ""
|
||||
"A maneira mais fácil de convidar as pessoas é compartilhando o seguinte link "
|
||||
"do convite.<br />Eles poderão acessar o projeto, gerenciar participantes, "
|
||||
"adicionar/editar/excluir contas. No entanto, eles não terão acesso a "
|
||||
"configurações importantes, como alterar o código privado ou excluir todo o "
|
||||
"projeto."
|
||||
|
||||
msgid "Scan QR code"
|
||||
msgstr "Escanear o código QR"
|
||||
|
||||
msgid "Use a mobile device with a compatible app."
|
||||
msgstr "Use um telefone celular ou tablet com um aplicativo compatível."
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Enviar via E-mails"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Specify a list of email adresses (separated by comma) of people you want "
|
||||
"to notify about the creation of this project. We will send them an email "
|
||||
"with the invitation link."
|
||||
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."
|
||||
|
||||
msgid "Share Identifier & code"
|
||||
msgstr "Compartilhar Identificador & código"
|
||||
|
||||
msgid ""
|
||||
"You can share the project identifier and the private code by any "
|
||||
"communication means.<br />Anyone with the private code will have access "
|
||||
"to the full project, including changing settings such as the private code"
|
||||
" or project email address, or even deleting the whole project."
|
||||
"communication means."
|
||||
msgstr ""
|
||||
"Você pode compartilhar o identificador do projeto e o código privado por "
|
||||
"qualquer meio de comunicação.<br />Qualquer pessoa com o código privado terá "
|
||||
"acesso a todo o projeto, incluindo a alteração de configurações como o "
|
||||
"código privado ou o endereço do e-mail, ou até mesmo a exclusão de todo o "
|
||||
"projeto."
|
||||
"Pode compartilhar o identificador do projeto e o código privado por "
|
||||
"qualquer meio de comunicação."
|
||||
|
||||
msgid "Identifier:"
|
||||
msgstr "Identificador:"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Private code:"
|
||||
msgstr "Código privado"
|
||||
msgid "Share the Link"
|
||||
msgstr "Compartilhar a ligação"
|
||||
|
||||
msgid "the private code was defined when you created the project"
|
||||
msgstr "o código privado foi definido quando você criou o projeto"
|
||||
msgid "You can directly share the following link via your prefered medium"
|
||||
msgstr ""
|
||||
"Pode compartilhar diretamente o seguinte ligação através do seu meio "
|
||||
"preferido"
|
||||
|
||||
msgid "Send via Emails"
|
||||
msgstr "Enviar via E-mails"
|
||||
|
||||
msgid ""
|
||||
"Specify a (comma separated) list of email adresses you want to notify "
|
||||
"about the\n"
|
||||
" creation of this budget management project and we will "
|
||||
"send them an email for you."
|
||||
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."
|
||||
|
||||
msgid "Who pays?"
|
||||
msgstr "Quem paga?"
|
||||
|
@ -1062,94 +1023,3 @@ msgstr "Período"
|
|||
|
||||
#~ msgid "People to notify"
|
||||
#~ msgstr "Pessoas para notificar"
|
||||
|
||||
#~ msgid "Import"
|
||||
#~ msgstr "Importar"
|
||||
|
||||
#~ msgid "Amount paid"
|
||||
#~ msgstr "Quantia paga"
|
||||
|
||||
#~ msgid "Bills can't be null"
|
||||
#~ msgstr "Contas não podem ser null"
|
||||
|
||||
#~ msgid "The project identifier is %(project)s"
|
||||
#~ msgstr "O identificador do projeto é %(project)s"
|
||||
|
||||
#~ msgid "Invalid JSON"
|
||||
#~ msgstr "JSON inválido"
|
||||
|
||||
#~ msgid "Are you sure?"
|
||||
#~ msgstr "Tem certeza?"
|
||||
|
||||
#~ msgid "Import JSON"
|
||||
#~ msgstr "Importar JSON"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>This project has history "
|
||||
#~ "disabled. New actions won't appear "
|
||||
#~ "below. You can enable history on "
|
||||
#~ "the</i>\n"
|
||||
#~ " <a href=\"%(url)s\">settings page</a>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ " <i>Este projeto tem o "
|
||||
#~ "histórico desativado. Novas ações não "
|
||||
#~ "serão exibidas abaixo. Pode ativar o "
|
||||
#~ "histórico na</i>\n"
|
||||
#~ " <a href=\"%(url)s\">página de configurações</a>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " <i>The table below reflects "
|
||||
#~ "actions recorded prior to disabling "
|
||||
#~ "project history. You can\n"
|
||||
#~ " <a href=\"#\" data-"
|
||||
#~ "toggle=\"modal\" data-keyboard=\"false\" data-"
|
||||
#~ "target=\"#confirm-erase\">clear project history</a>"
|
||||
#~ " to remove them.</i></p>\n"
|
||||
#~ " "
|
||||
#~ 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 removê-las.</i></p>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Send invites"
|
||||
#~ msgstr "Enviar convites"
|
||||
|
||||
#~ msgid " show"
|
||||
#~ msgstr "exibir"
|
||||
|
||||
#~ msgid "Edit the project"
|
||||
#~ msgstr "Editar o projeto"
|
||||
|
||||
#~ msgid "You probably want to"
|
||||
#~ msgstr "Provavelmente gostaria de"
|
||||
|
||||
#~ msgid "add participants"
|
||||
#~ msgstr "adicionar participantes"
|
||||
|
||||
#~ 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."
|
||||
|
||||
#~ msgid "Share the Link"
|
||||
#~ msgstr "Compartilhar a ligação"
|
||||
|
||||
#~ msgid "You can directly share the following link via your prefered medium"
|
||||
#~ msgstr ""
|
||||
#~ "Pode compartilhar diretamente o seguinte "
|
||||
#~ "ligação através do seu meio preferido"
|
||||
|
|
BIN
ihatemoney/translations/pt_BR/LC_MESSAGES/messages.mo
Normal file
BIN
ihatemoney/translations/pt_BR/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue