diff --git a/.coveragerc b/.coveragerc deleted file mode 100644 index f732c9c0..00000000 --- a/.coveragerc +++ /dev/null @@ -1,9 +0,0 @@ -[run] -disable_warnings = already-imported - -[report] -include = aurweb/* -fail_under = 95 -exclude_lines = - if __name__ == .__main__.: - pragma: no cover diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 56ac1964..00000000 --- a/.dockerignore +++ /dev/null @@ -1,23 +0,0 @@ -# Config files -conf/config -conf/config.sqlite -conf/config.sqlite.defaults -conf/docker -conf/docker.defaults - -# Compiled translation files -**/*.mo - -# Typical virtualenv directories -env/ -venv/ -.venv/ - -# Test output -htmlcov/ -test-emails/ -test/__pycache__ -test/test-results -test/trash_directory* -.coverage -.pytest_cache diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 1a8f5d77..00000000 --- a/.editorconfig +++ /dev/null @@ -1,10 +0,0 @@ -# EditorConfig configuration for aurweb -# https://editorconfig.org - -# Top-most EditorConfig file -root = true - -[*] -end_of_line = lf -insert_final_newline = true -charset = utf-8 diff --git a/.env b/.env deleted file mode 100644 index bf6c48c4..00000000 --- a/.env +++ /dev/null @@ -1,8 +0,0 @@ -FASTAPI_BACKEND="uvicorn" -FASTAPI_WORKERS=2 -MARIADB_SOCKET_DIR="/var/run/mysqld/" -AURWEB_FASTAPI_PREFIX=https://localhost:8444 -AURWEB_SSHD_PREFIX=ssh://aur@localhost:2222 -GIT_DATA_DIR="./aur.git/" -TEST_RECURSION_LIMIT=10000 -COMMIT_HASH= diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs deleted file mode 100644 index d3c9887b..00000000 --- a/.git-blame-ignore-revs +++ /dev/null @@ -1,2 +0,0 @@ -# style: Run pre-commit -9c6c13b78a30cb9d800043410799e29631f803d2 diff --git a/.gitignore b/.gitignore index 97157118..c41bf3e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,63 +1,10 @@ -/data/ -__pycache__/ -*.py[cod] -.vim/ -.pylintrc -.coverage -.idea -/cache/* -/logs/* -/build/ -/dist/ -/aurweb.egg-info/ -/personal/ -/notes/ -/vendor/ -/pyrightconfig.json -/taskell.md -aur.git/ -aurweb.sqlite3 conf/config -conf/config.sqlite -conf/config.sqlite.defaults -conf/docker -conf/docker.defaults -data.sql dummy-data.sql* -fastapi_aw/ -htmlcov/ po/*.mo po/*.po~ po/POTFILES -schema/aur-schema-sqlite.sql -test/test-results/ -test/trash_directory* +scripts/git-integration/__pycache__/ +scripts/git-integration/templates/ web/locale/*/ -web/html/*.gz - -# Do not stage compiled asciidoc: make -C doc -doc/rpc.html - -# Ignore any user-configured .envrc files at the root. -/.envrc - -# Ignore .python-version file from Pyenv -.python-version - -# Ignore coverage report -coverage.xml - -# Ignore pytest report -report.xml - -# Ignore test emails -test-emails/ - -# Ignore typical virtualenv directories -env/ -venv/ -.venv/ - -# Ignore some terraform files -/ci/tf/.terraform -/ci/tf/terraform.tfstate* +aur.git/ +git-interface/git-auth.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index f30994c7..00000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,161 +0,0 @@ -image: archlinux:base-devel -cache: - key: system-v1 - paths: - # For some reason Gitlab CI only supports storing cache/artifacts in a path relative to the build directory - - .pkg-cache - - .venv - - .pre-commit - -variables: - AUR_CONFIG: conf/config # Default MySQL config setup in before_script. - DB_HOST: localhost - TEST_RECURSION_LIMIT: 10000 - CURRENT_DIR: "$(pwd)" - LOG_CONFIG: logging.test.conf - DEV_FQDN: aurweb-$CI_COMMIT_REF_SLUG.sandbox.archlinux.page - INFRASTRUCTURE_REPO: https://gitlab.archlinux.org/archlinux/infrastructure.git - -lint: - stage: .pre - before_script: - - pacman -Sy --noconfirm --noprogressbar - archlinux-keyring - - pacman -Syu --noconfirm --noprogressbar - git python python-pre-commit - script: - - export XDG_CACHE_HOME=.pre-commit - - pre-commit run -a - -test: - stage: test - before_script: - - export PATH="$HOME/.poetry/bin:${PATH}" - - ./docker/scripts/install-deps.sh - - virtualenv -p python3 .venv - - source .venv/bin/activate # Enable our virtualenv cache - - ./docker/scripts/install-python-deps.sh - - useradd -U -d /aurweb -c 'AUR User' aur - - ./docker/mariadb-entrypoint.sh - - (cd '/usr' && /usr/bin/mysqld_safe --datadir='/var/lib/mysql') & - - 'until : > /dev/tcp/127.0.0.1/3306; do sleep 1s; done' - - cp -v conf/config.dev conf/config - - sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config - - ./docker/test-mysql-entrypoint.sh # Create mysql AUR_CONFIG. - - make -C po all install # Compile translations. - - make -C doc # Compile asciidoc. - - make -C test clean # Cleanup coverage. - script: - # Run sharness. - - make -C test sh - # Run pytest. - - pytest --junitxml="pytest-report.xml" - - make -C test coverage # Produce coverage reports. - coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' - artifacts: - reports: - junit: pytest-report.xml - coverage_report: - coverage_format: cobertura - path: coverage.xml - -.init_tf: &init_tf - - pacman -Syu --needed --noconfirm terraform - - export TF_VAR_name="aurweb-${CI_COMMIT_REF_SLUG}" - - TF_ADDRESS="${CI_API_V4_URL}/projects/${TF_STATE_PROJECT}/terraform/state/${CI_COMMIT_REF_SLUG}" - - cd ci/tf - - > - terraform init \ - -backend-config="address=${TF_ADDRESS}" \ - -backend-config="lock_address=${TF_ADDRESS}/lock" \ - -backend-config="unlock_address=${TF_ADDRESS}/lock" \ - -backend-config="username=x-access-token" \ - -backend-config="password=${TF_STATE_GITLAB_ACCESS_TOKEN}" \ - -backend-config="lock_method=POST" \ - -backend-config="unlock_method=DELETE" \ - -backend-config="retry_wait_min=5" - -deploy_review: - stage: deploy - script: - - *init_tf - - terraform apply -auto-approve - environment: - name: review/$CI_COMMIT_REF_NAME - url: https://$DEV_FQDN - on_stop: stop_review - auto_stop_in: 1 week - rules: - - if: $CI_COMMIT_REF_NAME =~ /^renovate\// - when: never - - if: $CI_MERGE_REQUEST_ID && $CI_PROJECT_PATH == "archlinux/aurweb" - when: manual - -provision_review: - stage: deploy - needs: - - deploy_review - script: - - *init_tf - - pacman -Syu --noconfirm --needed ansible git openssh jq - # Get ssh key from terraform state file - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - terraform show -json | - jq -r '.values.root_module.resources[] | - select(.address == "tls_private_key.this") | - .values.private_key_openssh' > ~/.ssh/id_ed25519 - - chmod 400 ~/.ssh/id_ed25519 - # Clone infra repo - - git clone $INFRASTRUCTURE_REPO - - cd infrastructure - # Remove vault files - - rm $(git grep -l 'ANSIBLE_VAULT;1.1;AES256$') - # Remove vault config - - sed -i '/^vault/d' ansible.cfg - # Add host config - - mkdir -p host_vars/$DEV_FQDN - - 'echo "filesystem: btrfs" > host_vars/$DEV_FQDN/misc' - # Add host - - echo "$DEV_FQDN" > hosts - # Add our pubkey and hostkeys - - ssh-keyscan $DEV_FQDN >> ~/.ssh/known_hosts - - ssh-keygen -f ~/.ssh/id_ed25519 -y > pubkeys/aurweb-dev.pub - # Run our ansible playbook - - > - ansible-playbook playbooks/aur-dev.archlinux.org.yml \ - -e "aurdev_fqdn=$DEV_FQDN" \ - -e "aurweb_repository=$CI_REPOSITORY_URL" \ - -e "aurweb_version=$CI_COMMIT_SHA" \ - -e "{\"vault_mariadb_users\":{\"root\":\"aur\"}}" \ - -e "vault_aurweb_db_password=aur" \ - -e "vault_aurweb_gitlab_instance=https://does.not.exist" \ - -e "vault_aurweb_error_project=set-me" \ - -e "vault_aurweb_error_token=set-me" \ - -e "vault_aurweb_secret=aur" \ - -e "vault_goaurrpc_metrics_token=aur" \ - -e '{"root_additional_keys": ["moson.pub", "aurweb-dev.pub"]}' - environment: - name: review/$CI_COMMIT_REF_NAME - action: access - rules: - - if: $CI_COMMIT_REF_NAME =~ /^renovate\// - when: never - - if: $CI_MERGE_REQUEST_ID && $CI_PROJECT_PATH == "archlinux/aurweb" - -stop_review: - stage: deploy - needs: - - deploy_review - script: - - *init_tf - - terraform destroy -auto-approve - - 'curl --silent --show-error --fail --header "Private-Token: ${TF_STATE_GITLAB_ACCESS_TOKEN}" --request DELETE "${CI_API_V4_URL}/projects/${TF_STATE_PROJECT}/terraform/state/${CI_COMMIT_REF_SLUG}"' - environment: - name: review/$CI_COMMIT_REF_NAME - action: stop - rules: - - if: $CI_COMMIT_REF_NAME =~ /^renovate\// - when: never - - if: $CI_MERGE_REQUEST_ID && $CI_PROJECT_PATH == "archlinux/aurweb" - when: manual diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md deleted file mode 100644 index 9e20aadb..00000000 --- a/.gitlab/issue_templates/Bug.md +++ /dev/null @@ -1,60 +0,0 @@ - -/label ~bug ~unconfirmed -/title [BUG] - - -### Checklist - -**NOTE:** This bug template is meant to provide bug issues for code existing in -the aurweb repository. - -**This bug template is not meant to handle bugs with user-uploaded packages.** -To report issues you might have found in a user-uploaded package, contact -the package's maintainer in comments. - -- [ ] I confirm that this is an issue with aurweb's code and not a - user-uploaded package. -- [ ] I have described the bug in complete detail in the - [Description](#description) section. -- [ ] I have specified steps in the [Reproduction](#reproduction) section. -- [ ] I have included any logs related to the bug in the - [Logs](#logs) section. -- [ ] I have included the versions which are affected in the - [Version(s)](#versions) section. - -### Description - -Describe the bug in full detail. - -### Reproduction - -Describe a specific set of actions that can be used to reproduce -this bug. - -### Logs - -If you have any logs relevant to the bug, include them here in -quoted or code blocks. - -### Version(s) - -In this section, please include a list of versions you have found -to be affected by this program. This can either come in the form -of `major.minor.patch` (if it affects a release tarball), or a -commit hash if the bug does not directly affect a release version. - -All development is done without modifying version displays in -aurweb's HTML render output. If you're testing locally, use the -commit on which you are experiencing the bug. If you have found -a bug which exists on live aur.archlinux.org, include the version -located at the bottom of the webpage. - -/label bug unconfirmed diff --git a/.gitlab/issue_templates/Feature.md b/.gitlab/issue_templates/Feature.md deleted file mode 100644 index 630c53c3..00000000 --- a/.gitlab/issue_templates/Feature.md +++ /dev/null @@ -1,52 +0,0 @@ - -/label ~feature ~unconfirmed -/title [FEATURE] - - -### Checklist - -**NOTE:** This bug template is meant to provide bug issues for code existing in -the aurweb repository. - -**This bug template is not meant to handle bugs with user-uploaded packages.** -To report issues you might have found in a user-uploaded package, contact -the package's maintainer in comments. - -- [ ] I have summed up the feature in concise words in the [Summary](#summary) section. -- [ ] I have completely described the feature in the [Description](#description) section. -- [ ] I have completed the [Blockers](#blockers) section. - -### Summary - -Fill this section out with a concise wording about the feature being -requested. - -Example: _A new `Tyrant` account type for users_. - -### Description - -Describe your feature in full detail. - -Example: _The `Tyrant` account type should be used to allow a user to be -tyrannical. When a user is a `Tyrant`, they should be able to assassinate -users due to not complying with their laws. Laws can be configured by updating -the Tyrant laws page at https://aur.archlinux.org/account/{username}/laws. -More specifics about laws._ - -### Blockers - -Include any blockers in a list. If there are no blockers, this section -should be omitted from the issue. - -Example: - -- [Feature] Do not allow users to be Tyrants - - \<(issue|merge_request)_link\> diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 2431eb3d..00000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,36 +0,0 @@ -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 - hooks: - - id: check-added-large-files - - id: check-case-conflict - - id: check-merge-conflict - - id: check-toml - - id: end-of-file-fixer - - id: trailing-whitespace - exclude: ^po/ - - id: debug-statements - - - repo: https://github.com/myint/autoflake - rev: v2.3.1 - hooks: - - id: autoflake - args: - - --in-place - - --remove-all-unused-imports - - --ignore-init-module-imports - - - repo: https://github.com/pycqa/isort - rev: 5.13.2 - hooks: - - id: isort - - - repo: https://github.com/psf/black - rev: 24.4.1 - hooks: - - id: black - - - repo: https://github.com/PyCQA/flake8 - rev: 7.0.0 - hooks: - - id: flake8 diff --git a/.tx/config b/.tx/config index 9ba46244..f6f728dd 100644 --- a/.tx/config +++ b/.tx/config @@ -1,7 +1,8 @@ [main] -host = https://app.transifex.com +host = https://www.transifex.com -[o:lfleischer:p:aurweb:r:aurwebpot] +[aur.aurpot] file_filter = po/.po -source_file = po/aurweb.pot +source_file = po/aur.pot source_lang = en + diff --git a/AUTHORS b/AUTHORS index 18c1337d..a21fef7b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,8 +1,8 @@ Current Maintainers ------------------- -* Lukas Fleischer (2011-present) -* Johannes Löthberg (2015-present) +* Lukas Fleischer +* Johannes Löthberg Past Maintainers ---------------- @@ -23,8 +23,8 @@ Use `git shortlog -s` for a list of aurweb contributors. Translations ------------ -Our translations are currently maintained in Transifex; please read -doc/i18n.txt for more details. +Our translations are currently maintained in Transifex; please read TRANSLATING +for more details. Below is a list of past translators before we switched to Transifex; more can be found by looking in the Git history. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 1957ae22..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,105 +0,0 @@ -# Contributing - -Patches should be sent to the [aur-dev@lists.archlinux.org][1] mailing list -or included in a merge request on the [aurweb repository][2]. - -Before sending patches, you are recommended to run `flake8` and `isort`. - -You can add a git hook to do this by installing `python-pre-commit` and running -`pre-commit install`. - -[1]: https://lists.archlinux.org/mailman3/lists/aur-dev.lists.archlinux.org/ -[2]: https://gitlab.archlinux.org/archlinux/aurweb - -### Coding Guidelines - -DISCLAIMER: We realise the code doesn't necessarily follow all the rules. -This is an attempt to establish a standard coding style for future -development. - -1. All source modified or added within a patchset **must** maintain equivalent - or increased coverage by providing tests that use the functionality -2. Please keep your source within an 80 column width -3. Use four space indentation -4. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) -5. DRY: Don't Repeat Yourself -6. All code should be tested for good _and_ bad cases (see [test/README.md][3]) - -[3]: https://gitlab.archlinux.org/archlinux/aurweb/-/blob/master/test/README.md - -Test patches that increase coverage in the codebase are always welcome. - -### Coding Style - -We use `autoflake`, `isort`, `black` and `flake8` to enforce coding style in a -PEP-8 compliant way. These tools run in GitLab CI using `pre-commit` to verify -that any pushed code changes comply with this. - -To enable the `pre-commit` git hook, install the `pre-commit` package either -with `pacman` or `pip` and then run `pre-commit install --install-hooks`. This -will ensure formatting is done before any code is commited to the git -repository. - -There are plugins for editors or IDEs which automate this process. Some -example plugins: - -- [tenfyzhong/autoflake.vim](https://github.com/tenfyzhong/autoflake.vim) -- [fisadev/vim-isort](https://github.com/fisadev/vim-isort) -- [psf/black](https://github.com/psf/black) -- [nvie/vim-flake8](https://github.com/nvie/vim-flake8) -- [prabirshrestha/vim-lsp](https://github.com/prabirshrestha/vim-lsp) -- [dense-analysis/ale](https://github.com/dense-analysis/ale) - -See `setup.cfg`, `pyproject.toml` and `.pre-commit-config.yaml` for tool -specific configurations. - -### Development Environment - -To get started with local development, an instance of aurweb must be -brought up. This can be done using the following sections: - -- [Using Docker](#using-docker) -- [Using INSTALL](#using-install) - -There are a number of services aurweb employs to run the application -in its entirety: - -- ssh -- cron jobs -- starlette/fastapi asgi server - -Project structure: - -- `./aurweb`: `aurweb` Python package -- `./templates`: Jinja2 templates -- `./docker`: Docker scripts and configuration files - -#### Using Docker - -Using Docker, we can run the entire infrastructure in two steps: - - # Build the aurweb:latest image - $ docker-compose build - - # Start all services in the background - $ docker-compose up -d nginx - -`docker-compose` services will generate a locally signed root certificate -at `./data/root_ca.crt`. Users can import this into ca-certificates or their -browser if desired. - -Accessible services (on the host): - -- https://localhost:8444 (python via nginx) -- localhost:13306 (mariadb) -- localhost:16379 (redis) - -Docker services, by default, are setup to be hot reloaded when source code -is changed. - -For detailed setup instructions have a look at [TESTING](TESTING) - -#### Using INSTALL - -The [INSTALL](INSTALL) file describes steps to install the application on -bare-metal systems. diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 1f667611..00000000 --- a/Dockerfile +++ /dev/null @@ -1,47 +0,0 @@ -FROM archlinux:base-devel - -VOLUME /root/.cache/pypoetry/cache -VOLUME /root/.cache/pypoetry/artifacts -VOLUME /root/.cache/pre-commit - -ENV PATH="/root/.poetry/bin:${PATH}" -ENV PYTHONPATH=/aurweb -ENV AUR_CONFIG=conf/config -ENV COMPOSE=1 - -# Install system-wide dependencies. -COPY ./docker/scripts/install-deps.sh /install-deps.sh -RUN /install-deps.sh - -# Copy Docker scripts -COPY ./docker /docker -COPY ./docker/scripts/* /usr/local/bin/ - - -# Copy over all aurweb files. -COPY . /aurweb - -# Working directory is aurweb root @ /aurweb. -WORKDIR /aurweb - -# Copy initial config to conf/config. -RUN cp -vf conf/config.dev conf/config -RUN sed -i "s;YOUR_AUR_ROOT;/aurweb;g" conf/config - -# Install Python dependencies. -RUN /docker/scripts/install-python-deps.sh compose - -# Compile asciidocs. -RUN make -C doc - -# Add our aur user. -RUN useradd -U -d /aurweb -c 'AUR User' aur - -# Setup some default system stuff. -RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime - -# Install translations. -RUN make -C po all install - -# Install pre-commit repositories and run lint check. -RUN pre-commit run -a diff --git a/HACKING b/HACKING new file mode 100644 index 00000000..291da1f3 --- /dev/null +++ b/HACKING @@ -0,0 +1,52 @@ +HACKING + +DISCLAIMER: We realise the code doesn't necessarily follow all the rules. +This is an attempt to establish a standard coding style for future +development. + +Coding style guidelines +----------------------- +Column width: 79 columns or less within reason. + +Indentation: tabs (standard eight column width) +Please don't add any mode lines. Adjust your editor to display tabs to your +preferred width. Generally code should work with the standard eight column +tabs. + +No short open tags. '' +Try embedding as little XHTML in the PHP as possible. +Consider creating templates for XHTML. + +All markup should conform to XHTML 1.0 Strict requirements. +You can use http://validator.w3.org to check the markup. + +Prevent PHP Notices by using isset() or empty() in conditionals that +reference $_GET, $_POST, or $_REQUEST variables. + +MySQL queries should generally go into functions. + +Submitting patches +------------------ +!!! PLEASE TEST YOUR PATCHES BEFORE SUBMITTING !!! +Submit uncompressed git-formatted patches to aur-dev@archlinux.org. + +You will need to register on the mailing list before submitting: +https://mailman.archlinux.org/mailman/listinfo/aur-dev + +Base your patches on the master branch as forward development is done there. +When writing patches please keep unnecessary changes to a minimum. + +Try to keep your commits small and focused. +Smaller patches are much easier to review and have a better chance of being +pushed more quickly into the main repo. Smaller commits also makes reviewing +the commit history and tracking down specific changes much easier. + +Try to make your commit messages brief but descriptive. + +Glossary +-------- +git-formatted patch: + A patch that is produced via `git format-patch` and is sent via + `git send-email` or as an inline attachment of an email. + diff --git a/INSTALL b/INSTALL index 23fb6c3d..b090789d 100644 --- a/INSTALL +++ b/INSTALL @@ -1,188 +1,86 @@ Setup on Arch Linux =================== -For testing aurweb patches before submission, you can use the instructions in -TESTING for testing the web interface only. +1) Clone the AUR project: -For a detailed description on how to setup a full aurweb server, -read the instructions below. + $ cd /srv/http/ + $ git clone git://projects.archlinux.org/aurweb.git -1) Clone the aurweb project and install it (via `python-poetry`): - - $ cd /srv/http/ - $ git clone git://git.archlinux.org/aurweb.git - $ cd aurweb - $ poetry install - -2) Setup a web server with MySQL. The following block can be used with nginx: +2) Setup a web server with PHP and MySQL. Configure the web server to redirect + all URLs to /index.php/foo/bar/. The following block can be used with nginx: server { - # https is preferred and can be done easily with LetsEncrypt - # or self-CA signing. Users can still listen over 80 for plain - # http, for which the [options] disable_http_login used to toggle - # the authentication feature. - listen 443 ssl http2; + listen 80; server_name aur.local aur; - # To enable SSL proxy properly, make sure gunicorn and friends - # are supporting forwarded headers over 127.0.0.1 or any if - # the asgi server is contacted by non-localhost hosts. - ssl_certificate /etc/ssl/certs/aur.cert.pem; - ssl_certificate_key /etc/ssl/private/aur.key.pem; + root /srv/http/aurweb/web/html; + index index.php; - # smartgit location. - location ~ "^/([a-z0-9][a-z0-9.+_-]*?)(\.git)?/(git-(receive|upload)-pack|HEAD|info/refs|objects/(info/(http-)?alternates|packs)|[0-9a-f]{2}/[0-9a-f]{38}|pack/pack-[0-9a-f]{40}\.(pack|idx))$" { - include uwsgi_params; - uwsgi_pass smartgit; - uwsgi_modifier1 9; - uwsgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; - uwsgi_param PATH_INFO /aur.git/$3; - uwsgi_param GIT_HTTP_EXPORT_ALL ""; - uwsgi_param GIT_NAMESPACE $1; - uwsgi_param GIT_PROJECT_ROOT /srv/http/aurweb; + location ~ ^/[^/]+\.php($|/) { + fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; + fastcgi_index index.php; + fastcgi_split_path_info ^(/[^/]+\.php)(/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + include fastcgi_params; } - # cgitrc.proto should be configured and located somewhere - # of your choosing. - location ~ ^/cgit { - include uwsgi_params; - rewrite ^/cgit/([^?/]+/[^?]*)?(?:\?(.*))?$ /cgit.cgi?url=$1&$2 last; - uwsgi_modifier1 9; - uwsgi_param CGIT_CONFIG /srv/http/aurweb/conf/cgitrc.proto; - uwsgi_pass cgit; - } - - # Static archive assets. - location ~ \.gz$ { - # Asset root. This is used to match against gzip archives. - root /srv/http/aurweb/archives; - - types { application/gzip text/plain } - default_type text/plain; - add_header Content-Encoding gzip; - expires 5m; - } - - # For everything else, proxy the http request to (guni|uvi|hyper)corn. - # The ASGI server application should allow this request's IP to be - # forwarded via the headers used below. - # https://docs.gunicorn.org/en/stable/settings.html#forwarded-allow-ips - location / { - proxy_pass http://127.0.0.1:8000; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Protocol ssl; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Ssl on; + location ~ .* { + rewrite ^/(.*)$ /index.php/$1 last; } } -3) Optionally copy conf/config.defaults to /etc/aurweb/. Create or copy - /etc/aurweb/config (this is expected to contain all configuration settings - if the defaults file does not exist) and adjust the configuration (pay +3) Copy conf/config.proto to conf/config and adjust the configuration (pay attention to disable_http_login, enable_maintenance and aur_location). -4) Install system-wide dependencies: +4) Create a new MySQL database and a user and import the AUR SQL schema: - # pacman -S git gpgme cgit curl openssh uwsgi uwsgi-plugin-cgi \ - python-poetry + $ mysql -uaur -p AUR conf/config - - Note that when the upstream config.dev is updated, you should compare it to - your conf/config, or regenerate your configuration with the command above. - -5) Set up mariadb: - - # mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql - # systemctl start mariadb - # mariadb -u root - > CREATE USER 'aur'@'localhost' IDENTIFIED BY 'aur'; - > GRANT ALL ON *.* TO 'aur'@'localhost' WITH GRANT OPTION; - > CREATE DATABASE aurweb; - > exit - -6) Prepare a database and insert dummy data: - - $ AUR_CONFIG=conf/config poetry run python -m aurweb.initdb - $ poetry run schema/gendummydata.py dummy_data.sql - $ mariadb -uaur -paur aurweb < dummy_data.sql - -7) Run the test server: - - ## set AUR_CONFIG to our locally created config - $ export AUR_CONFIG=conf/config - - ## with aurweb.spawn - $ poetry run python -m aurweb.spawn - - ## with systemd service - $ sudo install -m644 examples/aurweb.service /etc/systemd/system/ - # systemctl enable --now aurweb.service - - -Setup for running tests ------------------------ - -If you've set up a docker environment, you can run the full test-suite with: - # docker compose run test - -You can collect code-coverage data with: - $ ./util/fix-coverage data/.coverage - -See information further below on how to visualize the data. - -For running individual tests, we need to perform a couple of additional steps. -In case you did the bare-metal install, steps 2, 3, 4 and 5 should be skipped. - -1) Install the necessary packages: - - # pacman -S --needed python-poetry mariadb-libs asciidoc openssh - -2) Install the package/dependencies via `poetry`: - - $ poetry install - -3) Copy conf/config.dev to conf/config and replace YOUR_AUR_ROOT by the absolute - path to the root of your aurweb clone. sed can do both tasks for you: - - $ sed -e "s;YOUR_AUR_ROOT;$PWD;g" conf/config.dev > conf/config - - Note that when the upstream config.dev is updated, you should compare it to - your conf/config, or regenerate your configuration with the command above. - -4) Edit the config file conf/config and change the mysql/mariadb portion - - We can make use of our mariadb docker container instead of having to install - mariadb. Change the config as follows: - - --------------------------------------------------------------------- - ; MySQL database information. User defaults to root for containerized - ; testing with mysqldb. This should be set to a non-root user. - user = root - password = aur - host = 127.0.0.1 - port = 13306 - ;socket = /var/run/mysqld/mysqld.sock - --------------------------------------------------------------------- - -5) Start our mariadb docker container - - # docker compose start mariadb - -6) Set environment variables - - $ export AUR_CONFIG=conf/config - $ export LOG_CONFIG=logging.test.conf - -7) Compile translation & doc files - - $ make -C po install - $ make -C doc - -Now we can run our python test-suite or individual tests with: - - $ poetry run pytest test/ - $ poetry run pytest test/test_whatever.py - -To run Sharness tests: - - $ poetry run make -C test sh - -The e-Mails that have been generated can be found at test-emails/ - -After test runs, code-coverage reports can be created with: - ## CLI report - $ coverage report - - ## HTML version stored at htmlcov/ - $ coverage html - -More information about tests can be found at test/README.md diff --git a/doc/i18n.md b/TRANSLATING similarity index 69% rename from doc/i18n.md rename to TRANSLATING index d81c467d..e450640f 100644 --- a/doc/i18n.md +++ b/TRANSLATING @@ -1,11 +1,12 @@ aurweb Translation ================== -This document describes how to create and maintain aurweb translations. +This document describes how to create and maintain aurweb translations. It was +originally derived from https://wiki.archlinux.org/index.php/aurweb_Translation -Creating an aurweb translation requires a Transifex (https://app.transifex.com/) +Creating an aurweb translation requires a Transifex (http://www.transifex.com/) account. You will need to register with a translation team on the aurweb -project page (https://app.transifex.com/lfleischer/aurweb/). +project page (http://www.transifex.com/projects/p/aurweb/). Creating a New Translation @@ -21,23 +22,23 @@ strings for the translation to be usable, and it may have to be disabled. 1. Check out the aurweb source using git: - $ git clone https://gitlab.archlinux.org/archlinux/aurweb.git aurweb-git +$ git clone git://projects.archlinux.org/aurweb.git aurweb-git -2. Go into the "po/" directory in the aurweb source and run [msginit(1)][msginit] to +2. Go into the "po/" directory in the aurweb source and run msginit(1) to create a initial translation file from our translation catalog: - $ cd aurweb-git - $ git checkout master - $ git pull - $ cd po - $ msginit -l -o .po -i aurweb.pot +$ cd aur-git +$ git checkout master +$ git pull +$ cd po +$ msginit -l -o .po -i aur.pot 3. Use some editor or a translation helper like poedit to add translations: - $ poedit .po +$ poedit .po 5. If you have a working aurweb setup, add a line for the new translation in - "po/Makefile" and test if everything looks right. + "web/lib/config.inc.php.proto" and test if everything looks right. 6. Upload the newly created ".po" file to Transifex. If you don't like the web interface, you can also use transifex-client to do that (see below). @@ -49,15 +50,13 @@ Updating an Existing Translation 1. Download current translation files from Transifex. You can also do this using transifex-client which is available through the AUR: - $ tx pull -a +$ tx pull -a 2. Update the existing translation file using an editor or a tool like poedit: - $ poedit po/.po +$ poedit po/.po 3. Push the updated translation file back to Transifex. Using transifex-client, this works as follows: - $ tx push -r aurweb.aurwebpot -t -l - -[msginit]: https://man.archlinux.org/man/msginit.1 +$ tx push -r aur.aurpot -t -l diff --git a/alembic.ini b/alembic.ini deleted file mode 100644 index 6d3a3929..00000000 --- a/alembic.ini +++ /dev/null @@ -1,86 +0,0 @@ -# A generic, single database configuration. - -[alembic] -# path to migration scripts -script_location = migrations - -# template used to generate migration files -# file_template = %%(rev)s_%%(slug)s - -# timezone to use when rendering the date -# within the migration file as well as the filename. -# string value is passed to dateutil.tz.gettz() -# leave blank for localtime -# timezone = - -# max length of characters to apply to the -# "slug" field -# truncate_slug_length = 40 - -# set to 'true' to run the environment during -# the 'revision' command, regardless of autogenerate -# revision_environment = false - -# set to 'true' to allow .pyc and .pyo files without -# a source .py file to be detected as revisions in the -# versions/ directory -# sourceless = false - -# version location specification; this defaults -# to alembic/versions. When using multiple version -# directories, initial revisions must be specified with --version-path -# version_locations = %(here)s/bar %(here)s/bat alembic/versions - -# the output encoding used when revision files -# are written from script.py.mako -# output_encoding = utf-8 - -# the database URL is generated in env.py -# sqlalchemy.url = driver://user:pass@localhost/dbname - - -[post_write_hooks] -# post_write_hooks defines scripts or Python functions that are run -# on newly generated revision scripts. See the documentation for further -# detail and examples - -# format using "black" - use the console_scripts runner, against the "black" entrypoint -# hooks=black -# black.type=console_scripts -# black.entrypoint=black -# black.options=-l 79 - -# Logging configuration -[loggers] -keys = root,sqlalchemy,alembic - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = WARN -handlers = console -qualname = - -[logger_sqlalchemy] -level = WARN -handlers = -qualname = sqlalchemy.engine - -[logger_alembic] -level = INFO -handlers = -qualname = alembic - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S diff --git a/aurweb/__init__.py b/aurweb/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aurweb/archives/__init__.py b/aurweb/archives/__init__.py deleted file mode 100644 index 47020641..00000000 --- a/aurweb/archives/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# aurweb.archives diff --git a/aurweb/archives/spec/__init__.py b/aurweb/archives/spec/__init__.py deleted file mode 100644 index b6e376b4..00000000 --- a/aurweb/archives/spec/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# aurweb.archives.spec diff --git a/aurweb/archives/spec/base.py b/aurweb/archives/spec/base.py deleted file mode 100644 index 60f734f2..00000000 --- a/aurweb/archives/spec/base.py +++ /dev/null @@ -1,77 +0,0 @@ -from pathlib import Path -from typing import Any, Dict, Iterable, List, Set - - -class GitInfo: - """Information about a Git repository.""" - - """ Path to Git repository. """ - path: str - - """ Local Git repository configuration. """ - config: Dict[str, Any] - - def __init__(self, path: str, config: Dict[str, Any] = dict()) -> "GitInfo": - self.path = Path(path) - self.config = config - - -class SpecOutput: - """Class used for git_archive.py output details.""" - - """ Filename relative to the Git repository root. """ - filename: Path - - """ Git repository information. """ - git_info: GitInfo - - """ Bytes bound for `SpecOutput.filename`. """ - data: bytes - - def __init__(self, filename: str, git_info: GitInfo, data: bytes) -> "SpecOutput": - self.filename = filename - self.git_info = git_info - self.data = data - - -class SpecBase: - """ - Base for Spec classes defined in git_archve.py --spec modules. - - All supported --spec modules must contain the following classes: - - Spec(SpecBase) - """ - - """ A list of SpecOutputs, each of which contain output file data. """ - outputs: List[SpecOutput] = list() - - """ A set of repositories to commit changes to. """ - repos: Set[str] = set() - - def generate(self) -> Iterable[SpecOutput]: - """ - "Pure virtual" output generator. - - `SpecBase.outputs` and `SpecBase.repos` should be populated within an - overridden version of this function in SpecBase derivatives. - """ - raise NotImplementedError() - - def add_output(self, filename: str, git_info: GitInfo, data: bytes) -> None: - """ - Add a SpecOutput instance to the set of outputs. - - :param filename: Filename relative to the git repository root - :param git_info: GitInfo instance - :param data: Binary data bound for `filename` - """ - if git_info.path not in self.repos: - self.repos.add(git_info.path) - - self.outputs.append( - SpecOutput( - filename, - git_info, - data, - ) - ) diff --git a/aurweb/archives/spec/metadata.py b/aurweb/archives/spec/metadata.py deleted file mode 100644 index ce7c6f30..00000000 --- a/aurweb/archives/spec/metadata.py +++ /dev/null @@ -1,85 +0,0 @@ -from typing import Iterable - -import orjson - -from aurweb import config, db -from aurweb.models import Package, PackageBase, User -from aurweb.rpc import RPC - -from .base import GitInfo, SpecBase, SpecOutput - -ORJSON_OPTS = orjson.OPT_SORT_KEYS | orjson.OPT_INDENT_2 - - -class Spec(SpecBase): - def __init__(self) -> "Spec": - self.metadata_repo = GitInfo( - config.get("git-archive", "metadata-repo"), - ) - - def generate(self) -> Iterable[SpecOutput]: - # Base query used by the RPC. - base_query = ( - db.query(Package) - .join(PackageBase) - .join(User, PackageBase.MaintainerUID == User.ID, isouter=True) - ) - - # Create an instance of RPC, use it to get entities from - # our query and perform a metadata subquery for all packages. - rpc = RPC(version=5, type="info") - print("performing package database query") - packages = rpc.entities(base_query).all() - print("performing package database subqueries") - rpc.subquery({pkg.ID for pkg in packages}) - - pkgbases, pkgnames = dict(), dict() - for package in packages: - # Produce RPC type=info data for `package` - data = rpc.get_info_json_data(package) - - pkgbase_name = data.get("PackageBase") - pkgbase_data = { - "ID": data.pop("PackageBaseID"), - "URLPath": data.pop("URLPath"), - "FirstSubmitted": data.pop("FirstSubmitted"), - "LastModified": data.pop("LastModified"), - "OutOfDate": data.pop("OutOfDate"), - "Maintainer": data.pop("Maintainer"), - "Keywords": data.pop("Keywords"), - "NumVotes": data.pop("NumVotes"), - "Popularity": data.pop("Popularity"), - "PopularityUpdated": package.PopularityUpdated.timestamp(), - } - - # Store the data in `pkgbases` dict. We do this so we only - # end up processing a single `pkgbase` if repeated after - # this loop - pkgbases[pkgbase_name] = pkgbase_data - - # Remove Popularity and NumVotes from package data. - # These fields change quite often which causes git data - # modification to explode. - # data.pop("NumVotes") - # data.pop("Popularity") - - # Remove the ID key from package json. - data.pop("ID") - - # Add the `package`.Name to the pkgnames set - name = data.get("Name") - pkgnames[name] = data - - # Add metadata outputs - self.add_output( - "pkgname.json", - self.metadata_repo, - orjson.dumps(pkgnames, option=ORJSON_OPTS), - ) - self.add_output( - "pkgbase.json", - self.metadata_repo, - orjson.dumps(pkgbases, option=ORJSON_OPTS), - ) - - return self.outputs diff --git a/aurweb/archives/spec/pkgbases.py b/aurweb/archives/spec/pkgbases.py deleted file mode 100644 index db2085cc..00000000 --- a/aurweb/archives/spec/pkgbases.py +++ /dev/null @@ -1,26 +0,0 @@ -from typing import Iterable - -import orjson - -from aurweb import config, db -from aurweb.models import PackageBase - -from .base import GitInfo, SpecBase, SpecOutput - -ORJSON_OPTS = orjson.OPT_SORT_KEYS | orjson.OPT_INDENT_2 - - -class Spec(SpecBase): - def __init__(self) -> "Spec": - self.pkgbases_repo = GitInfo(config.get("git-archive", "pkgbases-repo")) - - def generate(self) -> Iterable[SpecOutput]: - query = db.query(PackageBase.Name).order_by(PackageBase.Name.asc()).all() - pkgbases = [pkgbase.Name for pkgbase in query] - - self.add_output( - "pkgbase.json", - self.pkgbases_repo, - orjson.dumps(pkgbases, option=ORJSON_OPTS), - ) - return self.outputs diff --git a/aurweb/archives/spec/pkgnames.py b/aurweb/archives/spec/pkgnames.py deleted file mode 100644 index 3df62af6..00000000 --- a/aurweb/archives/spec/pkgnames.py +++ /dev/null @@ -1,31 +0,0 @@ -from typing import Iterable - -import orjson - -from aurweb import config, db -from aurweb.models import Package, PackageBase - -from .base import GitInfo, SpecBase, SpecOutput - -ORJSON_OPTS = orjson.OPT_SORT_KEYS | orjson.OPT_INDENT_2 - - -class Spec(SpecBase): - def __init__(self) -> "Spec": - self.pkgnames_repo = GitInfo(config.get("git-archive", "pkgnames-repo")) - - def generate(self) -> Iterable[SpecOutput]: - query = ( - db.query(Package.Name) - .join(PackageBase, PackageBase.ID == Package.PackageBaseID) - .order_by(Package.Name.asc()) - .all() - ) - pkgnames = [pkg.Name for pkg in query] - - self.add_output( - "pkgname.json", - self.pkgnames_repo, - orjson.dumps(pkgnames, option=ORJSON_OPTS), - ) - return self.outputs diff --git a/aurweb/archives/spec/users.py b/aurweb/archives/spec/users.py deleted file mode 100644 index 80da1641..00000000 --- a/aurweb/archives/spec/users.py +++ /dev/null @@ -1,26 +0,0 @@ -from typing import Iterable - -import orjson - -from aurweb import config, db -from aurweb.models import User - -from .base import GitInfo, SpecBase, SpecOutput - -ORJSON_OPTS = orjson.OPT_SORT_KEYS | orjson.OPT_INDENT_2 - - -class Spec(SpecBase): - def __init__(self) -> "Spec": - self.users_repo = GitInfo(config.get("git-archive", "users-repo")) - - def generate(self) -> Iterable[SpecOutput]: - query = db.query(User.Username).order_by(User.Username.asc()).all() - users = [user.Username for user in query] - - self.add_output( - "users.json", - self.users_repo, - orjson.dumps(users, option=ORJSON_OPTS), - ) - return self.outputs diff --git a/aurweb/asgi.py b/aurweb/asgi.py deleted file mode 100644 index 4a0c1113..00000000 --- a/aurweb/asgi.py +++ /dev/null @@ -1,339 +0,0 @@ -import hashlib -import http -import io -import os -import re -import sys -import traceback -import typing -from contextlib import asynccontextmanager -from urllib.parse import quote_plus - -import requests -from fastapi import FastAPI, HTTPException, Request, Response -from fastapi.responses import RedirectResponse -from fastapi.staticfiles import StaticFiles -from jinja2 import TemplateNotFound -from opentelemetry import trace -from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter -from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor -from opentelemetry.sdk.resources import Resource -from opentelemetry.sdk.trace import TracerProvider -from opentelemetry.sdk.trace.export import BatchSpanProcessor -from sqlalchemy import and_ -from starlette.exceptions import HTTPException as StarletteHTTPException -from starlette.middleware.authentication import AuthenticationMiddleware -from starlette.middleware.sessions import SessionMiddleware - -import aurweb.captcha # noqa: F401 -import aurweb.config -import aurweb.filters # noqa: F401 -from aurweb import aur_logging, prometheus, util -from aurweb.aur_redis import redis_connection -from aurweb.auth import BasicAuthBackend -from aurweb.db import get_engine, query -from aurweb.models import AcceptedTerm, Term -from aurweb.packages.util import get_pkg_or_base -from aurweb.prometheus import instrumentator -from aurweb.routers import APP_ROUTES -from aurweb.templates import make_context, render_template - -logger = aur_logging.get_logger(__name__) -session_secret = aurweb.config.get("fastapi", "session_secret") - - -@asynccontextmanager -async def lifespan(app: FastAPI): - await app_startup() - yield - - -# Setup the FastAPI app. -app = FastAPI(lifespan=lifespan) - - -# Instrument routes with the prometheus-fastapi-instrumentator -# library with custom collectors and expose /metrics. -instrumentator().add(prometheus.http_api_requests_total()) -instrumentator().add(prometheus.http_requests_total()) -instrumentator().instrument(app) - - -# Instrument FastAPI for tracing -FastAPIInstrumentor.instrument_app(app) - -resource = Resource(attributes={"service.name": "aurweb"}) -otlp_endpoint = aurweb.config.get("tracing", "otlp_endpoint") -otlp_exporter = OTLPSpanExporter(endpoint=otlp_endpoint) -span_processor = BatchSpanProcessor(otlp_exporter) -trace.set_tracer_provider(TracerProvider(resource=resource)) -trace.get_tracer_provider().add_span_processor(span_processor) - - -async def app_startup(): - # https://stackoverflow.com/questions/67054759/about-the-maximum-recursion-error-in-fastapi - # Test failures have been observed by internal starlette code when - # using starlette.testclient.TestClient. Looking around in regards - # to the recursion error has really not recommended a course of action - # other than increasing the recursion limit. For now, that is how - # we handle the issue: an optional TEST_RECURSION_LIMIT env var - # provided by the user. Docker uses .env's TEST_RECURSION_LIMIT - # when running test suites. - # TODO: Find a proper fix to this issue. - recursion_limit = int( - os.environ.get("TEST_RECURSION_LIMIT", sys.getrecursionlimit() + 1000) - ) - sys.setrecursionlimit(recursion_limit) - - backend = aurweb.config.get("database", "backend") - if backend not in aurweb.db.DRIVERS: - raise ValueError( - f"The configured database backend ({backend}) is unsupported. " - f"Supported backends: {str(aurweb.db.DRIVERS.keys())}" - ) - - if not session_secret: - raise Exception("[fastapi] session_secret must not be empty") - - if not os.environ.get("PROMETHEUS_MULTIPROC_DIR", None): - logger.warning( - "$PROMETHEUS_MULTIPROC_DIR is not set, the /metrics " - "endpoint is disabled." - ) - - app.mount("/static", StaticFiles(directory="static"), name="static_files") - - # Add application routes. - def add_router(module): - app.include_router(module.router) - - util.apply_all(APP_ROUTES, add_router) - - # Initialize the database engine and ORM. - get_engine() - - -async def internal_server_error(request: Request, exc: Exception) -> Response: - """ - Catch all uncaught Exceptions thrown in a route. - - :param request: FastAPI Request - :return: Rendered 500.html template with status_code 500 - """ - repo = aurweb.config.get("notifications", "gitlab-instance") - project = aurweb.config.get("notifications", "error-project") - token = aurweb.config.get("notifications", "error-token") - - context = make_context(request, "Internal Server Error") - - # Print out the exception via `traceback` and store the value - # into the `traceback` context variable. - tb_io = io.StringIO() - traceback.print_exc(file=tb_io) - tb = tb_io.getvalue() - context["traceback"] = tb - - # Produce a SHA1 hash of the traceback string. - tb_hash = hashlib.sha1(tb.encode()).hexdigest() - tb_id = tb_hash[:7] - - redis = redis_connection() - key = f"tb:{tb_hash}" - retval = redis.get(key) - if not retval: - # Expire in one hour; this is just done to make sure we - # don't infinitely store these values, but reduce the number - # of automated reports (notification below). At this time of - # writing, unexpected exceptions are not common, thus this - # will not produce a large memory footprint in redis. - pipe = redis.pipeline() - pipe.set(key, tb) - pipe.expire(key, 86400) # One day. - pipe.execute() - - # Send out notification about it. - if "set-me" not in (project, token): - proj = quote_plus(project) - endp = f"{repo}/api/v4/projects/{proj}/issues" - - base = f"{request.url.scheme}://{request.url.netloc}" - title = f"Traceback [{tb_id}]: {base}{request.url.path}" - desc = [ - "DISCLAIMER", - "----------", - "**This issue is confidential** and should be sanitized " - "before sharing with users or developers. Please ensure " - "you've completed the following tasks:", - "- [ ] I have removed any sensitive data and " - "the description history.", - "", - "Exception Details", - "-----------------", - f"- Route: `{request.url.path}`", - f"- User: `{request.user.Username}`", - f"- Email: `{request.user.Email}`", - ] - - # Add method-specific information to the description. - if request.method.lower() == "get": - # get - if request.url.query: - desc = desc + [f"- Query: `{request.url.query}`"] - desc += ["", f"```{tb}```"] - else: - # post - form_data = str(dict(request.state.form_data)) - desc = desc + [f"- Data: `{form_data}`"] + ["", f"```{tb}```"] - - headers = {"Authorization": f"Bearer {token}"} - data = { - "title": title, - "description": "\n".join(desc), - "labels": ["triage"], - "confidential": True, - } - logger.info(endp) - resp = requests.post(endp, json=data, headers=headers) - if resp.status_code != http.HTTPStatus.CREATED: - logger.error(f"Unable to report exception to {repo}: {resp.text}") - else: - logger.warning( - "Unable to report an exception found due to " - "unset notifications.error-{{project,token}}" - ) - - # Log details about the exception traceback. - logger.error(f"FATAL[{tb_id}]: An unexpected exception has occurred.") - logger.error(tb) - else: - retval = retval.decode() - - return render_template( - request, - "errors/500.html", - context, - status_code=http.HTTPStatus.INTERNAL_SERVER_ERROR, - ) - - -@app.exception_handler(StarletteHTTPException) -async def http_exception_handler(request: Request, exc: HTTPException) -> Response: - """Handle an HTTPException thrown in a route.""" - phrase = http.HTTPStatus(exc.status_code).phrase - context = make_context(request, phrase) - context["exc"] = exc - context["phrase"] = phrase - - # Additional context for some exceptions. - if exc.status_code == http.HTTPStatus.NOT_FOUND: - tokens = request.url.path.split("/") - matches = re.match("^([a-z0-9][a-z0-9.+_-]*?)(\\.git)?$", tokens[1]) - if matches and len(tokens) == 2: - try: - pkgbase = get_pkg_or_base(matches.group(1)) - context["pkgbase"] = pkgbase - context["git_clone_uri_anon"] = aurweb.config.get( - "options", "git_clone_uri_anon" - ) - context["git_clone_uri_priv"] = aurweb.config.get( - "options", "git_clone_uri_priv" - ) - except HTTPException: - pass - - try: - return render_template( - request, f"errors/{exc.status_code}.html", context, exc.status_code - ) - except TemplateNotFound: - return render_template(request, "errors/detail.html", context, exc.status_code) - - -@app.middleware("http") -async def add_security_headers(request: Request, call_next: typing.Callable): - """This middleware adds the CSP, XCTO, XFO and RP security - headers to the HTTP response associated with request. - - CSP: Content-Security-Policy - XCTO: X-Content-Type-Options - RP: Referrer-Policy - XFO: X-Frame-Options - """ - try: - response = await util.error_or_result(call_next, request) - except Exception as exc: - return await internal_server_error(request, exc) - - # Add CSP header. - nonce = request.user.nonce - csp = "default-src 'self'; " - - # swagger-ui needs access to cdn.jsdelivr.net javascript - script_hosts = ["cdn.jsdelivr.net"] - csp += f"script-src 'self' 'unsafe-inline' 'nonce-{nonce}' " + " ".join( - script_hosts - ) - - # swagger-ui needs access to cdn.jsdelivr.net css - css_hosts = ["cdn.jsdelivr.net"] - csp += "; style-src 'self' 'unsafe-inline' " + " ".join(css_hosts) - response.headers["Content-Security-Policy"] = csp - - # Add XTCO header. - xcto = "nosniff" - response.headers["X-Content-Type-Options"] = xcto - - # Add Referrer Policy header. - rp = "same-origin" - response.headers["Referrer-Policy"] = rp - - # Add X-Frame-Options header. - xfo = "SAMEORIGIN" - response.headers["X-Frame-Options"] = xfo - - return response - - -@app.middleware("http") -async def check_terms_of_service(request: Request, call_next: typing.Callable): - """This middleware function redirects authenticated users if they - have any outstanding Terms to agree to.""" - if request.user.is_authenticated() and request.url.path != "/tos": - accepted = ( - query(Term) - .join(AcceptedTerm) - .filter( - and_( - AcceptedTerm.UsersID == request.user.ID, - AcceptedTerm.TermsID == Term.ID, - AcceptedTerm.Revision >= Term.Revision, - ), - ) - ) - if query(Term).count() - accepted.count() > 0: - return RedirectResponse("/tos", status_code=int(http.HTTPStatus.SEE_OTHER)) - - return await util.error_or_result(call_next, request) - - -@app.middleware("http") -async def id_redirect_middleware(request: Request, call_next: typing.Callable): - id = request.query_params.get("id") - - if id is not None: - # Preserve query string. - qs = [] - for k, v in request.query_params.items(): - if k != "id": - qs.append(f"{k}={quote_plus(str(v))}") - qs = str() if not qs else "?" + "&".join(qs) - - path = request.url.path.rstrip("/") - return RedirectResponse(f"{path}/{id}{qs}") - - return await util.error_or_result(call_next, request) - - -# Add application middlewares. -app.add_middleware(AuthenticationMiddleware, backend=BasicAuthBackend()) -app.add_middleware(SessionMiddleware, secret_key=session_secret) diff --git a/aurweb/aur_logging.py b/aurweb/aur_logging.py deleted file mode 100644 index d90edfdd..00000000 --- a/aurweb/aur_logging.py +++ /dev/null @@ -1,26 +0,0 @@ -import logging -import logging.config -import os - -import aurweb.config - -# For testing, users should set LOG_CONFIG=logging.test.conf -# We test against various debug log output. -aurwebdir = aurweb.config.get("options", "aurwebdir") -log_config = os.environ.get("LOG_CONFIG", "logging.conf") -config_path = os.path.join(aurwebdir, log_config) - -logging.config.fileConfig(config_path, disable_existing_loggers=False) -logging.getLogger("root").addHandler(logging.NullHandler()) - - -def get_logger(name: str) -> logging.Logger: - """A logging.getLogger wrapper. Importing this function and - using it to get a module-local logger ensures that logging.conf - initialization is performed wherever loggers are used. - - :param name: Logger name; typically `__name__` - :returns: name's logging.Logger - """ - - return logging.getLogger(name) diff --git a/aurweb/aur_redis.py b/aurweb/aur_redis.py deleted file mode 100644 index b735bb84..00000000 --- a/aurweb/aur_redis.py +++ /dev/null @@ -1,58 +0,0 @@ -import fakeredis -from opentelemetry.instrumentation.redis import RedisInstrumentor -from redis import ConnectionPool, Redis - -import aurweb.config -from aurweb import aur_logging - -logger = aur_logging.get_logger(__name__) -pool = None - -RedisInstrumentor().instrument() - - -class FakeConnectionPool: - """A fake ConnectionPool class which holds an internal reference - to a fakeredis handle. - - We normally deal with Redis by keeping its ConnectionPool globally - referenced so we can persist connection state through different calls - to redis_connection(), and since FakeRedis does not offer a ConnectionPool, - we craft one up here to hang onto the same handle instance as long as the - same instance is alive; this allows us to use a similar flow from the - redis_connection() user's perspective. - """ - - def __init__(self): - self.handle = fakeredis.FakeStrictRedis() - - def disconnect(self): - pass - - -def redis_connection(): # pragma: no cover - global pool - - disabled = aurweb.config.get("options", "cache") != "redis" - - # If we haven't initialized redis yet, construct a pool. - if disabled: - if pool is None: - logger.debug("Initializing fake Redis instance.") - pool = FakeConnectionPool() - return pool.handle - else: - if pool is None: - logger.debug("Initializing real Redis instance.") - redis_addr = aurweb.config.get("options", "redis_address") - pool = ConnectionPool.from_url(redis_addr) - - # Create a connection to the pool. - return Redis(connection_pool=pool) - - -def kill_redis(): - global pool - if pool: - pool.disconnect() - pool = None diff --git a/aurweb/auth/__init__.py b/aurweb/auth/__init__.py deleted file mode 100644 index e895dcdb..00000000 --- a/aurweb/auth/__init__.py +++ /dev/null @@ -1,227 +0,0 @@ -import functools -from http import HTTPStatus -from typing import Callable - -import fastapi -from fastapi import HTTPException -from fastapi.responses import RedirectResponse -from starlette.authentication import AuthCredentials, AuthenticationBackend -from starlette.requests import HTTPConnection - -import aurweb.config -from aurweb import db, filters, l10n, time, util -from aurweb.models import Session, User -from aurweb.models.account_type import ACCOUNT_TYPE_ID - - -class StubQuery: - """Acts as a stubbed version of an orm.Query. Typically used - to masquerade fake records for an AnonymousUser.""" - - def filter(self, *args): - return StubQuery() - - def scalar(self): - return 0 - - -class AnonymousUser: - """A stubbed User class used when an unauthenticated User - makes a request against FastAPI.""" - - # Stub attributes used to mimic a real user. - ID = 0 - Username = "N/A" - Email = "N/A" - - class AccountType: - """A stubbed AccountType static class. In here, we use an ID - and AccountType which do not exist in our constant records. - All records primary keys (AccountType.ID) should be non-zero, - so using a zero here means that we'll never match against a - real AccountType.""" - - ID = 0 - AccountType = "Anonymous" - - # AccountTypeID == AccountType.ID; assign a stubbed column. - AccountTypeID = AccountType.ID - - LangPreference = aurweb.config.get("options", "default_lang") - Timezone = aurweb.config.get("options", "default_timezone") - - Suspended = 0 - InactivityTS = 0 - - # A stub ssh_pub_key relationship. - ssh_pub_key = None - - # Add stubbed relationship backrefs. - notifications = StubQuery() - package_votes = StubQuery() - - # A nonce attribute, needed for all browser sessions; set in __init__. - nonce = None - - def __init__(self): - self.nonce = util.make_nonce() - - @staticmethod - def is_authenticated(): - return False - - @staticmethod - def is_package_maintainer(): - return False - - @staticmethod - def is_developer(): - return False - - @staticmethod - def is_elevated(): - return False - - @staticmethod - def has_credential(credential, **kwargs): - return False - - @staticmethod - def voted_for(package): - return False - - @staticmethod - def notified(package): - return False - - -class BasicAuthBackend(AuthenticationBackend): - @db.async_retry_deadlock - async def authenticate(self, conn: HTTPConnection): - unauthenticated = (None, AnonymousUser()) - sid = conn.cookies.get("AURSID") - if not sid: - return unauthenticated - - timeout = aurweb.config.getint("options", "login_timeout") - remembered = conn.cookies.get("AURREMEMBER") == "True" - if remembered: - timeout = aurweb.config.getint("options", "persistent_cookie_timeout") - - # If no session with sid and a LastUpdateTS now or later exists. - now_ts = time.utcnow() - record = db.query(Session).filter(Session.SessionID == sid).first() - if not record: - return unauthenticated - elif record.LastUpdateTS < (now_ts - timeout): - with db.begin(): - db.delete_all([record]) - return unauthenticated - - # At this point, we cannot have an invalid user if the record - # exists, due to ForeignKey constraints in the schema upheld - # by mysqlclient. - user = db.query(User).filter(User.ID == record.UsersID).first() - user.nonce = util.make_nonce() - user.authenticated = True - - return AuthCredentials(["authenticated"]), user - - -def _auth_required(auth_goal: bool = True): - """ - Enforce a user's authentication status, bringing them to the login page - or homepage if their authentication status does not match the goal. - - NOTE: This function should not need to be used in downstream code. - See `requires_auth` and `requires_guest` for decorators meant to be - used on routes (they're a bit more implicitly understandable). - - :param auth_goal: Whether authentication is required or entirely disallowed - for a user to perform this request. - :return: Return the FastAPI function this decorator wraps. - """ - - def decorator(func): - @functools.wraps(func) - async def wrapper(request, *args, **kwargs): - if request.user.is_authenticated() == auth_goal: - return await func(request, *args, **kwargs) - - url = "/" - if auth_goal is False: - return RedirectResponse(url, status_code=int(HTTPStatus.SEE_OTHER)) - - # Use the request path when the user can visit a page directly but - # is not authenticated and use the Referer header if visiting the - # page itself is not directly possible (e.g. submitting a form). - if request.method in ("GET", "HEAD"): - url = request.url.path - elif referer := request.headers.get("Referer"): - aur = aurweb.config.get("options", "aur_location") + "/" - if not referer.startswith(aur): - _ = l10n.get_translator_for_request(request) - raise HTTPException( - status_code=HTTPStatus.BAD_REQUEST, - detail=_("Bad Referer header."), - ) - url = referer[len(aur) - 1 :] - url = "/login?" + filters.urlencode({"next": url}) - return RedirectResponse(url, status_code=int(HTTPStatus.SEE_OTHER)) - - return wrapper - - return decorator - - -def requires_auth(func: Callable) -> Callable: - """Require an authenticated session for a particular route.""" - - @functools.wraps(func) - async def wrapper(*args, **kwargs): - return await _auth_required(True)(func)(*args, **kwargs) - - return wrapper - - -def requires_guest(func: Callable) -> Callable: - """Require a guest (unauthenticated) session for a particular route.""" - - @functools.wraps(func) - async def wrapper(*args, **kwargs): - return await _auth_required(False)(func)(*args, **kwargs) - - return wrapper - - -def account_type_required(one_of: set): - """A decorator that can be used on FastAPI routes to dictate - that a user belongs to one of the types defined in one_of. - - This decorator should be run after an @auth_required(True) is - dictated. - - - Example code: - - @router.get('/some_route') - @auth_required(True) - @account_type_required({"Package Maintainer", "Package Maintainer & Developer"}) - async def some_route(request: fastapi.Request): - return Response() - - :param one_of: A set consisting of strings to match against AccountType. - :return: Return the FastAPI function this decorator wraps. - """ - # Convert any account type string constants to their integer IDs. - one_of = {ACCOUNT_TYPE_ID[atype] for atype in one_of if isinstance(atype, str)} - - def decorator(func): - @functools.wraps(func) - async def wrapper(request: fastapi.Request, *args, **kwargs): - if request.user.AccountTypeID not in one_of: - return RedirectResponse("/", status_code=int(HTTPStatus.SEE_OTHER)) - return await func(request, *args, **kwargs) - - return wrapper - - return decorator diff --git a/aurweb/auth/creds.py b/aurweb/auth/creds.py deleted file mode 100644 index 594188ca..00000000 --- a/aurweb/auth/creds.py +++ /dev/null @@ -1,82 +0,0 @@ -from aurweb.models.account_type import ( - DEVELOPER_ID, - PACKAGE_MAINTAINER_AND_DEV_ID, - PACKAGE_MAINTAINER_ID, - USER_ID, -) -from aurweb.models.user import User - -ACCOUNT_CHANGE_TYPE = 1 -ACCOUNT_EDIT = 2 -ACCOUNT_EDIT_DEV = 3 -ACCOUNT_LAST_LOGIN = 4 -ACCOUNT_SEARCH = 5 -ACCOUNT_LIST_COMMENTS = 28 -COMMENT_DELETE = 6 -COMMENT_UNDELETE = 27 -COMMENT_VIEW_DELETED = 22 -COMMENT_EDIT = 25 -COMMENT_PIN = 26 -PKGBASE_ADOPT = 7 -PKGBASE_SET_KEYWORDS = 8 -PKGBASE_DELETE = 9 -PKGBASE_DISOWN = 10 -PKGBASE_EDIT_COMAINTAINERS = 24 -PKGBASE_FLAG = 11 -PKGBASE_LIST_VOTERS = 12 -PKGBASE_NOTIFY = 13 -PKGBASE_UNFLAG = 15 -PKGBASE_VOTE = 16 -PKGREQ_FILE = 23 -PKGREQ_CLOSE = 17 -PKGREQ_LIST = 18 -PM_ADD_VOTE = 19 -PM_LIST_VOTES = 20 -PM_VOTE = 21 -PKGBASE_MERGE = 29 - -user_developer_or_package_maintainer = set( - [USER_ID, PACKAGE_MAINTAINER_ID, DEVELOPER_ID, PACKAGE_MAINTAINER_AND_DEV_ID] -) -package_maintainer_or_dev = set( - [PACKAGE_MAINTAINER_ID, DEVELOPER_ID, PACKAGE_MAINTAINER_AND_DEV_ID] -) -developer = set([DEVELOPER_ID, PACKAGE_MAINTAINER_AND_DEV_ID]) -package_maintainer = set([PACKAGE_MAINTAINER_ID, PACKAGE_MAINTAINER_AND_DEV_ID]) - -cred_filters = { - PKGBASE_FLAG: user_developer_or_package_maintainer, - PKGBASE_NOTIFY: user_developer_or_package_maintainer, - PKGBASE_VOTE: user_developer_or_package_maintainer, - PKGREQ_FILE: user_developer_or_package_maintainer, - ACCOUNT_CHANGE_TYPE: package_maintainer_or_dev, - ACCOUNT_EDIT: package_maintainer_or_dev, - ACCOUNT_LAST_LOGIN: package_maintainer_or_dev, - ACCOUNT_LIST_COMMENTS: package_maintainer_or_dev, - ACCOUNT_SEARCH: package_maintainer_or_dev, - COMMENT_DELETE: package_maintainer_or_dev, - COMMENT_UNDELETE: package_maintainer_or_dev, - COMMENT_VIEW_DELETED: package_maintainer_or_dev, - COMMENT_EDIT: package_maintainer_or_dev, - COMMENT_PIN: package_maintainer_or_dev, - PKGBASE_ADOPT: package_maintainer_or_dev, - PKGBASE_SET_KEYWORDS: package_maintainer_or_dev, - PKGBASE_DELETE: package_maintainer_or_dev, - PKGBASE_EDIT_COMAINTAINERS: package_maintainer_or_dev, - PKGBASE_DISOWN: package_maintainer_or_dev, - PKGBASE_LIST_VOTERS: package_maintainer_or_dev, - PKGBASE_UNFLAG: package_maintainer_or_dev, - PKGREQ_CLOSE: package_maintainer_or_dev, - PKGREQ_LIST: package_maintainer_or_dev, - PM_ADD_VOTE: package_maintainer, - PM_LIST_VOTES: package_maintainer_or_dev, - PM_VOTE: package_maintainer, - ACCOUNT_EDIT_DEV: developer, - PKGBASE_MERGE: package_maintainer_or_dev, -} - - -def has_credential(user: User, credential: int, approved: list = tuple()): - if user in approved: - return True - return user.AccountTypeID in cred_filters[credential] diff --git a/aurweb/benchmark.py b/aurweb/benchmark.py deleted file mode 100644 index 83969962..00000000 --- a/aurweb/benchmark.py +++ /dev/null @@ -1,21 +0,0 @@ -from datetime import UTC, datetime - - -class Benchmark: - def __init__(self): - self.start() - - def _timestamp(self) -> float: - """Generate a timestamp.""" - return float(datetime.now(UTC).timestamp()) - - def start(self) -> int: - """Start a benchmark.""" - self.current = self._timestamp() - return self.current - - def end(self): - """Return the diff between now - start().""" - n = self._timestamp() - self.current - self.current = float(0) - return n diff --git a/aurweb/cache.py b/aurweb/cache.py deleted file mode 100644 index 477f6780..00000000 --- a/aurweb/cache.py +++ /dev/null @@ -1,64 +0,0 @@ -import pickle -from typing import Any, Callable - -from sqlalchemy import orm - -from aurweb import config -from aurweb.aur_redis import redis_connection -from aurweb.prometheus import SEARCH_REQUESTS - -_redis = redis_connection() - - -def lambda_cache(key: str, value: Callable[[], Any], expire: int = None) -> list: - """Store and retrieve lambda results via redis cache. - - :param key: Redis key - :param value: Lambda callable returning the value - :param expire: Optional expiration in seconds - :return: result of callable or cache - """ - result = _redis.get(key) - if result is not None: - return pickle.loads(result) - - _redis.set(key, (pickle.dumps(result := value())), ex=expire) - return result - - -def db_count_cache(key: str, query: orm.Query, expire: int = None) -> int: - """Store and retrieve a query.count() via redis cache. - - :param key: Redis key - :param query: SQLAlchemy ORM query - :param expire: Optional expiration in seconds - :return: query.count() - """ - result = _redis.get(key) - if result is None: - _redis.set(key, (result := int(query.count()))) - if expire: - _redis.expire(key, expire) - return int(result) - - -def db_query_cache(key: str, query: orm.Query, expire: int = None) -> list: - """Store and retrieve query results via redis cache. - - :param key: Redis key - :param query: SQLAlchemy ORM query - :param expire: Optional expiration in seconds - :return: query.all() - """ - result = _redis.get(key) - if result is None: - SEARCH_REQUESTS.labels(cache="miss").inc() - if _redis.dbsize() > config.getint("cache", "max_search_entries", 50000): - return query.all() - _redis.set(key, (result := pickle.dumps(query.all()))) - if expire: - _redis.expire(key, expire) - else: - SEARCH_REQUESTS.labels(cache="hit").inc() - - return pickle.loads(result) diff --git a/aurweb/captcha.py b/aurweb/captcha.py deleted file mode 100644 index 52e834ac..00000000 --- a/aurweb/captcha.py +++ /dev/null @@ -1,62 +0,0 @@ -""" This module consists of aurweb's CAPTCHA utility functions and filters. """ - -import hashlib - -from jinja2 import pass_context -from sqlalchemy import func - -from aurweb.db import query -from aurweb.models import User -from aurweb.templates import register_filter - - -def get_captcha_salts(): - """Produce salts based on the current user count.""" - count = query(func.count(User.ID)).scalar() - - salts = [] - for i in range(0, 6): - salts.append(f"aurweb-{count - i}") - return salts - - -def get_captcha_token(salt): - """Produce a token for the CAPTCHA salt.""" - return hashlib.md5(salt.encode()).hexdigest()[:3] - - -def get_captcha_challenge(salt): - """Get a CAPTCHA challenge string (shell command) for a salt.""" - token = get_captcha_token(salt) - return f"LC_ALL=C pacman -V|sed -r 's#[0-9]+#{token}#g'|md5sum|cut -c1-6" - - -def get_captcha_answer(token): - """Compute the answer via md5 of the real template text, return the - first six digits of the hexadecimal hash.""" - text = r""" - .--. Pacman v%s.%s.%s - libalpm v%s.%s.%s -/ _.-' .-. .-. .-. Copyright (C) %s-%s Pacman Development Team -\ '-. '-' '-' '-' Copyright (C) %s-%s Judd Vinet - '--' - This program may be freely redistributed under - the terms of the GNU General Public License. -""" % tuple( - [token] * 10 - ) - return hashlib.md5((text + "\n").encode()).hexdigest()[:6] - - -@register_filter("captcha_salt") -@pass_context -def captcha_salt_filter(context): - """Returns the most recent CAPTCHA salt in the list of salts.""" - salts = get_captcha_salts() - return salts[0] - - -@register_filter("captcha_cmdline") -@pass_context -def captcha_cmdline_filter(context, salt): - """Returns a CAPTCHA challenge for a given salt.""" - return get_captcha_challenge(salt) diff --git a/aurweb/config.py b/aurweb/config.py deleted file mode 100644 index 46c6b182..00000000 --- a/aurweb/config.py +++ /dev/null @@ -1,79 +0,0 @@ -import configparser -import os -from typing import Any - -import tomlkit - -_parser = None - - -def _get_parser(): - global _parser - - if not _parser: - path = os.environ.get("AUR_CONFIG", "/etc/aurweb/config") - defaults = os.environ.get("AUR_CONFIG_DEFAULTS", path + ".defaults") - - _parser = configparser.RawConfigParser() - _parser.optionxform = lambda option: option - if os.path.isfile(defaults): - with open(defaults) as f: - _parser.read_file(f) - _parser.read(path) - - return _parser - - -def rehash(): - """Globally rehash the configuration parser.""" - global _parser - _parser = None - _get_parser() - - -def get_with_fallback(section, option, fallback): - return _get_parser().get(section, option, fallback=fallback) - - -def get(section, option): - return _get_parser().get(section, option) - - -def _get_project_meta(): - with open(os.path.join(get("options", "aurwebdir"), "pyproject.toml")) as pyproject: - file_contents = pyproject.read() - - return tomlkit.parse(file_contents)["tool"]["poetry"] - - -# Publicly visible version of aurweb. This is used to display -# aurweb versioning in the footer and must be maintained. -AURWEB_VERSION = str(_get_project_meta()["version"]) - - -def getboolean(section, option): - return _get_parser().getboolean(section, option) - - -def getint(section, option, fallback=None): - return _get_parser().getint(section, option, fallback=fallback) - - -def get_section(section): - if section in _get_parser().sections(): - return _get_parser()[section] - - -def unset_option(section: str, option: str) -> None: - _get_parser().remove_option(section, option) - - -def set_option(section: str, option: str, value: Any) -> None: - _get_parser().set(section, option, value) - return value - - -def save() -> None: - aur_config = os.environ.get("AUR_CONFIG", "/etc/aurweb/config") - with open(aur_config, "w") as fp: - _get_parser().write(fp) diff --git a/aurweb/cookies.py b/aurweb/cookies.py deleted file mode 100644 index 84c43f9b..00000000 --- a/aurweb/cookies.py +++ /dev/null @@ -1,8 +0,0 @@ -def samesite() -> str: - """Produce cookie SameSite value. - - Currently this is hard-coded to return "lax" - - :returns "lax" - """ - return "lax" diff --git a/aurweb/db.py b/aurweb/db.py deleted file mode 100644 index f1b8210f..00000000 --- a/aurweb/db.py +++ /dev/null @@ -1,435 +0,0 @@ -# Supported database drivers. -DRIVERS = {"mysql": "mysql+mysqldb"} - - -def make_random_value(table: str, column: str, length: int): - """Generate a unique, random value for a string column in a table. - - :return: A unique string that is not in the database - """ - import aurweb.util - - string = aurweb.util.make_random_string(length) - while query(table).filter(column == string).first(): - string = aurweb.util.make_random_string(length) - return string - - -def test_name() -> str: - """ - Return the unhashed database name. - - The unhashed database name is determined (lower = higher priority) by: - ------------------------------------------- - 1. {test_suite} portion of PYTEST_CURRENT_TEST - 2. aurweb.config.get("database", "name") - - During `pytest` runs, the PYTEST_CURRENT_TEST environment variable - is set to the current test in the format `{test_suite}::{test_func}`. - - This allows tests to use a suite-specific database for its runs, - which decouples database state from test suites. - - :return: Unhashed database name - """ - import os - - import aurweb.config - - db = os.environ.get("PYTEST_CURRENT_TEST", aurweb.config.get("database", "name")) - return db.split(":")[0] - - -def name() -> str: - """ - Return sanitized database name that can be used for tests or production. - - If test_name() starts with "test/", the database name is SHA-1 hashed, - prefixed with 'db', and returned. Otherwise, test_name() is passed - through and not hashed at all. - - :return: SHA1-hashed database name prefixed with 'db' - """ - dbname = test_name() - if not dbname.startswith("test/"): - return dbname - - import hashlib - - sha1 = hashlib.sha1(dbname.encode()).hexdigest() - - return "db" + sha1 - - -# Module-private global memo used to store SQLAlchemy sessions. -_sessions = dict() - - -def get_session(engine=None): - """Return aurweb.db's global session.""" - dbname = name() - - global _sessions - if dbname not in _sessions: - from sqlalchemy.orm import scoped_session, sessionmaker - - if not engine: # pragma: no cover - engine = get_engine() - - Session = scoped_session( - sessionmaker(autocommit=True, autoflush=False, bind=engine) - ) - _sessions[dbname] = Session() - - return _sessions.get(dbname) - - -def pop_session(dbname: str) -> None: - """ - Pop a Session out of the private _sessions memo. - - :param dbname: Database name - :raises KeyError: When `dbname` does not exist in the memo - """ - global _sessions - _sessions.pop(dbname) - - -def refresh(model): - """ - Refresh the session's knowledge of `model`. - - :returns: Passed in `model` - """ - get_session().refresh(model) - return model - - -def query(Model, *args, **kwargs): - """ - Perform an ORM query against the database session. - - This method also runs Query.filter on the resulting model - query with *args and **kwargs. - - :param Model: Declarative ORM class - """ - return get_session().query(Model).filter(*args, **kwargs) - - -def create(Model, *args, **kwargs): - """ - Create a record and add() it to the database session. - - :param Model: Declarative ORM class - :return: Model instance - """ - instance = Model(*args, **kwargs) - return add(instance) - - -def delete(model) -> None: - """ - Delete a set of records found by Query.filter(*args, **kwargs). - - :param Model: Declarative ORM class - """ - get_session().delete(model) - - -def delete_all(iterable) -> None: - """Delete each instance found in `iterable`.""" - import aurweb.util - - session_ = get_session() - aurweb.util.apply_all(iterable, session_.delete) - - -def rollback() -> None: - """Rollback the database session.""" - get_session().rollback() - - -def add(model): - """Add `model` to the database session.""" - get_session().add(model) - return model - - -def begin(): - """Begin an SQLAlchemy SessionTransaction.""" - return get_session().begin() - - -def retry_deadlock(func): - from sqlalchemy.exc import OperationalError - - def wrapper(*args, _i: int = 0, **kwargs): - # Retry 10 times, then raise the exception - # If we fail before the 10th, recurse into `wrapper` - # If we fail on the 10th, continue to throw the exception - limit = 10 - try: - return func(*args, **kwargs) - except OperationalError as exc: - if _i < limit and "Deadlock found" in str(exc): - # Retry on deadlock by recursing into `wrapper` - return wrapper(*args, _i=_i + 1, **kwargs) - # Otherwise, just raise the exception - raise exc - - return wrapper - - -def async_retry_deadlock(func): - from sqlalchemy.exc import OperationalError - - async def wrapper(*args, _i: int = 0, **kwargs): - # Retry 10 times, then raise the exception - # If we fail before the 10th, recurse into `wrapper` - # If we fail on the 10th, continue to throw the exception - limit = 10 - try: - return await func(*args, **kwargs) - except OperationalError as exc: - if _i < limit and "Deadlock found" in str(exc): - # Retry on deadlock by recursing into `wrapper` - return await wrapper(*args, _i=_i + 1, **kwargs) - # Otherwise, just raise the exception - raise exc - - return wrapper - - -def get_sqlalchemy_url(): - """ - Build an SQLAlchemy URL for use with create_engine. - - :return: sqlalchemy.engine.url.URL - """ - import sqlalchemy - from sqlalchemy.engine.url import URL - - import aurweb.config - - constructor = URL - - parts = sqlalchemy.__version__.split(".") - major = int(parts[0]) - minor = int(parts[1]) - if major == 1 and minor >= 4: # pragma: no cover - constructor = URL.create - - aur_db_backend = aurweb.config.get("database", "backend") - if aur_db_backend == "mysql": - param_query = {} - port = aurweb.config.get_with_fallback("database", "port", None) - if not port: - param_query["unix_socket"] = aurweb.config.get("database", "socket") - - return constructor( - DRIVERS.get(aur_db_backend), - username=aurweb.config.get("database", "user"), - password=aurweb.config.get_with_fallback( - "database", "password", fallback=None - ), - host=aurweb.config.get("database", "host"), - database=name(), - port=port, - query=param_query, - ) - elif aur_db_backend == "sqlite": - return constructor( - "sqlite", - database=aurweb.config.get("database", "name"), - ) - else: - raise ValueError("unsupported database backend") - - -def sqlite_regexp(regex, item) -> bool: # pragma: no cover - """Method which mimics SQL's REGEXP for SQLite.""" - import re - - return bool(re.search(regex, str(item))) - - -def setup_sqlite(engine) -> None: # pragma: no cover - """Perform setup for an SQLite engine.""" - from sqlalchemy import event - - @event.listens_for(engine, "connect") - def do_begin(conn, record): - import functools - - create_deterministic_function = functools.partial( - conn.create_function, deterministic=True - ) - create_deterministic_function("REGEXP", 2, sqlite_regexp) - - -# Module-private global memo used to store SQLAlchemy engines. -_engines = dict() - - -def get_engine(dbname: str = None, echo: bool = False): - """ - Return the SQLAlchemy engine for `dbname`. - - The engine is created on the first call to get_engine and then stored in the - `engine` global variable for the next calls. - - :param dbname: Database name (default: aurweb.db.name()) - :param echo: Flag passed through to sqlalchemy.create_engine - :return: SQLAlchemy Engine instance - """ - import aurweb.config - - if not dbname: - dbname = name() - - global _engines - if dbname not in _engines: - db_backend = aurweb.config.get("database", "backend") - connect_args = dict() - - is_sqlite = bool(db_backend == "sqlite") - if is_sqlite: # pragma: no cover - connect_args["check_same_thread"] = False - - kwargs = {"echo": echo, "connect_args": connect_args} - from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor - from sqlalchemy import create_engine - - engine = create_engine(get_sqlalchemy_url(), **kwargs) - SQLAlchemyInstrumentor().instrument(engine=engine) - _engines[dbname] = engine - - if is_sqlite: # pragma: no cover - setup_sqlite(_engines.get(dbname)) - - return _engines.get(dbname) - - -def pop_engine(dbname: str) -> None: - """ - Pop an Engine out of the private _engines memo. - - :param dbname: Database name - :raises KeyError: When `dbname` does not exist in the memo - """ - global _engines - _engines.pop(dbname) - - -def kill_engine() -> None: - """Close the current session and dispose of the engine.""" - dbname = name() - - session = get_session() - session.close() - pop_session(dbname) - - engine = get_engine() - engine.dispose() - pop_engine(dbname) - - -def connect(): - """ - Return an SQLAlchemy connection. Connections are usually pooled. See - . - - Since SQLAlchemy connections are context managers too, you should use it - with Python’s `with` operator, or with FastAPI’s dependency injection. - """ - return get_engine().connect() - - -class ConnectionExecutor: - _conn = None - _paramstyle = None - - def __init__(self, conn, backend=None): - import aurweb.config - - backend = backend or aurweb.config.get("database", "backend") - self._conn = conn - if backend == "mysql": - self._paramstyle = "format" - elif backend == "sqlite": - import sqlite3 - - self._paramstyle = sqlite3.paramstyle - - def paramstyle(self): - return self._paramstyle - - def execute(self, query, params=()): # pragma: no cover - # TODO: SQLite support has been removed in FastAPI. It remains - # here to fund its support for the Sharness testsuite. - if self._paramstyle in ("format", "pyformat"): - query = query.replace("%", "%%").replace("?", "%s") - elif self._paramstyle == "qmark": - pass - else: - raise ValueError("unsupported paramstyle") - - cur = self._conn.cursor() - cur.execute(query, params) - - return cur - - def commit(self): - self._conn.commit() - - def close(self): - self._conn.close() - - -class Connection: - _executor = None - _conn = None - - def __init__(self): - import aurweb.config - - aur_db_backend = aurweb.config.get("database", "backend") - - if aur_db_backend == "mysql": - import MySQLdb - - aur_db_host = aurweb.config.get("database", "host") - aur_db_name = name() - aur_db_user = aurweb.config.get("database", "user") - aur_db_pass = aurweb.config.get_with_fallback("database", "password", str()) - aur_db_socket = aurweb.config.get("database", "socket") - self._conn = MySQLdb.connect( - host=aur_db_host, - user=aur_db_user, - passwd=aur_db_pass, - db=aur_db_name, - unix_socket=aur_db_socket, - ) - elif aur_db_backend == "sqlite": # pragma: no cover - # TODO: SQLite support has been removed in FastAPI. It remains - # here to fund its support for Sharness testsuite. - import math - import sqlite3 - - aur_db_name = aurweb.config.get("database", "name") - self._conn = sqlite3.connect(aur_db_name) - self._conn.create_function("POWER", 2, math.pow) - else: - raise ValueError("unsupported database backend") - - self._conn = ConnectionExecutor(self._conn, aur_db_backend) - - def execute(self, query, params=()): - return self._conn.execute(query, params) - - def commit(self): - self._conn.commit() - - def close(self): - self._conn.close() diff --git a/aurweb/defaults.py b/aurweb/defaults.py deleted file mode 100644 index 84d91c55..00000000 --- a/aurweb/defaults.py +++ /dev/null @@ -1,24 +0,0 @@ -""" Constant default values centralized in one place. """ - -# Default [O]ffset -O = 0 - -# Default [P]er [P]age -PP = 50 - -# Default Comments Per Page -COMMENTS_PER_PAGE = 10 - -# A whitelist of valid PP values -PP_WHITELIST = {50, 100, 250} - -# Default `by` parameter for RPC search. -RPC_SEARCH_BY = "name-desc" - - -def fallback_pp(per_page: int) -> int: - """If `per_page` is a valid value in PP_WHITELIST, return it. - Otherwise, return defaults.PP.""" - if per_page not in PP_WHITELIST: - return PP - return per_page diff --git a/aurweb/exceptions.py b/aurweb/exceptions.py deleted file mode 100644 index e24eb607..00000000 --- a/aurweb/exceptions.py +++ /dev/null @@ -1,112 +0,0 @@ -import functools -from typing import Any, Callable - -import fastapi - - -class AurwebException(Exception): - pass - - -class MaintenanceException(AurwebException): - pass - - -class BannedException(AurwebException): - pass - - -class PermissionDeniedException(AurwebException): - def __init__(self, user): - msg = "permission denied: {:s}".format(user) - super(PermissionDeniedException, self).__init__(msg) - - -class BrokenUpdateHookException(AurwebException): - def __init__(self, cmd): - msg = "broken update hook: {:s}".format(cmd) - super(BrokenUpdateHookException, self).__init__(msg) - - -class InvalidUserException(AurwebException): - def __init__(self, user): - msg = "unknown user: {:s}".format(user) - super(InvalidUserException, self).__init__(msg) - - -class InvalidPackageBaseException(AurwebException): - def __init__(self, pkgbase): - msg = "package base not found: {:s}".format(pkgbase) - super(InvalidPackageBaseException, self).__init__(msg) - - -class InvalidRepositoryNameException(AurwebException): - def __init__(self, pkgbase): - msg = "invalid repository name: {:s}".format(pkgbase) - super(InvalidRepositoryNameException, self).__init__(msg) - - -class PackageBaseExistsException(AurwebException): - def __init__(self, pkgbase): - msg = "package base already exists: {:s}".format(pkgbase) - super(PackageBaseExistsException, self).__init__(msg) - - -class InvalidReasonException(AurwebException): - def __init__(self, reason): - msg = "invalid reason: {:s}".format(reason) - super(InvalidReasonException, self).__init__(msg) - - -class InvalidCommentException(AurwebException): - def __init__(self, comment): - msg = "comment is too short: {:s}".format(comment) - super(InvalidCommentException, self).__init__(msg) - - -class AlreadyVotedException(AurwebException): - def __init__(self, comment): - msg = "already voted for package base: {:s}".format(comment) - super(AlreadyVotedException, self).__init__(msg) - - -class NotVotedException(AurwebException): - def __init__(self, comment): - msg = "missing vote for package base: {:s}".format(comment) - super(NotVotedException, self).__init__(msg) - - -class InvalidArgumentsException(AurwebException): - def __init__(self, msg): - super(InvalidArgumentsException, self).__init__(msg) - - -class RPCError(AurwebException): - pass - - -class ValidationError(AurwebException): - def __init__(self, data: Any, *args, **kwargs): - super().__init__(*args, **kwargs) - self.data = data - - -class InvariantError(AurwebException): - pass - - -def handle_form_exceptions(route: Callable) -> fastapi.Response: - """ - A decorator required when fastapi POST routes are defined. - - This decorator populates fastapi's `request.state` with a `form_data` - attribute, which is then used to report form data when exceptions - are caught and reported. - """ - - @functools.wraps(route) - async def wrapper(request: fastapi.Request, *args, **kwargs): - request.state.form_data = await request.form() - return await route(request, *args, **kwargs) - - return wrapper diff --git a/aurweb/filters.py b/aurweb/filters.py deleted file mode 100644 index f39bd560..00000000 --- a/aurweb/filters.py +++ /dev/null @@ -1,181 +0,0 @@ -import copy -import math -from datetime import UTC, datetime -from typing import Any, Union -from urllib.parse import quote_plus, urlencode -from zoneinfo import ZoneInfo - -import fastapi -import paginate -from jinja2 import pass_context -from jinja2.filters import do_format - -import aurweb.models -from aurweb import config, l10n -from aurweb.templates import register_filter, register_function - - -@register_filter("pager_nav") -@pass_context -def pager_nav(context: dict[str, Any], page: int, total: int, prefix: str) -> str: - page = int(page) # Make sure this is an int. - - pp = context.get("PP", 50) - - # Setup a local query string dict, optionally passed by caller. - q = context.get("q", dict()) - - search_by = context.get("SeB", None) - if search_by: - q["SeB"] = search_by - - sort_by = context.get("SB", None) - if sort_by: - q["SB"] = sort_by - - def create_url(page: int): - nonlocal q - offset = max(page * pp - pp, 0) - qs = to_qs(extend_query(q, ["O", offset])) - return f"{prefix}?{qs}" - - # Use the paginate module to produce our linkage. - pager = paginate.Page( - [], page=page + 1, items_per_page=pp, item_count=total, url_maker=create_url - ) - - return pager.pager( - link_attr={"class": "page"}, - curpage_attr={"class": "page"}, - separator=" ", - format="$link_first $link_previous ~5~ $link_next $link_last", - symbol_first="« First", - symbol_previous="‹ Previous", - symbol_next="Next ›", - symbol_last="Last »", - ) - - -@register_function("config_getint") -def config_getint(section: str, key: str) -> int: - return config.getint(section, key) - - -@register_function("round") -def do_round(f: float) -> int: - return round(f) - - -@register_filter("tr") -@pass_context -def tr(context: dict[str, Any], value: str): - """A translation filter; example: {{ "Hello" | tr("de") }}.""" - _ = l10n.get_translator_for_request(context.get("request")) - return _(value) - - -@register_filter("tn") -@pass_context -def tn(context: dict[str, Any], count: int, singular: str, plural: str) -> str: - """A singular and plural translation filter. - - Example: - {{ some_integer | tn("singular %d", "plural %d") }} - - :param context: Response context - :param count: The number used to decide singular or plural state - :param singular: The singular translation - :param plural: The plural translation - :return: Translated string - """ - gettext = l10n.get_raw_translator_for_request(context.get("request")) - return gettext.ngettext(singular, plural, count) - - -@register_filter("dt") -def timestamp_to_datetime(timestamp: int): - return datetime.fromtimestamp(timestamp, UTC) - - -@register_filter("as_timezone") -def as_timezone(dt: datetime, timezone: str): - return dt.astimezone(tz=ZoneInfo(timezone)) - - -@register_filter("extend_query") -def extend_query(query: dict[str, Any], *additions) -> dict[str, Any]: - """Add additional key value pairs to query.""" - q = copy.copy(query) - for k, v in list(additions): - q[k] = v - return q - - -@register_filter("urlencode") -def to_qs(query: dict[str, Any]) -> str: - return urlencode(query, doseq=True) - - -@register_filter("get_vote") -def get_vote(voteinfo, request: fastapi.Request): - from aurweb.models import Vote - - return voteinfo.votes.filter(Vote.User == request.user).first() - - -@register_filter("number_format") -def number_format(value: float, places: int): - """A converter function similar to PHP's number_format.""" - return f"{value:.{places}f}" - - -@register_filter("account_url") -@pass_context -def account_url(context: dict[str, Any], user: "aurweb.models.user.User") -> str: - base = aurweb.config.get("options", "aur_location") - return f"{base}/account/{user.Username}" - - -@register_filter("quote_plus") -def _quote_plus(*args, **kwargs) -> str: - return quote_plus(*args, **kwargs) - - -@register_filter("ceil") -def ceil(*args, **kwargs) -> int: - return math.ceil(*args, **kwargs) - - -@register_function("date_strftime") -@pass_context -def date_strftime(context: dict[str, Any], dt: Union[int, datetime], fmt: str) -> str: - if isinstance(dt, int): - dt = timestamp_to_datetime(dt) - tz = context.get("timezone") - return as_timezone(dt, tz).strftime(fmt) - - -@register_function("date_display") -@pass_context -def date_display(context: dict[str, Any], dt: Union[int, datetime]) -> str: - return date_strftime(context, dt, "%Y-%m-%d (%Z)") - - -@register_function("datetime_display") -@pass_context -def datetime_display(context: dict[str, Any], dt: Union[int, datetime]) -> str: - return date_strftime(context, dt, "%Y-%m-%d %H:%M (%Z)") - - -@register_filter("format") -def safe_format(value: str, *args: Any, **kwargs: Any) -> str: - """Wrapper for jinja2 format function to perform additional checks.""" - - # If we don't have anything to be formatted, just return the value. - # We have some translations that do not contain placeholders for replacement. - # In these cases the jinja2 function is throwing an error: - # "TypeError: not all arguments converted during string formatting" - if "%" not in value: - return value - - return do_format(value, *args, **kwargs) diff --git a/aurweb/git/__init__.py b/aurweb/git/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aurweb/git/auth.py b/aurweb/git/auth.py deleted file mode 100755 index 759fce89..00000000 --- a/aurweb/git/auth.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python3 - -import re -import shlex -import sys - -import aurweb.config -import aurweb.db - - -def format_command(env_vars, command, ssh_opts, ssh_key): - environment = "" - for key, var in env_vars.items(): - environment += "{}={} ".format(key, shlex.quote(var)) - - command = shlex.quote(command) - command = "{}{}".format(environment, command) - - # The command is being substituted into an authorized_keys line below, - # so we need to escape the double quotes. - command = command.replace('"', '\\"') - msg = 'command="{}",{} {}'.format(command, ssh_opts, ssh_key) - return msg - - -def main(): - valid_keytypes = aurweb.config.get("auth", "valid-keytypes").split() - username_regex = aurweb.config.get("auth", "username-regex") - git_serve_cmd = aurweb.config.get("auth", "git-serve-cmd") - ssh_opts = aurweb.config.get("auth", "ssh-options") - - keytype = sys.argv[1] - keytext = sys.argv[2] - if keytype not in valid_keytypes: - exit(1) - - conn = aurweb.db.Connection() - - cur = conn.execute( - "SELECT Users.Username, Users.AccountTypeID FROM Users " - "INNER JOIN SSHPubKeys ON SSHPubKeys.UserID = Users.ID " - "WHERE SSHPubKeys.PubKey = ? AND Users.Suspended = 0 " - "AND NOT Users.Passwd = ''", - (keytype + " " + keytext,), - ) - - row = cur.fetchone() - if not row or cur.fetchone(): - exit(1) - - user, account_type = row - if not re.match(username_regex, user): - exit(1) - - env_vars = { - "AUR_USER": user, - "AUR_PRIVILEGED": "1" if account_type > 1 else "0", - } - key = keytype + " " + keytext - - print(format_command(env_vars, git_serve_cmd, ssh_opts, key)) - - -if __name__ == "__main__": - main() diff --git a/aurweb/git/serve.py b/aurweb/git/serve.py deleted file mode 100755 index 5888c6b4..00000000 --- a/aurweb/git/serve.py +++ /dev/null @@ -1,655 +0,0 @@ -#!/usr/bin/env python3 - -import os -import re -import shlex -import subprocess -import sys -import time - -import aurweb.config -import aurweb.db -import aurweb.exceptions - -notify_cmd = aurweb.config.get("notifications", "notify-cmd") - -repo_path = aurweb.config.get("serve", "repo-path") -repo_regex = aurweb.config.get("serve", "repo-regex") -git_shell_cmd = aurweb.config.get("serve", "git-shell-cmd") -git_update_cmd = aurweb.config.get("serve", "git-update-cmd") -ssh_cmdline = aurweb.config.get("serve", "ssh-cmdline") - -enable_maintenance = aurweb.config.getboolean("options", "enable-maintenance") -maintenance_exc = aurweb.config.get("options", "maintenance-exceptions").split() - - -def pkgbase_from_name(pkgbase): - conn = aurweb.db.Connection() - cur = conn.execute("SELECT ID FROM PackageBases WHERE Name = ?", [pkgbase]) - - row = cur.fetchone() - return row[0] if row else None - - -def pkgbase_exists(pkgbase): - return pkgbase_from_name(pkgbase) is not None - - -def list_repos(user): - conn = aurweb.db.Connection() - - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - userid = cur.fetchone()[0] - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - - cur = conn.execute( - "SELECT Name, PackagerUID FROM PackageBases " + "WHERE MaintainerUID = ?", - [userid], - ) - for row in cur: - print((" " if row[1] else "*") + row[0]) - conn.close() - - -def validate_pkgbase(pkgbase, user): - if not re.match(repo_regex, pkgbase): - raise aurweb.exceptions.InvalidRepositoryNameException(pkgbase) - if pkgbase_exists(pkgbase): - raise aurweb.exceptions.PackageBaseExistsException(pkgbase) - - conn = aurweb.db.Connection() - - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - userid = cur.fetchone()[0] - - conn.close() - - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - - -def pkgbase_adopt(pkgbase, user, privileged): - pkgbase_id = pkgbase_from_name(pkgbase) - if not pkgbase_id: - raise aurweb.exceptions.InvalidPackageBaseException(pkgbase) - - conn = aurweb.db.Connection() - - cur = conn.execute( - "SELECT ID FROM PackageBases WHERE ID = ? AND " + "MaintainerUID IS NULL", - [pkgbase_id], - ) - if not privileged and not cur.fetchone(): - raise aurweb.exceptions.PermissionDeniedException(user) - - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - userid = cur.fetchone()[0] - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - - cur = conn.execute( - "UPDATE PackageBases SET MaintainerUID = ? " + "WHERE ID = ?", - [userid, pkgbase_id], - ) - - cur = conn.execute( - "SELECT COUNT(*) FROM PackageNotifications WHERE " - + "PackageBaseID = ? AND UserID = ?", - [pkgbase_id, userid], - ) - if cur.fetchone()[0] == 0: - cur = conn.execute( - "INSERT INTO PackageNotifications " - + "(PackageBaseID, UserID) VALUES (?, ?)", - [pkgbase_id, userid], - ) - conn.commit() - - subprocess.Popen((notify_cmd, "adopt", str(userid), str(pkgbase_id))) - - conn.close() - - -def pkgbase_get_comaintainers(pkgbase): - conn = aurweb.db.Connection() - - cur = conn.execute( - "SELECT UserName FROM PackageComaintainers " - + "INNER JOIN Users " - + "ON Users.ID = PackageComaintainers.UsersID " - + "INNER JOIN PackageBases " - + "ON PackageBases.ID = PackageComaintainers.PackageBaseID " - + "WHERE PackageBases.Name = ? " - + "ORDER BY Priority ASC", - [pkgbase], - ) - - return [row[0] for row in cur.fetchall()] - - -def pkgbase_set_comaintainers(pkgbase, userlist, user, privileged): - pkgbase_id = pkgbase_from_name(pkgbase) - if not pkgbase_id: - raise aurweb.exceptions.InvalidPackageBaseException(pkgbase) - - if not privileged and not pkgbase_has_full_access(pkgbase, user): - raise aurweb.exceptions.PermissionDeniedException(user) - - conn = aurweb.db.Connection() - - userlist_old = set(pkgbase_get_comaintainers(pkgbase)) - - uids_old = set() - for olduser in userlist_old: - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [olduser]) - userid = cur.fetchone()[0] - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - uids_old.add(userid) - - uids_new = set() - for newuser in userlist: - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [newuser]) - userid = cur.fetchone()[0] - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - uids_new.add(userid) - - uids_add = uids_new - uids_old - uids_rem = uids_old - uids_new - - i = 1 - for userid in uids_new: - if userid in uids_add: - cur = conn.execute( - "INSERT INTO PackageComaintainers " - + "(PackageBaseID, UsersID, Priority) " - + "VALUES (?, ?, ?)", - [pkgbase_id, userid, i], - ) - subprocess.Popen( - (notify_cmd, "comaintainer-add", str(userid), str(pkgbase_id)) - ) - else: - cur = conn.execute( - "UPDATE PackageComaintainers " - + "SET Priority = ? " - + "WHERE PackageBaseID = ? AND UsersID = ?", - [i, pkgbase_id, userid], - ) - i += 1 - - for userid in uids_rem: - cur = conn.execute( - "DELETE FROM PackageComaintainers " - + "WHERE PackageBaseID = ? AND UsersID = ?", - [pkgbase_id, userid], - ) - subprocess.Popen( - (notify_cmd, "comaintainer-remove", str(userid), str(pkgbase_id)) - ) - - conn.commit() - conn.close() - - -def pkgreq_by_pkgbase(pkgbase_id, reqtype): - conn = aurweb.db.Connection() - - cur = conn.execute( - "SELECT PackageRequests.ID FROM PackageRequests " - + "INNER JOIN RequestTypes ON " - + "RequestTypes.ID = PackageRequests.ReqTypeID " - + "WHERE PackageRequests.Status = 0 " - + "AND PackageRequests.PackageBaseID = ? " - + "AND RequestTypes.Name = ?", - [pkgbase_id, reqtype], - ) - - return [row[0] for row in cur.fetchall()] - - -def pkgreq_close(reqid, user, reason, comments, autoclose=False): - statusmap = {"accepted": 2, "rejected": 3} - if reason not in statusmap: - raise aurweb.exceptions.InvalidReasonException(reason) - status = statusmap[reason] - - conn = aurweb.db.Connection() - - if autoclose: - userid = None - else: - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - userid = cur.fetchone()[0] - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - - now = int(time.time()) - conn.execute( - "UPDATE PackageRequests SET Status = ?, ClosedTS = ?, " - + "ClosedUID = ?, ClosureComment = ? " - + "WHERE ID = ?", - [status, now, userid, comments, reqid], - ) - conn.commit() - conn.close() - - if not userid: - userid = 0 - subprocess.Popen( - (notify_cmd, "request-close", str(userid), str(reqid), reason) - ).wait() - - -def pkgbase_disown(pkgbase, user, privileged): - pkgbase_id = pkgbase_from_name(pkgbase) - if not pkgbase_id: - raise aurweb.exceptions.InvalidPackageBaseException(pkgbase) - - initialized_by_owner = pkgbase_has_full_access(pkgbase, user) - if not privileged and not initialized_by_owner: - raise aurweb.exceptions.PermissionDeniedException(user) - - # TODO: Support disowning package bases via package request. - - # Scan through pending orphan requests and close them. - comment = "The user {:s} disowned the package.".format(user) - for reqid in pkgreq_by_pkgbase(pkgbase_id, "orphan"): - pkgreq_close(reqid, user, "accepted", comment, True) - - comaintainers = [] - new_maintainer_userid = None - - conn = aurweb.db.Connection() - - # Make the first co-maintainer the new maintainer, unless the action was - # enforced by a Package Maintainer. - if initialized_by_owner: - comaintainers = pkgbase_get_comaintainers(pkgbase) - if len(comaintainers) > 0: - new_maintainer = comaintainers[0] - cur = conn.execute( - "SELECT ID FROM Users WHERE Username = ?", [new_maintainer] - ) - new_maintainer_userid = cur.fetchone()[0] - comaintainers.remove(new_maintainer) - - pkgbase_set_comaintainers(pkgbase, comaintainers, user, privileged) - cur = conn.execute( - "UPDATE PackageBases SET MaintainerUID = ? " + "WHERE ID = ?", - [new_maintainer_userid, pkgbase_id], - ) - - conn.commit() - - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - userid = cur.fetchone()[0] - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - - subprocess.Popen((notify_cmd, "disown", str(userid), str(pkgbase_id))) - - conn.close() - - -def pkgbase_flag(pkgbase, user, comment): - pkgbase_id = pkgbase_from_name(pkgbase) - if not pkgbase_id: - raise aurweb.exceptions.InvalidPackageBaseException(pkgbase) - if len(comment) < 3: - raise aurweb.exceptions.InvalidCommentException(comment) - - conn = aurweb.db.Connection() - - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - userid = cur.fetchone()[0] - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - - now = int(time.time()) - conn.execute( - "UPDATE PackageBases SET " - + "OutOfDateTS = ?, FlaggerUID = ?, FlaggerComment = ? " - + "WHERE ID = ? AND OutOfDateTS IS NULL", - [now, userid, comment, pkgbase_id], - ) - - conn.commit() - - subprocess.Popen((notify_cmd, "flag", str(userid), str(pkgbase_id))) - - -def pkgbase_unflag(pkgbase, user): - pkgbase_id = pkgbase_from_name(pkgbase) - if not pkgbase_id: - raise aurweb.exceptions.InvalidPackageBaseException(pkgbase) - - conn = aurweb.db.Connection() - - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - userid = cur.fetchone()[0] - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - - if user in pkgbase_get_comaintainers(pkgbase): - conn.execute( - "UPDATE PackageBases SET OutOfDateTS = NULL " + "WHERE ID = ?", [pkgbase_id] - ) - else: - conn.execute( - "UPDATE PackageBases SET OutOfDateTS = NULL " - + "WHERE ID = ? AND (MaintainerUID = ? OR FlaggerUID = ?)", - [pkgbase_id, userid, userid], - ) - - conn.commit() - - -def pkgbase_vote(pkgbase, user): - pkgbase_id = pkgbase_from_name(pkgbase) - if not pkgbase_id: - raise aurweb.exceptions.InvalidPackageBaseException(pkgbase) - - conn = aurweb.db.Connection() - - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - userid = cur.fetchone()[0] - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - - cur = conn.execute( - "SELECT COUNT(*) FROM PackageVotes " - + "WHERE UsersID = ? AND PackageBaseID = ?", - [userid, pkgbase_id], - ) - if cur.fetchone()[0] > 0: - raise aurweb.exceptions.AlreadyVotedException(pkgbase) - - now = int(time.time()) - conn.execute( - "INSERT INTO PackageVotes (UsersID, PackageBaseID, VoteTS) " - + "VALUES (?, ?, ?)", - [userid, pkgbase_id, now], - ) - conn.execute( - "UPDATE PackageBases SET NumVotes = NumVotes + 1 " + "WHERE ID = ?", - [pkgbase_id], - ) - conn.commit() - - -def pkgbase_unvote(pkgbase, user): - pkgbase_id = pkgbase_from_name(pkgbase) - if not pkgbase_id: - raise aurweb.exceptions.InvalidPackageBaseException(pkgbase) - - conn = aurweb.db.Connection() - - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - userid = cur.fetchone()[0] - if userid == 0: - raise aurweb.exceptions.InvalidUserException(user) - - cur = conn.execute( - "SELECT COUNT(*) FROM PackageVotes " - + "WHERE UsersID = ? AND PackageBaseID = ?", - [userid, pkgbase_id], - ) - if cur.fetchone()[0] == 0: - raise aurweb.exceptions.NotVotedException(pkgbase) - - conn.execute( - "DELETE FROM PackageVotes WHERE UsersID = ? AND " + "PackageBaseID = ?", - [userid, pkgbase_id], - ) - conn.execute( - "UPDATE PackageBases SET NumVotes = NumVotes - 1 " + "WHERE ID = ?", - [pkgbase_id], - ) - conn.commit() - - -def pkgbase_set_keywords(pkgbase, keywords): - pkgbase_id = pkgbase_from_name(pkgbase) - if not pkgbase_id: - raise aurweb.exceptions.InvalidPackageBaseException(pkgbase) - - conn = aurweb.db.Connection() - - conn.execute("DELETE FROM PackageKeywords WHERE PackageBaseID = ?", [pkgbase_id]) - for keyword in keywords: - conn.execute( - "INSERT INTO PackageKeywords (PackageBaseID, Keyword) " + "VALUES (?, ?)", - [pkgbase_id, keyword], - ) - - conn.commit() - conn.close() - - -def pkgbase_has_write_access(pkgbase, user): - conn = aurweb.db.Connection() - - cur = conn.execute( - "SELECT COUNT(*) FROM PackageBases " - + "LEFT JOIN PackageComaintainers " - + "ON PackageComaintainers.PackageBaseID = PackageBases.ID " - + "INNER JOIN Users " - + "ON Users.ID = PackageBases.MaintainerUID " - + "OR PackageBases.MaintainerUID IS NULL " - + "OR Users.ID = PackageComaintainers.UsersID " - + "WHERE Name = ? AND Username = ?", - [pkgbase, user], - ) - return cur.fetchone()[0] > 0 - - -def pkgbase_has_full_access(pkgbase, user): - conn = aurweb.db.Connection() - - cur = conn.execute( - "SELECT COUNT(*) FROM PackageBases " - + "INNER JOIN Users " - + "ON Users.ID = PackageBases.MaintainerUID " - + "WHERE Name = ? AND Username = ?", - [pkgbase, user], - ) - return cur.fetchone()[0] > 0 - - -def log_ssh_login(user, remote_addr): - conn = aurweb.db.Connection() - - now = int(time.time()) - conn.execute( - "UPDATE Users SET LastSSHLogin = ?, " - + "LastSSHLoginIPAddress = ? WHERE Username = ?", - [now, remote_addr, user], - ) - - conn.commit() - conn.close() - - -def bans_match(remote_addr): - conn = aurweb.db.Connection() - - cur = conn.execute("SELECT COUNT(*) FROM Bans WHERE IPAddress = ?", [remote_addr]) - return cur.fetchone()[0] > 0 - - -def die(msg): - sys.stderr.write("{:s}\n".format(msg)) - exit(1) - - -def die_with_help(msg): - die(msg + "\nTry `{:s} help` for a list of commands.".format(ssh_cmdline)) - - -def warn(msg): - sys.stderr.write("warning: {:s}\n".format(msg)) - - -def usage(cmds): - sys.stderr.write("Commands:\n") - colwidth = max([len(cmd) for cmd in cmds.keys()]) + 4 - for key in sorted(cmds): - sys.stderr.write(" " + key.ljust(colwidth) + cmds[key] + "\n") - exit(0) - - -def checkarg_atleast(cmdargv, *argdesc): - if len(cmdargv) - 1 < len(argdesc): - msg = "missing {:s}".format(argdesc[len(cmdargv) - 1]) - raise aurweb.exceptions.InvalidArgumentsException(msg) - - -def checkarg_atmost(cmdargv, *argdesc): - if len(cmdargv) - 1 > len(argdesc): - raise aurweb.exceptions.InvalidArgumentsException("too many arguments") - - -def checkarg(cmdargv, *argdesc): - checkarg_atleast(cmdargv, *argdesc) - checkarg_atmost(cmdargv, *argdesc) - - -def serve(action, cmdargv, user, privileged, remote_addr): # noqa: C901 - if enable_maintenance: - if remote_addr not in maintenance_exc: - raise aurweb.exceptions.MaintenanceException - if bans_match(remote_addr): - raise aurweb.exceptions.BannedException - log_ssh_login(user, remote_addr) - - if action == "git" and cmdargv[1] in ("upload-pack", "receive-pack"): - action = action + "-" + cmdargv[1] - del cmdargv[1] - - if action == "git-upload-pack" or action == "git-receive-pack": - checkarg(cmdargv, "path") - - path = cmdargv[1].rstrip("/") - if not path.startswith("/"): - path = "/" + path - if not path.endswith(".git"): - path = path + ".git" - pkgbase = path[1:-4] - if not re.match(repo_regex, pkgbase): - raise aurweb.exceptions.InvalidRepositoryNameException(pkgbase) - - if action == "git-receive-pack" and pkgbase_exists(pkgbase): - if not privileged and not pkgbase_has_write_access(pkgbase, user): - raise aurweb.exceptions.PermissionDeniedException(user) - - if not os.access(git_update_cmd, os.R_OK | os.X_OK): - raise aurweb.exceptions.BrokenUpdateHookException(git_update_cmd) - - os.environ["AUR_USER"] = user - os.environ["AUR_PKGBASE"] = pkgbase - os.environ["GIT_NAMESPACE"] = pkgbase - cmd = action + " '" + repo_path + "'" - os.execl(git_shell_cmd, git_shell_cmd, "-c", cmd) - elif action == "set-keywords": - checkarg_atleast(cmdargv, "repository name") - pkgbase_set_keywords(cmdargv[1], cmdargv[2:]) - elif action == "list-repos": - checkarg(cmdargv) - list_repos(user) - elif action == "restore": - checkarg(cmdargv, "repository name") - - pkgbase = cmdargv[1] - validate_pkgbase(pkgbase, user) - - os.environ["AUR_USER"] = user - os.environ["AUR_PKGBASE"] = pkgbase - os.execl(git_update_cmd, git_update_cmd, "restore") - elif action == "adopt": - checkarg(cmdargv, "repository name") - - pkgbase = cmdargv[1] - pkgbase_adopt(pkgbase, user, privileged) - elif action == "disown": - checkarg(cmdargv, "repository name") - - pkgbase = cmdargv[1] - pkgbase_disown(pkgbase, user, privileged) - elif action == "flag": - checkarg(cmdargv, "repository name", "comment") - - pkgbase = cmdargv[1] - comment = cmdargv[2] - pkgbase_flag(pkgbase, user, comment) - elif action == "unflag": - checkarg(cmdargv, "repository name") - - pkgbase = cmdargv[1] - pkgbase_unflag(pkgbase, user) - elif action == "vote": - checkarg(cmdargv, "repository name") - - pkgbase = cmdargv[1] - pkgbase_vote(pkgbase, user) - elif action == "unvote": - checkarg(cmdargv, "repository name") - - pkgbase = cmdargv[1] - pkgbase_unvote(pkgbase, user) - elif action == "set-comaintainers": - checkarg_atleast(cmdargv, "repository name") - - pkgbase = cmdargv[1] - userlist = cmdargv[2:] - pkgbase_set_comaintainers(pkgbase, userlist, user, privileged) - elif action == "help": - cmds = { - "adopt ": "Adopt a package base.", - "disown ": "Disown a package base.", - "flag ": "Flag a package base out-of-date.", - "help": "Show this help message and exit.", - "list-repos": "List all your repositories.", - "restore ": "Restore a deleted package base.", - "set-comaintainers [...]": "Set package base co-maintainers.", - "set-keywords [...]": "Change package base keywords.", - "unflag ": "Remove out-of-date flag from a package base.", - "unvote ": "Remove vote from a package base.", - "vote ": "Vote for a package base.", - "git-receive-pack": "Internal command used with Git.", - "git-upload-pack": "Internal command used with Git.", - } - usage(cmds) - else: - msg = "invalid command: {:s}".format(action) - raise aurweb.exceptions.InvalidArgumentsException(msg) - - -def main(): - user = os.environ.get("AUR_USER") - privileged = os.environ.get("AUR_PRIVILEGED", "0") == "1" - ssh_cmd = os.environ.get("SSH_ORIGINAL_COMMAND") - ssh_client = os.environ.get("SSH_CLIENT") - - if not ssh_cmd: - die_with_help(f"Welcome to AUR, {user}! Interactive shell is disabled.") - cmdargv = shlex.split(ssh_cmd) - action = cmdargv[0] - remote_addr = ssh_client.split(" ")[0] if ssh_client else None - - try: - serve(action, cmdargv, user, privileged, remote_addr) - except aurweb.exceptions.MaintenanceException: - die("The AUR is down due to maintenance. We will be back soon.") - except aurweb.exceptions.BannedException: - die("The SSH interface is disabled for your IP address.") - except aurweb.exceptions.InvalidArgumentsException as e: - die_with_help("{:s}: {}".format(action, e)) - except aurweb.exceptions.AurwebException as e: - die("{:s}: {}".format(action, e)) - - -if __name__ == "__main__": - main() diff --git a/aurweb/git/update.py b/aurweb/git/update.py deleted file mode 100755 index 1118340d..00000000 --- a/aurweb/git/update.py +++ /dev/null @@ -1,498 +0,0 @@ -#!/usr/bin/env python3 - -import os -import re -import subprocess -import sys -import time - -import pygit2 -import srcinfo.parse -import srcinfo.utils - -import aurweb.config -import aurweb.db - -notify_cmd = aurweb.config.get("notifications", "notify-cmd") - -repo_path = aurweb.config.get("serve", "repo-path") -repo_regex = aurweb.config.get("serve", "repo-regex") - -max_blob_size = aurweb.config.getint("update", "max-blob-size") - - -def size_humanize(num): - for unit in ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB"]: - if abs(num) < 2048.0: - if isinstance(num, int): - return "{}{}".format(num, unit) - else: - return "{:.2f}{}".format(num, unit) - num /= 1024.0 - return "{:.2f}{}".format(num, "YiB") - - -def extract_arch_fields(pkginfo, field): - values = [] - - if field in pkginfo: - for val in pkginfo[field]: - values.append({"value": val, "arch": None}) - - for arch in pkginfo["arch"]: - if field + "_" + arch in pkginfo: - for val in pkginfo[field + "_" + arch]: - values.append({"value": val, "arch": arch}) - - return values - - -def parse_dep(depstring): - dep, _, desc = depstring.partition(": ") - depname = re.sub(r"(<|=|>).*", "", dep) - depcond = dep[len(depname) :] - - return depname, desc, depcond - - -def create_pkgbase(conn, pkgbase, user): - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - userid = cur.fetchone()[0] - - now = int(time.time()) - cur = conn.execute( - "INSERT INTO PackageBases (Name, SubmittedTS, " - + "ModifiedTS, SubmitterUID, MaintainerUID, " - + "FlaggerComment) VALUES (?, ?, ?, ?, ?, '')", - [pkgbase, now, now, userid, userid], - ) - pkgbase_id = cur.lastrowid - - cur = conn.execute( - "INSERT INTO PackageNotifications " + "(PackageBaseID, UserID) VALUES (?, ?)", - [pkgbase_id, userid], - ) - - conn.commit() - - return pkgbase_id - - -def save_metadata(metadata, conn, user): # noqa: C901 - # Obtain package base ID and previous maintainer. - pkgbase = metadata["pkgbase"] - cur = conn.execute( - "SELECT ID, MaintainerUID FROM PackageBases " "WHERE Name = ?", [pkgbase] - ) - (pkgbase_id, maintainer_uid) = cur.fetchone() - was_orphan = not maintainer_uid - - # Obtain the user ID of the new maintainer. - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - user_id = int(cur.fetchone()[0]) - - # Update package base details and delete current packages. - now = int(time.time()) - conn.execute( - "UPDATE PackageBases SET ModifiedTS = ?, " - + "PackagerUID = ?, OutOfDateTS = NULL WHERE ID = ?", - [now, user_id, pkgbase_id], - ) - conn.execute( - "UPDATE PackageBases SET MaintainerUID = ? " - + "WHERE ID = ? AND MaintainerUID IS NULL", - [user_id, pkgbase_id], - ) - for table in ("Sources", "Depends", "Relations", "Licenses", "Groups"): - conn.execute( - "DELETE FROM Package" - + table - + " WHERE EXISTS (" - + "SELECT * FROM Packages " - + "WHERE Packages.PackageBaseID = ? AND " - + "Package" - + table - + ".PackageID = Packages.ID)", - [pkgbase_id], - ) - conn.execute("DELETE FROM Packages WHERE PackageBaseID = ?", [pkgbase_id]) - - for pkgname in srcinfo.utils.get_package_names(metadata): - pkginfo = srcinfo.utils.get_merged_package(pkgname, metadata) - - if "epoch" in pkginfo and int(pkginfo["epoch"]) > 0: - ver = "{:d}:{:s}-{:s}".format( - int(pkginfo["epoch"]), pkginfo["pkgver"], pkginfo["pkgrel"] - ) - else: - ver = "{:s}-{:s}".format(pkginfo["pkgver"], pkginfo["pkgrel"]) - - for field in ("pkgdesc", "url"): - if field not in pkginfo: - pkginfo[field] = None - - # Create a new package. - cur = conn.execute( - "INSERT INTO Packages (PackageBaseID, Name, " - + "Version, Description, URL) " - + "VALUES (?, ?, ?, ?, ?)", - [pkgbase_id, pkginfo["pkgname"], ver, pkginfo["pkgdesc"], pkginfo["url"]], - ) - conn.commit() - pkgid = cur.lastrowid - - # Add package sources. - for source_info in extract_arch_fields(pkginfo, "source"): - conn.execute( - "INSERT INTO PackageSources (PackageID, Source, " - + "SourceArch) VALUES (?, ?, ?)", - [pkgid, source_info["value"], source_info["arch"]], - ) - - # Add package dependencies. - for deptype in ("depends", "makedepends", "checkdepends", "optdepends"): - cur = conn.execute( - "SELECT ID FROM DependencyTypes WHERE Name = ?", [deptype] - ) - deptypeid = cur.fetchone()[0] - for dep_info in extract_arch_fields(pkginfo, deptype): - depname, depdesc, depcond = parse_dep(dep_info["value"]) - deparch = dep_info["arch"] - conn.execute( - "INSERT INTO PackageDepends (PackageID, " - + "DepTypeID, DepName, DepDesc, DepCondition, " - + "DepArch) VALUES (?, ?, ?, ?, ?, ?)", - [pkgid, deptypeid, depname, depdesc, depcond, deparch], - ) - - # Add package relations (conflicts, provides, replaces). - for reltype in ("conflicts", "provides", "replaces"): - cur = conn.execute("SELECT ID FROM RelationTypes WHERE Name = ?", [reltype]) - reltypeid = cur.fetchone()[0] - for rel_info in extract_arch_fields(pkginfo, reltype): - relname, _, relcond = parse_dep(rel_info["value"]) - relarch = rel_info["arch"] - conn.execute( - "INSERT INTO PackageRelations (PackageID, " - + "RelTypeID, RelName, RelCondition, RelArch) " - + "VALUES (?, ?, ?, ?, ?)", - [pkgid, reltypeid, relname, relcond, relarch], - ) - - # Add package licenses. - if "license" in pkginfo: - for license in pkginfo["license"]: - cur = conn.execute("SELECT ID FROM Licenses WHERE Name = ?", [license]) - row = cur.fetchone() - if row: - licenseid = row[0] - else: - cur = conn.execute( - "INSERT INTO Licenses (Name) " + "VALUES (?)", [license] - ) - conn.commit() - licenseid = cur.lastrowid - conn.execute( - "INSERT INTO PackageLicenses (PackageID, " - + "LicenseID) VALUES (?, ?)", - [pkgid, licenseid], - ) - - # Add package groups. - if "groups" in pkginfo: - for group in pkginfo["groups"]: - cur = conn.execute("SELECT ID FROM `Groups` WHERE Name = ?", [group]) - row = cur.fetchone() - if row: - groupid = row[0] - else: - cur = conn.execute( - "INSERT INTO `Groups` (Name) VALUES (?)", [group] - ) - conn.commit() - groupid = cur.lastrowid - conn.execute( - "INSERT INTO PackageGroups (PackageID, " "GroupID) VALUES (?, ?)", - [pkgid, groupid], - ) - - # Add user to notification list on adoption. - if was_orphan: - cur = conn.execute( - "SELECT COUNT(*) FROM PackageNotifications WHERE " - + "PackageBaseID = ? AND UserID = ?", - [pkgbase_id, user_id], - ) - if cur.fetchone()[0] == 0: - conn.execute( - "INSERT INTO PackageNotifications " - + "(PackageBaseID, UserID) VALUES (?, ?)", - [pkgbase_id, user_id], - ) - - conn.commit() - - -def update_notify(conn, user, pkgbase_id): - # Obtain the user ID of the new maintainer. - cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user]) - user_id = int(cur.fetchone()[0]) - - # Execute the notification script. - subprocess.Popen((notify_cmd, "update", str(user_id), str(pkgbase_id))) - - -def die(msg): - sys.stderr.write("error: {:s}\n".format(msg)) - exit(1) - - -def warn(msg): - sys.stderr.write("warning: {:s}\n".format(msg)) - - -def die_commit(msg, commit): - sys.stderr.write("error: The following error " + "occurred when parsing commit\n") - sys.stderr.write("error: {:s}:\n".format(commit)) - sys.stderr.write("error: {:s}\n".format(msg)) - exit(1) - - -def validate_metadata(metadata, commit): # noqa: C901 - try: - metadata_pkgbase = metadata["pkgbase"] - except KeyError: - die_commit( - "invalid .SRCINFO, does not contain a pkgbase (is the file empty?)", - str(commit.id), - ) - if not re.match(repo_regex, metadata_pkgbase): - die_commit("invalid pkgbase: {:s}".format(metadata_pkgbase), str(commit.id)) - - if not metadata["packages"]: - die_commit("missing pkgname entry", str(commit.id)) - - for pkgname in set(metadata["packages"].keys()): - pkginfo = srcinfo.utils.get_merged_package(pkgname, metadata) - - for field in ("pkgver", "pkgrel", "pkgname"): - if field not in pkginfo: - die_commit( - "missing mandatory field: {:s}".format(field), str(commit.id) - ) - - if "epoch" in pkginfo and not pkginfo["epoch"].isdigit(): - die_commit("invalid epoch: {:s}".format(pkginfo["epoch"]), str(commit.id)) - - if not re.match(r"[a-z0-9][a-z0-9\.+_-]*$", pkginfo["pkgname"]): - die_commit( - "invalid package name: {:s}".format(pkginfo["pkgname"]), - str(commit.id), - ) - - max_len = {"pkgname": 255, "pkgdesc": 255, "url": 8000} - for field in max_len.keys(): - if field in pkginfo and len(pkginfo[field]) > max_len[field]: - die_commit( - "{:s} field too long: {:s}".format(field, pkginfo[field]), - str(commit.id), - ) - - for field in ("install", "changelog"): - if field in pkginfo and not pkginfo[field] in commit.tree: - die_commit( - "missing {:s} file: {:s}".format(field, pkginfo[field]), - str(commit.id), - ) - - for field in extract_arch_fields(pkginfo, "source"): - fname = field["value"] - if len(fname) > 8000: - die_commit("source entry too long: {:s}".format(fname), str(commit.id)) - if "://" in fname or "lp:" in fname: - continue - if fname not in commit.tree: - die_commit("missing source file: {:s}".format(fname), str(commit.id)) - - -def validate_blob_size(blob: pygit2.Object, commit: pygit2.Commit): - if isinstance(blob, pygit2.Blob) and blob.size > max_blob_size: - die_commit( - "maximum blob size ({:s}) exceeded".format(size_humanize(max_blob_size)), - str(commit.id), - ) - - -def main(): # noqa: C901 - repo = pygit2.Repository(repo_path) - - user = os.environ.get("AUR_USER") - pkgbase = os.environ.get("AUR_PKGBASE") - privileged = os.environ.get("AUR_PRIVILEGED", "0") == "1" - allow_overwrite = (os.environ.get("AUR_OVERWRITE", "0") == "1") and privileged - warn_or_die = warn if privileged else die - - if len(sys.argv) == 2 and sys.argv[1] == "restore": - if "refs/heads/" + pkgbase not in repo.listall_references(): - die("{:s}: repository not found: {:s}".format(sys.argv[1], pkgbase)) - refname = "refs/heads/master" - branchref = "refs/heads/" + pkgbase - sha1_old = sha1_new = repo.lookup_reference(branchref).target - elif len(sys.argv) == 4: - refname, sha1_old, sha1_new = sys.argv[1:4] - else: - die("invalid arguments") - - if refname != "refs/heads/master": - die("pushing to a branch other than master is restricted") - - conn = aurweb.db.Connection() - - # Detect and deny non-fast-forwards. - if sha1_old != "0" * 40 and not allow_overwrite: - walker = repo.walk(sha1_old, pygit2.GIT_SORT_TOPOLOGICAL) - walker.hide(sha1_new) - if next(walker, None) is not None: - die("denying non-fast-forward (you should pull first)") - - # Prepare the walker that validates new commits. - walker = repo.walk(sha1_new, pygit2.GIT_SORT_REVERSE) - if sha1_old != "0" * 40: - walker.hide(sha1_old) - - head_commit = repo[sha1_new] - if ".SRCINFO" not in head_commit.tree: - die_commit("missing .SRCINFO", str(head_commit.id)) - - # Read .SRCINFO from the HEAD commit. - metadata_raw = repo[head_commit.tree[".SRCINFO"].id].data.decode() - (metadata, errors) = srcinfo.parse.parse_srcinfo(metadata_raw) - if errors: - sys.stderr.write( - "error: The following errors occurred " "when parsing .SRCINFO in commit\n" - ) - sys.stderr.write("error: {:s}:\n".format(str(head_commit.id))) - for error in errors: - for err in error["error"]: - sys.stderr.write("error: line {:d}: {:s}\n".format(error["line"], err)) - exit(1) - - # check if there is a correct .SRCINFO file in the latest revision - validate_metadata(metadata, head_commit) - - # Validate all new commits. - for commit in walker: - if "PKGBUILD" not in commit.tree: - die_commit("missing PKGBUILD", str(commit.id)) - - # Iterate over files in root dir - for treeobj in commit.tree: - # Don't allow any subdirs besides "keys/" - if isinstance(treeobj, pygit2.Tree) and treeobj.name != "keys": - die_commit( - "the repository must not contain subdirectories", - str(commit.id), - ) - - # Check size of files in root dir - validate_blob_size(treeobj, commit) - - # If we got a subdir keys/, - # make sure it only contains a pgp/ subdir with key files - if "keys" in commit.tree: - # Check for forbidden files/dirs in keys/ - for keyobj in commit.tree["keys"]: - if not isinstance(keyobj, pygit2.Tree) or keyobj.name != "pgp": - die_commit( - "the keys/ subdir may only contain a pgp/ directory", - str(commit.id), - ) - # Check for forbidden files in keys/pgp/ - if "keys/pgp" in commit.tree: - for pgpobj in commit.tree["keys/pgp"]: - if not isinstance(pgpobj, pygit2.Blob) or not pgpobj.name.endswith( - ".asc" - ): - die_commit( - "the subdir may only contain .asc (PGP pub key) files", - str(commit.id), - ) - # Check file size for pgp key files - validate_blob_size(pgpobj, commit) - - # Display a warning if .SRCINFO is unchanged. - if sha1_old not in ("0000000000000000000000000000000000000000", sha1_new): - srcinfo_id_old = repo[sha1_old].tree[".SRCINFO"].id - srcinfo_id_new = repo[sha1_new].tree[".SRCINFO"].id - if srcinfo_id_old == srcinfo_id_new: - warn(".SRCINFO unchanged. " "The package database will not be updated!") - - # Ensure that the package base name matches the repository name. - metadata_pkgbase = metadata["pkgbase"] - if metadata_pkgbase != pkgbase: - die("invalid pkgbase: {:s}, expected {:s}".format(metadata_pkgbase, pkgbase)) - - # Ensure that packages are neither blacklisted nor overwritten. - pkgbase = metadata["pkgbase"] - cur = conn.execute("SELECT ID FROM PackageBases WHERE Name = ?", [pkgbase]) - row = cur.fetchone() - pkgbase_id = row[0] if row else 0 - - cur = conn.execute("SELECT Name FROM PackageBlacklist") - blacklist = [row[0] for row in cur.fetchall()] - if pkgbase in blacklist: - warn_or_die("pkgbase is blacklisted: {:s}".format(pkgbase)) - - cur = conn.execute("SELECT Name, Repo FROM OfficialProviders") - providers = dict(cur.fetchall()) - - for pkgname in srcinfo.utils.get_package_names(metadata): - pkginfo = srcinfo.utils.get_merged_package(pkgname, metadata) - pkgname = pkginfo["pkgname"] - - if pkgname in blacklist: - warn_or_die("package is blacklisted: {:s}".format(pkgname)) - if pkgname in providers: - warn_or_die( - "package already provided by [{:s}]: {:s}".format( - providers[pkgname], pkgname - ) - ) - - cur = conn.execute( - "SELECT COUNT(*) FROM Packages WHERE Name = ? " + "AND PackageBaseID <> ?", - [pkgname, pkgbase_id], - ) - if cur.fetchone()[0] > 0: - die("cannot overwrite package: {:s}".format(pkgname)) - - # Create a new package base if it does not exist yet. - if pkgbase_id == 0: - pkgbase_id = create_pkgbase(conn, pkgbase, user) - - # Store package base details in the database. - save_metadata(metadata, conn, user) - - # Create (or update) a branch with the name of the package base for better - # accessibility. - branchref = "refs/heads/" + pkgbase - repo.create_reference(branchref, sha1_new, True) - - # Work around a Git bug: The HEAD ref is not updated when using - # gitnamespaces. This can be removed once the bug fix is included in Git - # mainline. See - # http://git.661346.n2.nabble.com/PATCH-receive-pack-Create-a-HEAD-ref-for-ref-namespace-td7632149.html - # for details. - headref = "refs/namespaces/" + pkgbase + "/HEAD" - repo.create_reference(headref, sha1_new, True) - - # Send package update notifications. - update_notify(conn, user, pkgbase_id) - - # Close the database. - cur.close() - conn.close() - - -if __name__ == "__main__": - main() diff --git a/aurweb/initdb.py b/aurweb/initdb.py deleted file mode 100644 index 7181ea3e..00000000 --- a/aurweb/initdb.py +++ /dev/null @@ -1,83 +0,0 @@ -import argparse - -import alembic.command -import alembic.config - -import aurweb.aur_logging -import aurweb.db -import aurweb.schema - - -def feed_initial_data(conn): - conn.execute( - aurweb.schema.AccountTypes.insert(), - [ - {"ID": 1, "AccountType": "User"}, - {"ID": 2, "AccountType": "Package Maintainer"}, - {"ID": 3, "AccountType": "Developer"}, - {"ID": 4, "AccountType": "Package Maintainer & Developer"}, - ], - ) - conn.execute( - aurweb.schema.DependencyTypes.insert(), - [ - {"ID": 1, "Name": "depends"}, - {"ID": 2, "Name": "makedepends"}, - {"ID": 3, "Name": "checkdepends"}, - {"ID": 4, "Name": "optdepends"}, - ], - ) - conn.execute( - aurweb.schema.RelationTypes.insert(), - [ - {"ID": 1, "Name": "conflicts"}, - {"ID": 2, "Name": "provides"}, - {"ID": 3, "Name": "replaces"}, - ], - ) - conn.execute( - aurweb.schema.RequestTypes.insert(), - [ - {"ID": 1, "Name": "deletion"}, - {"ID": 2, "Name": "orphan"}, - {"ID": 3, "Name": "merge"}, - ], - ) - - -def run(args): - aurweb.config.rehash() - - # Ensure Alembic is fine before we do the real work, in order not to fail at - # the last step and leave the database in an inconsistent state. The - # configuration is loaded lazily, so we query it to force its loading. - if args.use_alembic: - alembic_config = alembic.config.Config("alembic.ini") - alembic_config.get_main_option("script_location") - alembic_config.attributes["configure_logger"] = False - - engine = aurweb.db.get_engine(echo=(args.verbose >= 1)) - aurweb.schema.metadata.create_all(engine) - conn = engine.connect() - feed_initial_data(conn) - conn.close() - - if args.use_alembic: - alembic.command.stamp(alembic_config, "head") - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - prog="python -m aurweb.initdb", description="Initialize the aurweb database." - ) - parser.add_argument( - "-v", "--verbose", action="count", default=0, help="increase verbosity" - ) - parser.add_argument( - "--no-alembic", - help="disable Alembic migrations support", - dest="use_alembic", - action="store_false", - ) - args = parser.parse_args() - run(args) diff --git a/aurweb/l10n.py b/aurweb/l10n.py deleted file mode 100644 index 1ce5e956..00000000 --- a/aurweb/l10n.py +++ /dev/null @@ -1,102 +0,0 @@ -import gettext -from collections import OrderedDict - -from fastapi import Request - -import aurweb.config - -SUPPORTED_LANGUAGES = OrderedDict( - { - "ar": "العربية", - "ast": "Asturianu", - "ca": "Català", - "cs": "Český", - "da": "Dansk", - "de": "Deutsch", - "el": "Ελληνικά", - "en": "English", - "es": "Español", - "es_419": "Español (Latinoamérica)", - "fi": "Suomi", - "fr": "Français", - "he": "עברית", - "hr": "Hrvatski", - "hu": "Magyar", - "it": "Italiano", - "ja": "日本語", - "nb": "Norsk", - "nl": "Nederlands", - "pl": "Polski", - "pt_BR": "Português (Brasil)", - "pt_PT": "Português (Portugal)", - "ro": "Română", - "ru": "Русский", - "sk": "Slovenčina", - "sr": "Srpski", - "tr": "Türkçe", - "uk": "Українська", - "zh_CN": "简体中文", - "zh_TW": "正體中文", - } -) - - -RIGHT_TO_LEFT_LANGUAGES = ("he", "ar") - - -class Translator: - def __init__(self): - self._localedir = aurweb.config.get("options", "localedir") - self._translator = {} - - def get_translator(self, lang: str): - if lang not in self._translator: - self._translator[lang] = gettext.translation( - "aurweb", self._localedir, languages=[lang], fallback=True - ) - return self._translator.get(lang) - - def translate(self, s: str, lang: str): - return self.get_translator(lang).gettext(s) - - -# Global translator object. -translator = Translator() - - -def get_request_language(request: Request) -> str: - """Get a request's language from either query param, user setting or - cookie. We use the configuration's [options] default_lang otherwise. - - @param request FastAPI request - """ - request_lang = request.query_params.get("language") - cookie_lang = request.cookies.get("AURLANG") - if request_lang and request_lang in SUPPORTED_LANGUAGES: - return request_lang - elif ( - request.user.is_authenticated() - and request.user.LangPreference in SUPPORTED_LANGUAGES - ): - return request.user.LangPreference - elif cookie_lang and cookie_lang in SUPPORTED_LANGUAGES: - return cookie_lang - return aurweb.config.get_with_fallback("options", "default_lang", "en") - - -def get_raw_translator_for_request(request: Request): - lang = get_request_language(request) - return translator.get_translator(lang) - - -def get_translator_for_request(request: Request): - """ - Determine the preferred language from a FastAPI request object and build a - translator function for it. - """ - lang = get_request_language(request) - - def translate(message): - return translator.translate(message, lang) - - return translate diff --git a/aurweb/models/__init__.py b/aurweb/models/__init__.py deleted file mode 100644 index 90f3c93f..00000000 --- a/aurweb/models/__init__.py +++ /dev/null @@ -1,32 +0,0 @@ -""" Collection of all aurweb SQLAlchemy declarative models. """ - -from .accepted_term import AcceptedTerm # noqa: F401 -from .account_type import AccountType # noqa: F401 -from .api_rate_limit import ApiRateLimit # noqa: F401 -from .ban import Ban # noqa: F401 -from .dependency_type import DependencyType # noqa: F401 -from .group import Group # noqa: F401 -from .license import License # noqa: F401 -from .official_provider import OfficialProvider # noqa: F401 -from .package import Package # noqa: F401 -from .package_base import PackageBase # noqa: F401 -from .package_blacklist import PackageBlacklist # noqa: F401 -from .package_comaintainer import PackageComaintainer # noqa: F401 -from .package_comment import PackageComment # noqa: F401 -from .package_dependency import PackageDependency # noqa: F401 -from .package_group import PackageGroup # noqa: F401 -from .package_keyword import PackageKeyword # noqa: F401 -from .package_license import PackageLicense # noqa: F401 -from .package_notification import PackageNotification # noqa: F401 -from .package_relation import PackageRelation # noqa: F401 -from .package_request import PackageRequest # noqa: F401 -from .package_source import PackageSource # noqa: F401 -from .package_vote import PackageVote # noqa: F401 -from .relation_type import RelationType # noqa: F401 -from .request_type import RequestType # noqa: F401 -from .session import Session # noqa: F401 -from .ssh_pub_key import SSHPubKey # noqa: F401 -from .term import Term # noqa: F401 -from .user import User # noqa: F401 -from .vote import Vote # noqa: F401 -from .voteinfo import VoteInfo # noqa: F401 diff --git a/aurweb/models/accepted_term.py b/aurweb/models/accepted_term.py deleted file mode 100644 index 022075e8..00000000 --- a/aurweb/models/accepted_term.py +++ /dev/null @@ -1,42 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.term import Term as _Term -from aurweb.models.user import User as _User - - -class AcceptedTerm(Base): - __table__ = schema.AcceptedTerms - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.TermsID]} - - User = relationship( - _User, - backref=backref("accepted_terms", lazy="dynamic"), - foreign_keys=[__table__.c.UsersID], - ) - - Term = relationship( - _Term, - backref=backref("accepted_terms", lazy="dynamic"), - foreign_keys=[__table__.c.TermsID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.User and not self.UsersID: - raise IntegrityError( - statement="Foreign key UsersID cannot be null.", - orig="AcceptedTerms.UserID", - params=("NULL"), - ) - - if not self.Term and not self.TermsID: - raise IntegrityError( - statement="Foreign key TermID cannot be null.", - orig="AcceptedTerms.TermID", - params=("NULL"), - ) diff --git a/aurweb/models/account_type.py b/aurweb/models/account_type.py deleted file mode 100644 index 70bfc2c5..00000000 --- a/aurweb/models/account_type.py +++ /dev/null @@ -1,40 +0,0 @@ -from aurweb import schema -from aurweb.models.declarative import Base - -USER = "User" -PACKAGE_MAINTAINER = "Package Maintainer" -DEVELOPER = "Developer" -PACKAGE_MAINTAINER_AND_DEV = "Package Maintainer & Developer" - -USER_ID = 1 -PACKAGE_MAINTAINER_ID = 2 -DEVELOPER_ID = 3 -PACKAGE_MAINTAINER_AND_DEV_ID = 4 - -# Map string constants to integer constants. -ACCOUNT_TYPE_ID = { - USER: USER_ID, - PACKAGE_MAINTAINER: PACKAGE_MAINTAINER_ID, - DEVELOPER: DEVELOPER_ID, - PACKAGE_MAINTAINER_AND_DEV: PACKAGE_MAINTAINER_AND_DEV_ID, -} - -# Reversed ACCOUNT_TYPE_ID mapping. -ACCOUNT_TYPE_NAME = {v: k for k, v in ACCOUNT_TYPE_ID.items()} - - -class AccountType(Base): - """An ORM model of a single AccountTypes record.""" - - __table__ = schema.AccountTypes - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - def __init__(self, **kwargs): - self.AccountType = kwargs.pop("AccountType") - - def __str__(self): - return str(self.AccountType) - - def __repr__(self): - return "" % (self.ID, str(self)) diff --git a/aurweb/models/api_rate_limit.py b/aurweb/models/api_rate_limit.py deleted file mode 100644 index ce195a80..00000000 --- a/aurweb/models/api_rate_limit.py +++ /dev/null @@ -1,27 +0,0 @@ -from sqlalchemy.exc import IntegrityError - -from aurweb import schema -from aurweb.models.declarative import Base - - -class ApiRateLimit(Base): - __table__ = schema.ApiRateLimit - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.IP]} - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if self.Requests is None: - raise IntegrityError( - statement="Column Requests cannot be null.", - orig="ApiRateLimit.Requests", - params=("NULL"), - ) - - if self.WindowStart is None: - raise IntegrityError( - statement="Column WindowStart cannot be null.", - orig="ApiRateLimit.WindowStart", - params=("NULL"), - ) diff --git a/aurweb/models/ban.py b/aurweb/models/ban.py deleted file mode 100644 index d2a7250d..00000000 --- a/aurweb/models/ban.py +++ /dev/null @@ -1,20 +0,0 @@ -from fastapi import Request - -from aurweb import db, schema -from aurweb.models.declarative import Base -from aurweb.util import get_client_ip - - -class Ban(Base): - __table__ = schema.Bans - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.IPAddress]} - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - -def is_banned(request: Request): - ip = get_client_ip(request) - exists = db.query(Ban).filter(Ban.IPAddress == ip).exists() - return db.query(exists).scalar() diff --git a/aurweb/models/declarative.py b/aurweb/models/declarative.py deleted file mode 100644 index 22df31c7..00000000 --- a/aurweb/models/declarative.py +++ /dev/null @@ -1,29 +0,0 @@ -import json - -from sqlalchemy.ext.declarative import declarative_base - -from aurweb import util - - -def to_dict(model): - return {c.name: getattr(model, c.name) for c in model.__table__.columns} - - -def to_json(model, indent: int = None): - return json.dumps( - {k: util.jsonify(v) for k, v in to_dict(model).items()}, indent=indent - ) - - -Base = declarative_base() - -# Setup __table_args__ applicable to every table. -Base.__table_args__ = {"autoload": False, "extend_existing": True} - -# Setup Base.as_dict and Base.json. -# -# With this, declarative models can use .as_dict() or .json() -# at any time to produce a dict and json out of table columns. -# -Base.as_dict = to_dict -Base.json = to_json diff --git a/aurweb/models/dependency_type.py b/aurweb/models/dependency_type.py deleted file mode 100644 index 98418802..00000000 --- a/aurweb/models/dependency_type.py +++ /dev/null @@ -1,21 +0,0 @@ -from aurweb import schema -from aurweb.models.declarative import Base - -DEPENDS = "depends" -MAKEDEPENDS = "makedepends" -CHECKDEPENDS = "checkdepends" -OPTDEPENDS = "optdepends" - -DEPENDS_ID = 1 -MAKEDEPENDS_ID = 2 -CHECKDEPENDS_ID = 3 -OPTDEPENDS_ID = 4 - - -class DependencyType(Base): - __table__ = schema.DependencyTypes - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - def __init__(self, Name: str = None): - self.Name = Name diff --git a/aurweb/models/group.py b/aurweb/models/group.py deleted file mode 100644 index a6870db6..00000000 --- a/aurweb/models/group.py +++ /dev/null @@ -1,19 +0,0 @@ -from sqlalchemy.exc import IntegrityError - -from aurweb import schema -from aurweb.models.declarative import Base - - -class Group(Base): - __table__ = schema.Groups - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - def __init__(self, **kwargs): - super().__init__(**kwargs) - if self.Name is None: - raise IntegrityError( - statement="Column Name cannot be null.", - orig="Groups.Name", - params=("NULL"), - ) diff --git a/aurweb/models/license.py b/aurweb/models/license.py deleted file mode 100644 index f2b02a87..00000000 --- a/aurweb/models/license.py +++ /dev/null @@ -1,20 +0,0 @@ -from sqlalchemy.exc import IntegrityError - -from aurweb import schema -from aurweb.models.declarative import Base - - -class License(Base): - __table__ = schema.Licenses - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.Name: - raise IntegrityError( - statement="Column Name cannot be null.", - orig="Licenses.Name", - params=("NULL"), - ) diff --git a/aurweb/models/official_provider.py b/aurweb/models/official_provider.py deleted file mode 100644 index 0da9f76c..00000000 --- a/aurweb/models/official_provider.py +++ /dev/null @@ -1,39 +0,0 @@ -from sqlalchemy.exc import IntegrityError - -from aurweb import schema -from aurweb.models.declarative import Base - -OFFICIAL_BASE = "https://archlinux.org" - - -class OfficialProvider(Base): - __table__ = schema.OfficialProviders - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - # OfficialProvider instances are official packages. - is_official = True - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.Name: - raise IntegrityError( - statement="Column Name cannot be null.", - orig="OfficialProviders.Name", - params=("NULL"), - ) - - if not self.Repo: - raise IntegrityError( - statement="Column Repo cannot be null.", - orig="OfficialProviders.Repo", - params=("NULL"), - ) - - if not self.Provides: - raise IntegrityError( - statement="Column Provides cannot be null.", - orig="OfficialProviders.Provides", - params=("NULL"), - ) diff --git a/aurweb/models/package.py b/aurweb/models/package.py deleted file mode 100644 index e98029f3..00000000 --- a/aurweb/models/package.py +++ /dev/null @@ -1,38 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.package_base import PackageBase as _PackageBase - - -class Package(Base): - __table__ = schema.Packages - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - PackageBase = relationship( - _PackageBase, - backref=backref("packages", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageBaseID], - ) - - # No Package instances are official packages. - is_official = False - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.PackageBase and not self.PackageBaseID: - raise IntegrityError( - statement="Foreign key PackageBaseID cannot be null.", - orig="Packages.PackageBaseID", - params=("NULL"), - ) - - if self.Name is None: - raise IntegrityError( - statement="Column Name cannot be null.", - orig="Packages.Name", - params=("NULL"), - ) diff --git a/aurweb/models/package_base.py b/aurweb/models/package_base.py deleted file mode 100644 index 26d9165f..00000000 --- a/aurweb/models/package_base.py +++ /dev/null @@ -1,76 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema, time -from aurweb.models.declarative import Base -from aurweb.models.user import User as _User - - -class PackageBase(Base): - __table__ = schema.PackageBases - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - Flagger = relationship( - _User, - backref=backref("flagged_bases", lazy="dynamic"), - foreign_keys=[__table__.c.FlaggerUID], - ) - - Submitter = relationship( - _User, - backref=backref("submitted_bases", lazy="dynamic"), - foreign_keys=[__table__.c.SubmitterUID], - ) - - Maintainer = relationship( - _User, - backref=backref("maintained_bases", lazy="dynamic"), - foreign_keys=[__table__.c.MaintainerUID], - ) - - Packager = relationship( - _User, - backref=backref("package_bases", lazy="dynamic"), - foreign_keys=[__table__.c.PackagerUID], - ) - - # A set used to check for floatable values. - TO_FLOAT = {"Popularity"} - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if self.Name is None: - raise IntegrityError( - statement="Column Name cannot be null.", - orig="PackageBases.Name", - params=("NULL"), - ) - - # If no SubmittedTS/ModifiedTS is provided on creation, set them - # here to the current utc timestamp. - now = time.utcnow() - if not self.SubmittedTS: - self.SubmittedTS = now - if not self.ModifiedTS: - self.ModifiedTS = now - - if not self.FlaggerComment: - self.FlaggerComment = str() - - def __getattribute__(self, key: str): - attr = super().__getattribute__(key) - if key in PackageBase.TO_FLOAT and not isinstance(attr, float): - return float(attr) - return attr - - -def popularity_decay(pkgbase: PackageBase, utcnow: int): - """Return the delta between now and the last time popularity was updated, in days""" - return int((utcnow - pkgbase.PopularityUpdated.timestamp()) / 86400) - - -def popularity(pkgbase: PackageBase, utcnow: int): - """Return up-to-date popularity""" - return float(pkgbase.Popularity) * (0.98 ** popularity_decay(pkgbase, utcnow)) diff --git a/aurweb/models/package_blacklist.py b/aurweb/models/package_blacklist.py deleted file mode 100644 index 7f6e75ea..00000000 --- a/aurweb/models/package_blacklist.py +++ /dev/null @@ -1,20 +0,0 @@ -from sqlalchemy.exc import IntegrityError - -from aurweb import schema -from aurweb.models.declarative import Base - - -class PackageBlacklist(Base): - __table__ = schema.PackageBlacklist - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.Name: - raise IntegrityError( - statement="Column Name cannot be null.", - orig="PackageBlacklist.Name", - params=("NULL"), - ) diff --git a/aurweb/models/package_comaintainer.py b/aurweb/models/package_comaintainer.py deleted file mode 100644 index 4bd7f6b3..00000000 --- a/aurweb/models/package_comaintainer.py +++ /dev/null @@ -1,49 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.package_base import PackageBase as _PackageBase -from aurweb.models.user import User as _User - - -class PackageComaintainer(Base): - __table__ = schema.PackageComaintainers - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.UsersID, __table__.c.PackageBaseID]} - - User = relationship( - _User, - backref=backref("comaintained", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.UsersID], - ) - - PackageBase = relationship( - _PackageBase, - backref=backref("comaintainers", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageBaseID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.User and not self.UsersID: - raise IntegrityError( - statement="Foreign key UsersID cannot be null.", - orig="PackageComaintainers.UsersID", - params=("NULL"), - ) - - if not self.PackageBase and not self.PackageBaseID: - raise IntegrityError( - statement="Foreign key PackageBaseID cannot be null.", - orig="PackageComaintainers.PackageBaseID", - params=("NULL"), - ) - - if not self.Priority: - raise IntegrityError( - statement="Column Priority cannot be null.", - orig="PackageComaintainers.Priority", - params=("NULL"), - ) diff --git a/aurweb/models/package_comment.py b/aurweb/models/package_comment.py deleted file mode 100644 index 64b339a0..00000000 --- a/aurweb/models/package_comment.py +++ /dev/null @@ -1,73 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.package_base import PackageBase as _PackageBase -from aurweb.models.user import User as _User - - -class PackageComment(Base): - __table__ = schema.PackageComments - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - PackageBase = relationship( - _PackageBase, - backref=backref("comments", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageBaseID], - ) - - User = relationship( - _User, - backref=backref("package_comments", lazy="dynamic"), - foreign_keys=[__table__.c.UsersID], - ) - - Editor = relationship( - _User, - backref=backref("edited_comments", lazy="dynamic"), - foreign_keys=[__table__.c.EditedUsersID], - ) - - Deleter = relationship( - _User, - backref=backref("deleted_comments", lazy="dynamic"), - foreign_keys=[__table__.c.DelUsersID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.PackageBase and not self.PackageBaseID: - raise IntegrityError( - statement="Foreign key PackageBaseID cannot be null.", - orig="PackageComments.PackageBaseID", - params=("NULL"), - ) - - if not self.User and not self.UsersID: - raise IntegrityError( - statement="Foreign key UsersID cannot be null.", - orig="PackageComments.UsersID", - params=("NULL"), - ) - - if self.Comments is None: - raise IntegrityError( - statement="Column Comments cannot be null.", - orig="PackageComments.Comments", - params=("NULL"), - ) - - if self.RenderedComment is None: - self.RenderedComment = str() - - def maintainers(self): - return list( - filter( - lambda e: e is not None, - [self.PackageBase.Maintainer] - + [c.User for c in self.PackageBase.comaintainers], - ) - ) diff --git a/aurweb/models/package_dependency.py b/aurweb/models/package_dependency.py deleted file mode 100644 index 9cf1eda0..00000000 --- a/aurweb/models/package_dependency.py +++ /dev/null @@ -1,100 +0,0 @@ -from sqlalchemy import and_, literal -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import db, schema -from aurweb.models.declarative import Base -from aurweb.models.dependency_type import DependencyType as _DependencyType -from aurweb.models.official_provider import OfficialProvider as _OfficialProvider -from aurweb.models.package import Package as _Package -from aurweb.models.package_relation import PackageRelation - - -class PackageDependency(Base): - __table__ = schema.PackageDepends - __tablename__ = __table__.name - __mapper_args__ = { - "primary_key": [ - __table__.c.PackageID, - __table__.c.DepTypeID, - __table__.c.DepName, - ] - } - - Package = relationship( - _Package, - backref=backref("package_dependencies", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageID], - ) - - DependencyType = relationship( - _DependencyType, - backref=backref("package_dependencies", lazy="dynamic"), - foreign_keys=[__table__.c.DepTypeID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.Package and not self.PackageID: - raise IntegrityError( - statement="Foreign key PackageID cannot be null.", - orig="PackageDependencies.PackageID", - params=("NULL"), - ) - - if not self.DependencyType and not self.DepTypeID: - raise IntegrityError( - statement="Foreign key DepTypeID cannot be null.", - orig="PackageDependencies.DepTypeID", - params=("NULL"), - ) - - if self.DepName is None: - raise IntegrityError( - statement="Column DepName cannot be null.", - orig="PackageDependencies.DepName", - params=("NULL"), - ) - - def is_aur_package(self) -> bool: - pkg = db.query(_Package).filter(_Package.Name == self.DepName).exists() - return db.query(pkg).scalar() - - def is_package(self) -> bool: - official = ( - db.query(_OfficialProvider) - .filter(_OfficialProvider.Name == self.DepName) - .exists() - ) - return self.is_aur_package() or db.query(official).scalar() - - def provides(self) -> list[PackageRelation]: - from aurweb.models.relation_type import PROVIDES_ID - - rels = ( - db.query(PackageRelation) - .join(_Package) - .filter( - and_( - PackageRelation.RelTypeID == PROVIDES_ID, - PackageRelation.RelName == self.DepName, - ) - ) - .with_entities(_Package.Name, literal(False).label("is_official")) - .order_by(_Package.Name.asc()) - ) - - official_rels = ( - db.query(_OfficialProvider) - .filter( - and_( - _OfficialProvider.Provides == self.DepName, - _OfficialProvider.Name != self.DepName, - ) - ) - .with_entities(_OfficialProvider.Name, literal(True).label("is_official")) - .order_by(_OfficialProvider.Name.asc()) - ) - - return rels.union(official_rels).all() diff --git a/aurweb/models/package_group.py b/aurweb/models/package_group.py deleted file mode 100644 index 4e7c55ee..00000000 --- a/aurweb/models/package_group.py +++ /dev/null @@ -1,42 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.group import Group as _Group -from aurweb.models.package import Package as _Package - - -class PackageGroup(Base): - __table__ = schema.PackageGroups - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.PackageID, __table__.c.GroupID]} - - Package = relationship( - _Package, - backref=backref("package_groups", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageID], - ) - - Group = relationship( - _Group, - backref=backref("package_groups", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.GroupID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.Package and not self.PackageID: - raise IntegrityError( - statement="Primary key PackageID cannot be null.", - orig="PackageGroups.PackageID", - params=("NULL"), - ) - - if not self.Group and not self.GroupID: - raise IntegrityError( - statement="Primary key GroupID cannot be null.", - orig="PackageGroups.GroupID", - params=("NULL"), - ) diff --git a/aurweb/models/package_keyword.py b/aurweb/models/package_keyword.py deleted file mode 100644 index dfacd7c0..00000000 --- a/aurweb/models/package_keyword.py +++ /dev/null @@ -1,28 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.package_base import PackageBase as _PackageBase - - -class PackageKeyword(Base): - __table__ = schema.PackageKeywords - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.PackageBaseID, __table__.c.Keyword]} - - PackageBase = relationship( - _PackageBase, - backref=backref("keywords", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageBaseID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.PackageBase and not self.PackageBaseID: - raise IntegrityError( - statement="Primary key PackageBaseID cannot be null.", - orig="PackageKeywords.PackageBaseID", - params=("NULL"), - ) diff --git a/aurweb/models/package_license.py b/aurweb/models/package_license.py deleted file mode 100644 index c421defe..00000000 --- a/aurweb/models/package_license.py +++ /dev/null @@ -1,42 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.license import License as _License -from aurweb.models.package import Package as _Package - - -class PackageLicense(Base): - __table__ = schema.PackageLicenses - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.PackageID, __table__.c.LicenseID]} - - Package = relationship( - _Package, - backref=backref("package_licenses", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageID], - ) - - License = relationship( - _License, - backref=backref("package_licenses", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.LicenseID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.Package and not self.PackageID: - raise IntegrityError( - statement="Primary key PackageID cannot be null.", - orig="PackageLicenses.PackageID", - params=("NULL"), - ) - - if not self.License and not self.LicenseID: - raise IntegrityError( - statement="Primary key LicenseID cannot be null.", - orig="PackageLicenses.LicenseID", - params=("NULL"), - ) diff --git a/aurweb/models/package_notification.py b/aurweb/models/package_notification.py deleted file mode 100644 index 7d5489d4..00000000 --- a/aurweb/models/package_notification.py +++ /dev/null @@ -1,42 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.package_base import PackageBase as _PackageBase -from aurweb.models.user import User as _User - - -class PackageNotification(Base): - __table__ = schema.PackageNotifications - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.UserID, __table__.c.PackageBaseID]} - - User = relationship( - _User, - backref=backref("notifications", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.UserID], - ) - - PackageBase = relationship( - _PackageBase, - backref=backref("notifications", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageBaseID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.User and not self.UserID: - raise IntegrityError( - statement="Foreign key UserID cannot be null.", - orig="PackageNotifications.UserID", - params=("NULL"), - ) - - if not self.PackageBase and not self.PackageBaseID: - raise IntegrityError( - statement="Foreign key PackageBaseID cannot be null.", - orig="PackageNotifications.PackageBaseID", - params=("NULL"), - ) diff --git a/aurweb/models/package_relation.py b/aurweb/models/package_relation.py deleted file mode 100644 index 60988a56..00000000 --- a/aurweb/models/package_relation.py +++ /dev/null @@ -1,55 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.package import Package as _Package -from aurweb.models.relation_type import RelationType as _RelationType - - -class PackageRelation(Base): - __table__ = schema.PackageRelations - __tablename__ = __table__.name - __mapper_args__ = { - "primary_key": [ - __table__.c.PackageID, - __table__.c.RelTypeID, - __table__.c.RelName, - ] - } - - Package = relationship( - _Package, - backref=backref("package_relations", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageID], - ) - - RelationType = relationship( - _RelationType, - backref=backref("package_relations", lazy="dynamic"), - foreign_keys=[__table__.c.RelTypeID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.Package and not self.PackageID: - raise IntegrityError( - statement="Foreign key PackageID cannot be null.", - orig="PackageRelations.PackageID", - params=("NULL"), - ) - - if not self.RelationType and not self.RelTypeID: - raise IntegrityError( - statement="Foreign key RelTypeID cannot be null.", - orig="PackageRelations.RelTypeID", - params=("NULL"), - ) - - if not self.RelName: - raise IntegrityError( - statement="Column RelName cannot be null.", - orig="PackageRelations.RelName", - params=("NULL"), - ) diff --git a/aurweb/models/package_request.py b/aurweb/models/package_request.py deleted file mode 100644 index 94ff064b..00000000 --- a/aurweb/models/package_request.py +++ /dev/null @@ -1,121 +0,0 @@ -import base64 -import hashlib - -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import config, schema -from aurweb.models.declarative import Base -from aurweb.models.package_base import PackageBase as _PackageBase -from aurweb.models.request_type import RequestType as _RequestType -from aurweb.models.user import User as _User - -PENDING = "Pending" -CLOSED = "Closed" -ACCEPTED = "Accepted" -REJECTED = "Rejected" - -# Integer values used for the Status column of PackageRequest. -PENDING_ID = 0 -CLOSED_ID = 1 -ACCEPTED_ID = 2 -REJECTED_ID = 3 - - -class PackageRequest(Base): - __table__ = schema.PackageRequests - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - RequestType = relationship( - _RequestType, - backref=backref("package_requests", lazy="dynamic"), - foreign_keys=[__table__.c.ReqTypeID], - ) - - User = relationship( - _User, - backref=backref("package_requests", lazy="dynamic"), - foreign_keys=[__table__.c.UsersID], - ) - - PackageBase = relationship( - _PackageBase, - backref=backref("requests", lazy="dynamic"), - foreign_keys=[__table__.c.PackageBaseID], - ) - - Closer = relationship( - _User, - backref=backref("closed_requests", lazy="dynamic"), - foreign_keys=[__table__.c.ClosedUID], - ) - - STATUS_DISPLAY = { - PENDING_ID: PENDING, - CLOSED_ID: CLOSED, - ACCEPTED_ID: ACCEPTED, - REJECTED_ID: REJECTED, - } - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.RequestType and not self.ReqTypeID: - raise IntegrityError( - statement="Foreign key ReqTypeID cannot be null.", - orig="PackageRequests.ReqTypeID", - params=("NULL"), - ) - - if not self.PackageBase and not self.PackageBaseID: - raise IntegrityError( - statement="Foreign key PackageBaseID cannot be null.", - orig="PackageRequests.PackageBaseID", - params=("NULL"), - ) - - if not self.PackageBaseName: - raise IntegrityError( - statement="Column PackageBaseName cannot be null.", - orig="PackageRequests.PackageBaseName", - params=("NULL"), - ) - - if not self.User and not self.UsersID: - raise IntegrityError( - statement="Foreign key UsersID cannot be null.", - orig="PackageRequests.UsersID", - params=("NULL"), - ) - - if self.Comments is None: - raise IntegrityError( - statement="Column Comments cannot be null.", - orig="PackageRequests.Comments", - params=("NULL"), - ) - - if self.ClosureComment is None: - raise IntegrityError( - statement="Column ClosureComment cannot be null.", - orig="PackageRequests.ClosureComment", - params=("NULL"), - ) - - def status_display(self) -> str: - """Return a display string for the Status column.""" - return self.STATUS_DISPLAY[self.Status] - - def ml_message_id_hash(self) -> str: - """Return the X-Message-ID-Hash that is used in the mailing list archive.""" - # X-Message-ID-Hash is a base32 encoded SHA1 hash - msgid = f"pkg-request-{str(self.ID)}@aur.archlinux.org" - sha1 = hashlib.sha1(msgid.encode()).digest() - - return base64.b32encode(sha1).decode() - - def ml_message_url(self) -> str: - """Return the mailing list URL for the request.""" - url = config.get("options", "ml_thread_url") % (self.ml_message_id_hash()) - return url diff --git a/aurweb/models/package_source.py b/aurweb/models/package_source.py deleted file mode 100644 index a6d0f958..00000000 --- a/aurweb/models/package_source.py +++ /dev/null @@ -1,31 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.package import Package as _Package - - -class PackageSource(Base): - __table__ = schema.PackageSources - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.PackageID, __table__.c.Source]} - - Package = relationship( - _Package, - backref=backref("package_sources", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.Package and not self.PackageID: - raise IntegrityError( - statement="Foreign key PackageID cannot be null.", - orig="PackageSources.PackageID", - params=("NULL"), - ) - - if not self.Source: - self.Source = "/dev/null" diff --git a/aurweb/models/package_vote.py b/aurweb/models/package_vote.py deleted file mode 100644 index b9e233d9..00000000 --- a/aurweb/models/package_vote.py +++ /dev/null @@ -1,49 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.package_base import PackageBase as _PackageBase -from aurweb.models.user import User as _User - - -class PackageVote(Base): - __table__ = schema.PackageVotes - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.UsersID, __table__.c.PackageBaseID]} - - User = relationship( - _User, - backref=backref("package_votes", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.UsersID], - ) - - PackageBase = relationship( - _PackageBase, - backref=backref("package_votes", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.PackageBaseID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.User and not self.UsersID: - raise IntegrityError( - statement="Foreign key UsersID cannot be null.", - orig="PackageVotes.UsersID", - params=("NULL"), - ) - - if not self.PackageBase and not self.PackageBaseID: - raise IntegrityError( - statement="Foreign key PackageBaseID cannot be null.", - orig="PackageVotes.PackageBaseID", - params=("NULL"), - ) - - if not self.VoteTS: - raise IntegrityError( - statement="Column VoteTS cannot be null.", - orig="PackageVotes.VoteTS", - params=("NULL"), - ) diff --git a/aurweb/models/relation_type.py b/aurweb/models/relation_type.py deleted file mode 100644 index b52c91ec..00000000 --- a/aurweb/models/relation_type.py +++ /dev/null @@ -1,19 +0,0 @@ -from aurweb import schema -from aurweb.models.declarative import Base - -CONFLICTS = "conflicts" -PROVIDES = "provides" -REPLACES = "replaces" - -CONFLICTS_ID = 1 -PROVIDES_ID = 2 -REPLACES_ID = 3 - - -class RelationType(Base): - __table__ = schema.RelationTypes - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - def __init__(self, Name: str = None): - self.Name = Name diff --git a/aurweb/models/request_type.py b/aurweb/models/request_type.py deleted file mode 100644 index 1853b0be..00000000 --- a/aurweb/models/request_type.py +++ /dev/null @@ -1,20 +0,0 @@ -from aurweb import schema -from aurweb.models.declarative import Base - -DELETION = "deletion" -ORPHAN = "orphan" -MERGE = "merge" - -DELETION_ID = 1 -ORPHAN_ID = 2 -MERGE_ID = 3 - - -class RequestType(Base): - __table__ = schema.RequestTypes - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - def name_display(self) -> str: - """Return the Name column with its first char capitalized.""" - return self.Name.title() diff --git a/aurweb/models/session.py b/aurweb/models/session.py deleted file mode 100644 index ff97f017..00000000 --- a/aurweb/models/session.py +++ /dev/null @@ -1,44 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import db, schema -from aurweb.models.declarative import Base -from aurweb.models.user import User as _User - - -class Session(Base): - __table__ = schema.Sessions - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.UsersID]} - - User = relationship( - _User, - backref=backref("session", cascade="all, delete", uselist=False), - foreign_keys=[__table__.c.UsersID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - # We'll try to either use UsersID or User.ID if we can. - # If neither exist, an AttributeError is raised, in which case - # we set the uid to 0, which triggers IntegrityError below. - try: - uid = self.UsersID or self.User.ID - except AttributeError: - uid = 0 - - user_exists = db.query(_User).filter(_User.ID == uid).exists() - if not db.query(user_exists).scalar(): - raise IntegrityError( - statement=( - "Foreign key UsersID cannot be null and " - "must be a valid user's ID." - ), - orig="Sessions.UsersID", - params=("NULL"), - ) - - -def generate_unique_sid(): - return db.make_random_value(Session, Session.SessionID, 32) diff --git a/aurweb/models/ssh_pub_key.py b/aurweb/models/ssh_pub_key.py deleted file mode 100644 index c0b59445..00000000 --- a/aurweb/models/ssh_pub_key.py +++ /dev/null @@ -1,29 +0,0 @@ -from subprocess import PIPE, Popen - -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base - - -class SSHPubKey(Base): - __table__ = schema.SSHPubKeys - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.Fingerprint]} - - User = relationship( - "User", - backref=backref("ssh_pub_keys", lazy="dynamic", cascade="all, delete"), - foreign_keys=[__table__.c.UserID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - -def get_fingerprint(pubkey: str) -> str: - proc = Popen(["ssh-keygen", "-l", "-f", "-"], stdin=PIPE, stdout=PIPE, stderr=PIPE) - out, _ = proc.communicate(pubkey.encode()) - if proc.returncode: - raise ValueError("The SSH public key is invalid.") - return out.decode().split()[1].split(":", 1)[1] diff --git a/aurweb/models/term.py b/aurweb/models/term.py deleted file mode 100644 index 3aad9884..00000000 --- a/aurweb/models/term.py +++ /dev/null @@ -1,27 +0,0 @@ -from sqlalchemy.exc import IntegrityError - -from aurweb import schema -from aurweb.models.declarative import Base - - -class Term(Base): - __table__ = schema.Terms - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.Description: - raise IntegrityError( - statement="Column Description cannot be null.", - orig="Terms.Description", - params=("NULL"), - ) - - if not self.URL: - raise IntegrityError( - statement="Column URL cannot be null.", - orig="Terms.URL", - params=("NULL"), - ) diff --git a/aurweb/models/user.py b/aurweb/models/user.py deleted file mode 100644 index ee2889d2..00000000 --- a/aurweb/models/user.py +++ /dev/null @@ -1,272 +0,0 @@ -import hashlib -from typing import Set - -import bcrypt -from fastapi import Request -from sqlalchemy import or_ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -import aurweb.config -import aurweb.models.account_type -import aurweb.schema -from aurweb import aur_logging, db, schema, time, util -from aurweb.models.account_type import AccountType as _AccountType -from aurweb.models.ban import is_banned -from aurweb.models.declarative import Base - -logger = aur_logging.get_logger(__name__) - -SALT_ROUNDS_DEFAULT = 12 - - -class User(Base): - """An ORM model of a single Users record.""" - - __table__ = schema.Users - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - AccountType = relationship( - _AccountType, - backref=backref("users", lazy="dynamic"), - foreign_keys=[__table__.c.AccountTypeID], - uselist=False, - ) - - # High-level variables used to track authentication (not in DB). - authenticated = False - nonce = None - - # Make this static to the class just in case SQLAlchemy ever - # does something to bypass our constructor. - salt_rounds = aurweb.config.getint("options", "salt_rounds", SALT_ROUNDS_DEFAULT) - - def __init__(self, Passwd: str = str(), **kwargs): - super().__init__(**kwargs, Passwd=str()) - - # Run this again in the constructor in case we rehashed config. - self.salt_rounds = aurweb.config.getint( - "options", "salt_rounds", SALT_ROUNDS_DEFAULT - ) - if Passwd: - self.update_password(Passwd) - - def update_password(self, password): - self.Passwd = bcrypt.hashpw( - password.encode(), bcrypt.gensalt(rounds=self.salt_rounds) - ).decode() - - @staticmethod - def minimum_passwd_length(): - return aurweb.config.getint("options", "passwd_min_len") - - def is_authenticated(self): - """Return internal authenticated state.""" - return self.authenticated - - def valid_password(self, password: str): - """Check authentication against a given password.""" - if password is None: - return False - - password_is_valid = False - - try: - password_is_valid = bcrypt.checkpw(password.encode(), self.Passwd.encode()) - except ValueError: - pass - - # If our Salt column is not empty, we're using a legacy password. - if not password_is_valid and self.Salt != str(): - # Try to login with legacy method. - password_is_valid = ( - hashlib.md5(f"{self.Salt}{password}".encode()).hexdigest() - == self.Passwd - ) - - # We got here, we passed the legacy authentication. - # Update the password to our modern hash style. - if password_is_valid: - self.update_password(password) - - return password_is_valid - - def _login_approved(self, request: Request): - return not is_banned(request) and not self.Suspended - - def login(self, request: Request, password: str) -> str: - """Login and authenticate a request.""" - - from aurweb import db - from aurweb.models.session import Session, generate_unique_sid - - if not self._login_approved(request): - return None - - self.authenticated = self.valid_password(password) - if not self.authenticated: - return None - - # Maximum number of iterations where we attempt to generate - # a unique SID. In cases where the Session table has - # exhausted all possible values, this will catch exceptions - # instead of raising them and include details about failing - # generation in an HTTPException. - tries = 36 - - exc = None - for i in range(tries): - exc = None - now_ts = time.utcnow() - try: - with db.begin(): - self.LastLogin = now_ts - self.LastLoginIPAddress = util.get_client_ip(request) - if not self.session: - sid = generate_unique_sid() - self.session = db.create( - Session, User=self, SessionID=sid, LastUpdateTS=now_ts - ) - else: - last_updated = self.session.LastUpdateTS - if last_updated and last_updated < now_ts: - self.session.SessionID = generate_unique_sid() - self.session.LastUpdateTS = now_ts - - # Unset InactivityTS, we've logged in! - self.InactivityTS = 0 - - break - except IntegrityError as exc_: - exc = exc_ - - if exc: - raise exc - - return self.session.SessionID - - def has_credential(self, credential: Set[int], approved: list["User"] = list()): - from aurweb.auth.creds import has_credential - - return has_credential(self, credential, approved) - - def logout(self, request: Request) -> None: - self.authenticated = False - if self.session: - with db.begin(): - db.delete(self.session) - - def is_package_maintainer(self): - return self.AccountType.ID in { - aurweb.models.account_type.PACKAGE_MAINTAINER_ID, - aurweb.models.account_type.PACKAGE_MAINTAINER_AND_DEV_ID, - } - - def is_developer(self): - return self.AccountType.ID in { - aurweb.models.account_type.DEVELOPER_ID, - aurweb.models.account_type.PACKAGE_MAINTAINER_AND_DEV_ID, - } - - def is_elevated(self): - """A User is 'elevated' when they have either a - Package Maintainer or Developer AccountType.""" - return self.AccountType.ID in { - aurweb.models.account_type.PACKAGE_MAINTAINER_ID, - aurweb.models.account_type.DEVELOPER_ID, - aurweb.models.account_type.PACKAGE_MAINTAINER_AND_DEV_ID, - } - - def can_edit_user(self, target: "User") -> bool: - """ - Whether this User instance can edit `target`. - - This User can edit user `target` if we both: have credentials and - self.AccountTypeID is greater or equal to `target`.AccountTypeID. - - In short, a user must at least have credentials and be at least - the same account type as the target. - - User < Package Maintainer < Developer < Package Maintainer & Developer - - :param target: Target User to be edited - :return: Boolean indicating whether `self` can edit `target` - """ - from aurweb.auth import creds - - has_cred = self.has_credential(creds.ACCOUNT_EDIT, approved=[target]) - return has_cred and self.AccountTypeID >= target.AccountTypeID - - def voted_for(self, package) -> bool: - """Has this User voted for package?""" - from aurweb.models.package_vote import PackageVote - - return bool( - package.PackageBase.package_votes.filter( - PackageVote.UsersID == self.ID - ).scalar() - ) - - def notified(self, package) -> bool: - """Is this User being notified about package (or package base)? - - :param package: Package or PackageBase instance - :return: Boolean indicating state of package notification - in relation to this User - """ - from aurweb.models.package import Package - from aurweb.models.package_base import PackageBase - from aurweb.models.package_notification import PackageNotification - - query = None - if isinstance(package, Package): - query = package.PackageBase.notifications - elif isinstance(package, PackageBase): - query = package.notifications - - # Run an exists() query where a pkgbase-related - # PackageNotification exists for self (a user). - return bool( - db.query( - query.filter(PackageNotification.UserID == self.ID).exists() - ).scalar() - ) - - def packages(self): - """Returns an ORM query to Package objects owned by this user. - - This should really be replaced with an internal ORM join - configured for the User model. This has not been done yet - due to issues I've been encountering in the process, so - sticking with this function until we can properly implement it. - - :return: ORM query of User-packaged or maintained Package objects - """ - from aurweb.models.package import Package - from aurweb.models.package_base import PackageBase - - return ( - db.query(Package) - .join(PackageBase) - .filter( - or_( - PackageBase.PackagerUID == self.ID, - PackageBase.MaintainerUID == self.ID, - ) - ) - ) - - def __repr__(self): - return "" % ( - self.ID, - str(self.AccountType), - self.Username, - ) - - def __str__(self) -> str: - return self.Username - - -def generate_resetkey(): - return util.make_random_string(32) diff --git a/aurweb/models/vote.py b/aurweb/models/vote.py deleted file mode 100644 index ec20fe9b..00000000 --- a/aurweb/models/vote.py +++ /dev/null @@ -1,42 +0,0 @@ -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema -from aurweb.models.declarative import Base -from aurweb.models.user import User as _User -from aurweb.models.voteinfo import VoteInfo as _VoteInfo - - -class Vote(Base): - __table__ = schema.Votes - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.VoteID, __table__.c.UserID]} - - VoteInfo = relationship( - _VoteInfo, - backref=backref("votes", lazy="dynamic"), - foreign_keys=[__table__.c.VoteID], - ) - - User = relationship( - _User, - backref=backref("votes", lazy="dynamic"), - foreign_keys=[__table__.c.UserID], - ) - - def __init__(self, **kwargs): - super().__init__(**kwargs) - - if not self.VoteInfo and not self.VoteID: - raise IntegrityError( - statement="Foreign key VoteID cannot be null.", - orig="Votes.VoteID", - params=("NULL"), - ) - - if not self.User and not self.UserID: - raise IntegrityError( - statement="Foreign key UserID cannot be null.", - orig="Votes.UserID", - params=("NULL"), - ) diff --git a/aurweb/models/voteinfo.py b/aurweb/models/voteinfo.py deleted file mode 100644 index b7480661..00000000 --- a/aurweb/models/voteinfo.py +++ /dev/null @@ -1,82 +0,0 @@ -import typing - -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import backref, relationship - -from aurweb import schema, time -from aurweb.models.declarative import Base -from aurweb.models.user import User as _User - - -class VoteInfo(Base): - __table__ = schema.VoteInfo - __tablename__ = __table__.name - __mapper_args__ = {"primary_key": [__table__.c.ID]} - - Submitter = relationship( - _User, - backref=backref("voteinfo_set", lazy="dynamic"), - foreign_keys=[__table__.c.SubmitterID], - ) - - def __init__(self, **kwargs): - # Default Quorum, Yes, No and Abstain columns to 0. - for col in ("Quorum", "Yes", "No", "Abstain"): - if col not in kwargs: - kwargs.update({col: 0}) - - super().__init__(**kwargs) - - if self.Agenda is None: - raise IntegrityError( - statement="Column Agenda cannot be null.", - orig="VoteInfo.Agenda", - params=("NULL"), - ) - - if self.User is None: - raise IntegrityError( - statement="Column User cannot be null.", - orig="VoteInfo.User", - params=("NULL"), - ) - - if self.Submitted is None: - raise IntegrityError( - statement="Column Submitted cannot be null.", - orig="VoteInfo.Submitted", - params=("NULL"), - ) - - if self.End is None: - raise IntegrityError( - statement="Column End cannot be null.", - orig="VoteInfo.End", - params=("NULL"), - ) - - if not self.Submitter: - raise IntegrityError( - statement="Foreign key SubmitterID cannot be null.", - orig="VoteInfo.SubmitterID", - params=("NULL"), - ) - - def __setattr__(self, key: str, value: typing.Any): - """Customize setattr to stringify any Quorum keys given.""" - if key == "Quorum": - value = str(value) - return super().__setattr__(key, value) - - def __getattribute__(self, key: str): - """Customize getattr to floatify any fetched Quorum values.""" - attr = super().__getattribute__(key) - if key == "Quorum": - return float(attr) - return attr - - def is_running(self): - return self.End > time.utcnow() - - def total_votes(self): - return self.Yes + self.No + self.Abstain diff --git a/aurweb/packages/__init__.py b/aurweb/packages/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aurweb/packages/requests.py b/aurweb/packages/requests.py deleted file mode 100644 index be35a3d3..00000000 --- a/aurweb/packages/requests.py +++ /dev/null @@ -1,269 +0,0 @@ -from typing import Optional, Set - -from fastapi import Request -from sqlalchemy import and_, orm - -from aurweb import config, db, l10n, time, util -from aurweb.exceptions import InvariantError -from aurweb.models import PackageBase, PackageRequest, User -from aurweb.models.package_request import ACCEPTED_ID, PENDING_ID, REJECTED_ID -from aurweb.models.request_type import ( - DELETION, - DELETION_ID, - MERGE, - MERGE_ID, - ORPHAN, - ORPHAN_ID, -) -from aurweb.scripts import notify - - -class ClosureFactory: - """A factory class used to autogenerate closure comments.""" - - REQTYPE_NAMES = {DELETION_ID: DELETION, MERGE_ID: MERGE, ORPHAN_ID: ORPHAN} - - def _deletion_closure( - self, requester: User, pkgbase: PackageBase, target: PackageBase = None - ): - return f"[Autogenerated] Accepted deletion for {pkgbase.Name}." - - def _merge_closure( - self, requester: User, pkgbase: PackageBase, target: PackageBase = None - ): - return ( - f"[Autogenerated] Accepted merge for {pkgbase.Name} " f"into {target.Name}." - ) - - def _orphan_closure( - self, requester: User, pkgbase: PackageBase, target: PackageBase = None - ): - return f"[Autogenerated] Accepted orphan for {pkgbase.Name}." - - def _rejected_merge_closure( - self, requester: User, pkgbase: PackageBase, target: PackageBase = None - ): - return ( - f"[Autogenerated] Another request to merge {pkgbase.Name} " - f"into {target.Name} has rendered this request invalid." - ) - - def get_closure( - self, - reqtype_id: int, - requester: User, - pkgbase: PackageBase, - target: PackageBase = None, - status: int = ACCEPTED_ID, - ) -> str: - """ - Return a closure comment handled by this class. - - :param reqtype_id: RequestType.ID - :param requester: User who is closing a request - :param pkgbase: PackageBase instance related to the request - :param target: Merge request target PackageBase instance - :param status: PackageRequest.Status - """ - reqtype = ClosureFactory.REQTYPE_NAMES.get(reqtype_id) - - partial = str() - if status == REJECTED_ID: - partial = "_rejected" - - try: - handler = getattr(self, f"{partial}_{reqtype}_closure") - except AttributeError: - raise NotImplementedError("Unsupported 'reqtype_id' value.") - return handler(requester, pkgbase, target) - - -def update_closure_comment( - pkgbase: PackageBase, reqtype_id: int, comments: str, target: PackageBase = None -) -> None: - """ - Update all pending requests related to `pkgbase` with a closure comment. - - In order to persist closure comments through `handle_request`'s - algorithm, we must set `PackageRequest.ClosureComment` before calling - it. This function can be used to update the closure comment of all - package requests related to `pkgbase` and `reqtype_id`. - - If an empty `comments` string is provided, we no-op out of this. - - :param pkgbase: PackageBase instance - :param reqtype_id: RequestType.ID - :param comments: PackageRequest.ClosureComment to update to - :param target: Merge request target PackageBase instance - """ - if not comments: - return - - query = pkgbase.requests.filter( - and_( - PackageRequest.ReqTypeID == reqtype_id, PackageRequest.Status == PENDING_ID - ) - ) - if reqtype_id == MERGE_ID: - query = query.filter(PackageRequest.MergeBaseName == target.Name) - - for pkgreq in query: - pkgreq.ClosureComment = comments - - -def verify_orphan_request(user: User, pkgbase: PackageBase): - """Verify that an undue orphan request exists in `requests`.""" - requests = pkgbase.requests.filter(PackageRequest.ReqTypeID == ORPHAN_ID) - for pkgreq in requests: - idle_time = config.getint("options", "request_idle_time") - time_delta = time.utcnow() - pkgreq.RequestTS - is_due = pkgreq.Status == PENDING_ID and time_delta > idle_time - if is_due: - # If the requester is the pkgbase maintainer or the - # request is already due, we're good to go: return True. - return True - - return False - - -def close_pkgreq( - pkgreq: PackageRequest, - closer: User, - pkgbase: PackageBase, - target: Optional[PackageBase], - status: int, -) -> None: - """ - Close a package request with `pkgreq`.Status == `status`. - - :param pkgreq: PackageRequest instance - :param closer: `pkgreq`.Closer User instance to update to - :param pkgbase: PackageBase instance which `pkgreq` is about - :param target: Optional PackageBase instance to merge into - :param status: `pkgreq`.Status value to update to - """ - now = time.utcnow() - pkgreq.Status = status - pkgreq.Closer = closer - pkgreq.ClosureComment = pkgreq.ClosureComment or ClosureFactory().get_closure( - pkgreq.ReqTypeID, closer, pkgbase, target, status - ) - pkgreq.ClosedTS = now - - -@db.retry_deadlock -def handle_request( - request: Request, - reqtype_id: int, - pkgbase: PackageBase, - target: PackageBase = None, - comments: str = str(), -) -> list[notify.Notification]: - """ - Handle package requests before performing an action. - - The actions we're interested in are disown (orphan), delete and - merge. There is now an automated request generation and closure - notification when a privileged user performs one of these actions - without a pre-existing request. They all commit changes to the - database, and thus before calling, state should be verified to - avoid leaked database records regarding these requests. - - Otherwise, we accept and reject requests based on their state - and send out the relevent notifications. - - :param requester: User who needs this a `pkgbase` request handled - :param reqtype_id: RequestType.ID - :param pkgbase: PackageBase which the request is about - :param target: Optional target to merge into - """ - notifs: list[notify.Notification] = [] - - # If it's an orphan request, perform further verification - # regarding existing requests. - if reqtype_id == ORPHAN_ID: - if not verify_orphan_request(request.user, pkgbase): - _ = l10n.get_translator_for_request(request) - raise InvariantError( - _("No due existing orphan requests to accept for %s.") % pkgbase.Name - ) - - # Produce a base query for requests related to `pkgbase`, based - # on ReqTypeID matching `reqtype_id`, pending status and a correct - # PackagBaseName column. - query: orm.Query = pkgbase.requests.filter( - and_( - PackageRequest.ReqTypeID == reqtype_id, - PackageRequest.Status == PENDING_ID, - PackageRequest.PackageBaseName == pkgbase.Name, - ) - ) - - # Build a query for records we should accept. For merge requests, - # this is specific to a matching MergeBaseName. For others, this - # just ends up becoming `query`. - accept_query: orm.Query = query - if target: - # If a `target` was supplied, filter by MergeBaseName - accept_query = query.filter(PackageRequest.MergeBaseName == target.Name) - - # Build an accept list out of `accept_query`. - to_accept: list[PackageRequest] = accept_query.all() - accepted_ids: Set[int] = set(p.ID for p in to_accept) - - # Build a reject list out of `query` filtered by IDs not found - # in `to_accept`. That is, unmatched records of the same base - # query properties. - to_reject: list[PackageRequest] = query.filter( - ~PackageRequest.ID.in_(accepted_ids) - ).all() - - # If we have no requests to accept, create a new one. - # This is done to increase tracking of actions occurring - # through the website. - if not to_accept: - utcnow = time.utcnow() - with db.begin(): - pkgreq = db.create( - PackageRequest, - ReqTypeID=reqtype_id, - RequestTS=utcnow, - User=request.user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Comments="Autogenerated by aurweb.", - ClosureComment=comments, - ) - - # If it's a merge request, set MergeBaseName to `target`.Name. - if pkgreq.ReqTypeID == MERGE_ID: - pkgreq.MergeBaseName = target.Name - - # Add the new request to `to_accept` and allow standard - # flow to continue afterward. - to_accept.append(pkgreq) - - # Update requests with their new status and closures. - @db.retry_deadlock - def retry_closures(): - with db.begin(): - util.apply_all( - to_accept, - lambda p: close_pkgreq(p, request.user, pkgbase, target, ACCEPTED_ID), - ) - util.apply_all( - to_reject, - lambda p: close_pkgreq(p, request.user, pkgbase, target, REJECTED_ID), - ) - - retry_closures() - - # Create RequestCloseNotifications for all requests involved. - for pkgreq in to_accept + to_reject: - notif = notify.RequestCloseNotification( - request.user.ID, pkgreq.ID, pkgreq.status_display() - ) - notifs.append(notif) - - # Return notifications to the caller for sending. - return notifs diff --git a/aurweb/packages/search.py b/aurweb/packages/search.py deleted file mode 100644 index 78b27a9a..00000000 --- a/aurweb/packages/search.py +++ /dev/null @@ -1,403 +0,0 @@ -from typing import Set - -from sqlalchemy import and_, case, or_, orm - -from aurweb import db, models -from aurweb.models import Group, Package, PackageBase, User -from aurweb.models.dependency_type import ( - CHECKDEPENDS_ID, - DEPENDS_ID, - MAKEDEPENDS_ID, - OPTDEPENDS_ID, -) -from aurweb.models.package_comaintainer import PackageComaintainer -from aurweb.models.package_group import PackageGroup -from aurweb.models.package_keyword import PackageKeyword -from aurweb.models.package_notification import PackageNotification -from aurweb.models.package_vote import PackageVote -from aurweb.models.relation_type import CONFLICTS_ID, PROVIDES_ID, REPLACES_ID - - -class PackageSearch: - """A Package search query builder.""" - - # A constant mapping of short to full name sort orderings. - FULL_SORT_ORDER = {"d": "desc", "a": "asc"} - - def __init__(self, user: models.User = None): - self.query = db.query(Package).join(PackageBase) - - self.user = user - if self.user: - self.query = self.query.join( - PackageVote, - and_( - PackageVote.PackageBaseID == PackageBase.ID, - PackageVote.UsersID == self.user.ID, - ), - isouter=True, - ).join( - PackageNotification, - and_( - PackageNotification.PackageBaseID == PackageBase.ID, - PackageNotification.UserID == self.user.ID, - ), - isouter=True, - ) - - self.ordering = "d" - - # Setup SeB (Search By) callbacks. - self.search_by_cb = { - "nd": self._search_by_namedesc, - "n": self._search_by_name, - "b": self._search_by_pkgbase, - "N": self._search_by_exact_name, - "B": self._search_by_exact_pkgbase, - "k": self._search_by_keywords, - "m": self._search_by_maintainer, - "c": self._search_by_comaintainer, - "M": self._search_by_co_or_maintainer, - "s": self._search_by_submitter, - } - - # Setup SB (Sort By) callbacks. - self.sort_by_cb = { - "n": self._sort_by_name, - "v": self._sort_by_votes, - "p": self._sort_by_popularity, - "w": self._sort_by_voted, - "o": self._sort_by_notify, - "m": self._sort_by_maintainer, - "l": self._sort_by_last_modified, - } - - self._joined_user = False - self._joined_keywords = False - self._joined_comaint = False - - def _join_user(self, outer: bool = True) -> orm.Query: - """Centralized joining of a package base's maintainer.""" - if not self._joined_user: - self.query = self.query.join( - User, User.ID == PackageBase.MaintainerUID, isouter=outer - ) - self._joined_user = True - return self.query - - def _join_keywords(self) -> orm.Query: - if not self._joined_keywords: - self.query = self.query.join(PackageKeyword) - self._joined_keywords = True - return self.query - - def _join_comaint(self, isouter: bool = False) -> orm.Query: - if not self._joined_comaint: - self.query = self.query.join( - PackageComaintainer, - PackageComaintainer.PackageBaseID == PackageBase.ID, - isouter=isouter, - ) - self._joined_comaint = True - return self.query - - def _search_by_namedesc(self, keywords: str) -> orm.Query: - self._join_user() - self.query = self.query.filter( - or_( - Package.Name.like(f"%{keywords}%"), - Package.Description.like(f"%{keywords}%"), - ) - ) - return self - - def _search_by_name(self, keywords: str) -> orm.Query: - self._join_user() - self.query = self.query.filter(Package.Name.like(f"%{keywords}%")) - return self - - def _search_by_exact_name(self, keywords: str) -> orm.Query: - self._join_user() - self.query = self.query.filter(Package.Name == keywords) - return self - - def _search_by_pkgbase(self, keywords: str) -> orm.Query: - self._join_user() - self.query = self.query.filter(PackageBase.Name.like(f"%{keywords}%")) - - return self - - def _search_by_exact_pkgbase(self, keywords: str) -> orm.Query: - self._join_user() - self.query = self.query.filter(PackageBase.Name == keywords) - return self - - def _search_by_keywords(self, keywords: Set[str]) -> orm.Query: - self._join_user() - self._join_keywords() - keywords = set(k.lower() for k in keywords) - self.query = self.query.filter(PackageKeyword.Keyword.in_(keywords)).group_by( - models.Package.Name - ) - - return self - - def _search_by_maintainer(self, keywords: str) -> orm.Query: - self._join_user() - if keywords: - self.query = self.query.filter( - and_(User.Username == keywords, User.ID == PackageBase.MaintainerUID) - ) - else: - self.query = self.query.filter(PackageBase.MaintainerUID.is_(None)) - return self - - def _search_by_comaintainer(self, keywords: str) -> orm.Query: - self._join_user() - self._join_comaint() - user = db.query(User).filter(User.Username == keywords).first() - uid = 0 if not user else user.ID - self.query = self.query.filter(PackageComaintainer.UsersID == uid) - return self - - def _search_by_co_or_maintainer(self, keywords: str) -> orm.Query: - self._join_user() - self._join_comaint(True) - user = db.query(User).filter(User.Username == keywords).first() - uid = 0 if not user else user.ID - self.query = self.query.filter( - or_(PackageComaintainer.UsersID == uid, User.ID == uid) - ) - return self - - def _search_by_submitter(self, keywords: str) -> orm.Query: - self._join_user() - - uid = 0 - user = db.query(User).filter(User.Username == keywords).first() - if user: - uid = user.ID - - self.query = self.query.filter(PackageBase.SubmitterUID == uid) - return self - - def search_by(self, search_by: str, keywords: str) -> orm.Query: - if search_by not in self.search_by_cb: - search_by = "nd" # Default: Name, Description - callback = self.search_by_cb.get(search_by) - result = callback(keywords) - return result - - def _sort_by_name(self, order: str): - column = getattr(models.Package.Name, order) - self.query = self.query.order_by(column()) - return self - - def _sort_by_votes(self, order: str): - column = getattr(models.PackageBase.NumVotes, order) - name = getattr(models.PackageBase.Name, order) - self.query = self.query.order_by(column(), name()) - return self - - def _sort_by_popularity(self, order: str): - column = getattr(models.PackageBase.Popularity, order) - name = getattr(models.PackageBase.Name, order) - self.query = self.query.order_by(column(), name()) - return self - - def _sort_by_voted(self, order: str): - # FIXME: Currently, PHP is destroying this implementation - # in terms of performance. We should improve this; there's no - # reason it should take _longer_. - column = getattr( - case([(models.PackageVote.UsersID == self.user.ID, 1)], else_=0), order - ) - name = getattr(models.Package.Name, order) - self.query = self.query.order_by(column(), name()) - return self - - def _sort_by_notify(self, order: str): - # FIXME: Currently, PHP is destroying this implementation - # in terms of performance. We should improve this; there's no - # reason it should take _longer_. - column = getattr( - case([(models.PackageNotification.UserID == self.user.ID, 1)], else_=0), - order, - ) - name = getattr(models.Package.Name, order) - self.query = self.query.order_by(column(), name()) - return self - - def _sort_by_maintainer(self, order: str): - column = getattr(models.User.Username, order) - name = getattr(models.Package.Name, order) - self.query = self.query.order_by(column(), name()) - return self - - def _sort_by_last_modified(self, order: str): - column = getattr(models.PackageBase.ModifiedTS, order) - name = getattr(models.PackageBase.Name, order) - self.query = self.query.order_by(column(), name()) - return self - - def sort_by(self, sort_by: str, ordering: str = "d") -> orm.Query: - if sort_by not in self.sort_by_cb: - sort_by = "p" # Default: Popularity - callback = self.sort_by_cb.get(sort_by) - if ordering not in self.FULL_SORT_ORDER: - ordering = "d" # Default: Descending - ordering = self.FULL_SORT_ORDER.get(ordering) - return callback(ordering) - - def count(self) -> int: - """Return internal query's count.""" - return self.query.count() - - def results(self) -> orm.Query: - """Return internal query.""" - return self.query - - -class RPCSearch(PackageSearch): - """A PackageSearch-derived RPC package search query builder. - - With RPC search, we need a subset of PackageSearch's handlers, - with a few additional handlers added. So, within the RPCSearch - constructor, we pop unneeded keys out of inherited self.search_by_cb - and add a few more keys to it, namely: depends, makedepends, - optdepends and checkdepends. - - Additionally, some logic within the inherited PackageSearch.search_by - method is not needed, so it is overridden in this class without - sanitization done for the PackageSearch `by` argument. - """ - - keys_removed = ("b", "N", "B", "M") - - def __init__(self) -> "RPCSearch": - super().__init__() - - # Fix-up inherited search_by_cb to reflect RPC-specific by params. - # We keep: "nd", "n" and "m". We also overlay four new by params - # on top: "depends", "makedepends", "optdepends" and "checkdepends". - self.search_by_cb = { - k: v - for k, v in self.search_by_cb.items() - if k not in RPCSearch.keys_removed - } - self.search_by_cb.update( - { - "depends": self._search_by_depends, - "makedepends": self._search_by_makedepends, - "optdepends": self._search_by_optdepends, - "checkdepends": self._search_by_checkdepends, - "provides": self._search_by_provides, - "conflicts": self._search_by_conflicts, - "replaces": self._search_by_replaces, - "groups": self._search_by_groups, - } - ) - - # We always want an optional Maintainer in the RPC. - self._join_user() - - def _join_depends(self, dep_type_id: int) -> orm.Query: - """Join Package with PackageDependency and filter results - based on `dep_type_id`. - - :param dep_type_id: DependencyType ID - :returns: PackageDependency-joined orm.Query - """ - self.query = self.query.join(models.PackageDependency).filter( - models.PackageDependency.DepTypeID == dep_type_id - ) - return self.query - - def _join_relations(self, rel_type_id: int) -> orm.Query: - """Join Package with PackageRelation and filter results - based on `rel_type_id`. - - :param rel_type_id: RelationType ID - :returns: PackageRelation-joined orm.Query - """ - self.query = self.query.join(models.PackageRelation).filter( - models.PackageRelation.RelTypeID == rel_type_id - ) - return self.query - - def _join_groups(self) -> orm.Query: - """Join Package with PackageGroup and Group. - - :returns: PackageGroup/Group-joined orm.Query - """ - self.query = self.query.join(PackageGroup).join(Group) - return self.query - - def _search_by_depends(self, keywords: str) -> "RPCSearch": - self.query = self._join_depends(DEPENDS_ID).filter( - models.PackageDependency.DepName == keywords - ) - return self - - def _search_by_makedepends(self, keywords: str) -> "RPCSearch": - self.query = self._join_depends(MAKEDEPENDS_ID).filter( - models.PackageDependency.DepName == keywords - ) - return self - - def _search_by_optdepends(self, keywords: str) -> "RPCSearch": - self.query = self._join_depends(OPTDEPENDS_ID).filter( - models.PackageDependency.DepName == keywords - ) - return self - - def _search_by_checkdepends(self, keywords: str) -> "RPCSearch": - self.query = self._join_depends(CHECKDEPENDS_ID).filter( - models.PackageDependency.DepName == keywords - ) - return self - - def _search_by_provides(self, keywords: str) -> "RPCSearch": - self.query = self._join_relations(PROVIDES_ID).filter( - models.PackageRelation.RelName == keywords - ) - return self - - def _search_by_conflicts(self, keywords: str) -> "RPCSearch": - self.query = self._join_relations(CONFLICTS_ID).filter( - models.PackageRelation.RelName == keywords - ) - return self - - def _search_by_replaces(self, keywords: str) -> "RPCSearch": - self.query = self._join_relations(REPLACES_ID).filter( - models.PackageRelation.RelName == keywords - ) - return self - - def _search_by_groups(self, keywords: str) -> "RPCSearch": - self._join_groups() - self.query = self.query.filter(Group.Name == keywords) - return self - - def _search_by_keywords(self, keywords: str) -> "RPCSearch": - self._join_keywords() - self.query = self.query.filter(PackageKeyword.Keyword == keywords) - return self - - def search_by(self, by: str, keywords: str) -> "RPCSearch": - """Override inherited search_by. In this override, we reduce the - scope of what we handle within this function. We do not set `by` - to a default of "nd" in the RPC, as the RPC returns an error when - incorrect `by` fields are specified. - - :param by: RPC `by` argument - :param keywords: RPC `arg` argument - :returns: self - """ - callback = self.search_by_cb.get(by) - result = callback(keywords) - return result - - def results(self) -> orm.Query: - return self.query diff --git a/aurweb/packages/util.py b/aurweb/packages/util.py deleted file mode 100644 index a2c6cbaa..00000000 --- a/aurweb/packages/util.py +++ /dev/null @@ -1,253 +0,0 @@ -from collections import defaultdict -from http import HTTPStatus -from typing import Tuple, Union -from urllib.parse import quote_plus - -import orjson -from fastapi import HTTPException -from sqlalchemy import orm - -from aurweb import config, db, models -from aurweb.aur_redis import redis_connection -from aurweb.models import Package -from aurweb.models.official_provider import OFFICIAL_BASE, OfficialProvider -from aurweb.models.package_dependency import PackageDependency -from aurweb.models.package_relation import PackageRelation -from aurweb.templates import register_filter - -Providers = list[Union[PackageRelation, OfficialProvider]] - - -def dep_extra_with_arch(dep: models.PackageDependency, annotation: str) -> str: - output = [annotation] - if dep.DepArch: - output.append(dep.DepArch) - return f"({', '.join(output)})" - - -def dep_depends_extra(dep: models.PackageDependency) -> str: - return str() - - -def dep_makedepends_extra(dep: models.PackageDependency) -> str: - return dep_extra_with_arch(dep, "make") - - -def dep_checkdepends_extra(dep: models.PackageDependency) -> str: - return dep_extra_with_arch(dep, "check") - - -def dep_optdepends_extra(dep: models.PackageDependency) -> str: - return dep_extra_with_arch(dep, "optional") - - -@register_filter("dep_extra") -def dep_extra(dep: models.PackageDependency) -> str: - """Some dependency types have extra text added to their - display. This function provides that output. However, it - **assumes** that the dep passed is bound to a valid one - of: depends, makedepends, checkdepends or optdepends.""" - f = globals().get(f"dep_{dep.DependencyType.Name}_extra") - return f(dep) - - -@register_filter("dep_extra_desc") -def dep_extra_desc(dep: models.PackageDependency) -> str: - extra = dep_extra(dep) - if not dep.DepDesc: - return extra - return extra + f" – {dep.DepDesc}" - - -@register_filter("pkgname_link") -def pkgname_link(pkgname: str) -> str: - record = db.query(Package).filter(Package.Name == pkgname).exists() - if db.query(record).scalar(): - return f"/packages/{pkgname}" - - official = ( - db.query(OfficialProvider).filter(OfficialProvider.Name == pkgname).exists() - ) - if db.query(official).scalar(): - base = "/".join([OFFICIAL_BASE, "packages"]) - return f"{base}/?q={pkgname}" - - -@register_filter("package_link") -def package_link(package: Union[Package, OfficialProvider]) -> str: - if package.is_official: - base = "/".join([OFFICIAL_BASE, "packages"]) - return f"{base}/?q={package.Name}" - return f"/packages/{package.Name}" - - -@register_filter("provides_markup") -def provides_markup(provides: Providers) -> str: - links = [] - for pkg in provides: - aur = "AUR" if not pkg.is_official else "" - links.append(f'{pkg.Name}{aur}') - return ", ".join(links) - - -def get_pkg_or_base( - name: str, cls: Union[models.Package, models.PackageBase] = models.PackageBase -) -> Union[models.Package, models.PackageBase]: - """Get a PackageBase instance by its name or raise a 404 if - it can't be found in the database. - - :param name: {Package,PackageBase}.Name - :param exception: Whether to raise an HTTPException or simply return None if - the package can't be found. - :raises HTTPException: With status code 404 if record doesn't exist - :return: {Package,PackageBase} instance - """ - instance = db.query(cls).filter(cls.Name == name).first() - if not instance: - raise HTTPException(status_code=HTTPStatus.NOT_FOUND) - return instance - - -def get_pkgbase_comment(pkgbase: models.PackageBase, id: int) -> models.PackageComment: - comment = pkgbase.comments.filter(models.PackageComment.ID == id).first() - if not comment: - raise HTTPException(status_code=HTTPStatus.NOT_FOUND) - return db.refresh(comment) - - -@register_filter("out_of_date") -def out_of_date(packages: orm.Query) -> orm.Query: - return packages.filter(models.PackageBase.OutOfDateTS.isnot(None)) - - -def updated_packages(limit: int = 0, cache_ttl: int = 600) -> list[models.Package]: - """Return a list of valid Package objects ordered by their - ModifiedTS column in descending order from cache, after setting - the cache when no key yet exists. - - :param limit: Optional record limit - :param cache_ttl: Cache expiration time (in seconds) - :return: A list of Packages - """ - redis = redis_connection() - packages = redis.get("package_updates") - if packages: - # If we already have a cache, deserialize it and return. - return orjson.loads(packages) - - query = ( - db.query(models.Package) - .join(models.PackageBase) - .order_by(models.PackageBase.ModifiedTS.desc()) - ) - - if limit: - query = query.limit(limit) - - packages = [] - for pkg in query: - # For each Package returned by the query, append a dict - # containing Package columns we're interested in. - packages.append( - { - "Name": pkg.Name, - "Version": pkg.Version, - "PackageBase": {"ModifiedTS": pkg.PackageBase.ModifiedTS}, - } - ) - - # Store the JSON serialization of the package_updates key into Redis. - redis.set("package_updates", orjson.dumps(packages)) - redis.expire("package_updates", cache_ttl) - - # Return the deserialized list of packages. - return packages - - -def query_voted(query: list[models.Package], user: models.User) -> dict[int, bool]: - """Produce a dictionary of package base ID keys to boolean values, - which indicate whether or not the package base has a vote record - related to user. - - :param query: A collection of Package models - :param user: The user that is being notified or not - :return: Vote state dict (PackageBase.ID: int -> bool) - """ - output = defaultdict(bool) - query_set = {pkg.PackageBaseID for pkg in query} - voted = ( - db.query(models.PackageVote) - .join(models.PackageBase, models.PackageBase.ID.in_(query_set)) - .filter(models.PackageVote.UsersID == user.ID) - ) - for vote in voted: - output[vote.PackageBase.ID] = True - return output - - -def query_notified(query: list[models.Package], user: models.User) -> dict[int, bool]: - """Produce a dictionary of package base ID keys to boolean values, - which indicate whether or not the package base has a notification - record related to user. - - :param query: A collection of Package models - :param user: The user that is being notified or not - :return: Notification state dict (PackageBase.ID: int -> bool) - """ - output = defaultdict(bool) - query_set = {pkg.PackageBaseID for pkg in query} - notified = ( - db.query(models.PackageNotification) - .join(models.PackageBase, models.PackageBase.ID.in_(query_set)) - .filter(models.PackageNotification.UserID == user.ID) - ) - for notif in notified: - output[notif.PackageBase.ID] = True - return output - - -def pkg_required(pkgname: str, provides: list[str]) -> list[PackageDependency]: - """ - Get dependencies that match a string in `[pkgname] + provides`. - - :param pkgname: Package.Name - :param provides: List of PackageRelation.Name - :param limit: Maximum number of dependencies to query - :return: List of PackageDependency instances - """ - targets = set([pkgname] + provides) - query = ( - db.query(PackageDependency) - .join(Package) - .options(orm.contains_eager(PackageDependency.Package)) - .filter(PackageDependency.DepName.in_(targets)) - .order_by(Package.Name.asc()) - ) - return query - - -@register_filter("source_uri") -def source_uri(pkgsrc: models.PackageSource) -> Tuple[str, str]: - """ - Produce a (text, uri) tuple out of `pkgsrc`. - - In this filter, we cover various cases: - 1. If "::" is anywhere in the Source column, split the string, - which should produce a (text, uri), where text is before "::" - and uri is after "::". - 2. Otherwise, if "://" is anywhere in the Source column, it's just - some sort of URI, which we'll return varbatim as both text and uri. - 3. Otherwise, we'll return a path to the source file in a uri produced - out of options.source_file_uri formatted with the source file and - the package base name. - - :param pkgsrc: PackageSource instance - :return text, uri)tuple - """ - if "::" in pkgsrc.Source: - return pkgsrc.Source.split("::", 1) - elif "://" in pkgsrc.Source: - return pkgsrc.Source, pkgsrc.Source - path = config.get("options", "source_file_uri") - pkgbasename = quote_plus(pkgsrc.Package.PackageBase.Name) - return pkgsrc.Source, path % (pkgsrc.Source, pkgbasename) diff --git a/aurweb/pkgbase/__init__.py b/aurweb/pkgbase/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aurweb/pkgbase/actions.py b/aurweb/pkgbase/actions.py deleted file mode 100644 index d2471d8d..00000000 --- a/aurweb/pkgbase/actions.py +++ /dev/null @@ -1,195 +0,0 @@ -from fastapi import Request - -from aurweb import aur_logging, db, util -from aurweb.auth import creds -from aurweb.models import PackageBase, User -from aurweb.models.package_comaintainer import PackageComaintainer -from aurweb.models.package_notification import PackageNotification -from aurweb.models.request_type import DELETION_ID, MERGE_ID, ORPHAN_ID -from aurweb.packages.requests import handle_request, update_closure_comment -from aurweb.pkgbase import util as pkgbaseutil -from aurweb.scripts import notify, popupdate - -logger = aur_logging.get_logger(__name__) - - -@db.retry_deadlock -def _retry_notify(user: User, pkgbase: PackageBase) -> None: - with db.begin(): - db.create(PackageNotification, PackageBase=pkgbase, User=user) - - -def pkgbase_notify_instance(request: Request, pkgbase: PackageBase) -> None: - notif = db.query( - pkgbase.notifications.filter( - PackageNotification.UserID == request.user.ID - ).exists() - ).scalar() - has_cred = request.user.has_credential(creds.PKGBASE_NOTIFY) - if has_cred and not notif: - _retry_notify(request.user, pkgbase) - - -@db.retry_deadlock -def _retry_unnotify(notif: PackageNotification, pkgbase: PackageBase) -> None: - with db.begin(): - db.delete(notif) - - -def pkgbase_unnotify_instance(request: Request, pkgbase: PackageBase) -> None: - notif = pkgbase.notifications.filter( - PackageNotification.UserID == request.user.ID - ).first() - has_cred = request.user.has_credential(creds.PKGBASE_NOTIFY) - if has_cred and notif: - _retry_unnotify(notif, pkgbase) - - -@db.retry_deadlock -def _retry_unflag(pkgbase: PackageBase) -> None: - with db.begin(): - pkgbase.OutOfDateTS = None - pkgbase.Flagger = None - pkgbase.FlaggerComment = str() - - -def pkgbase_unflag_instance(request: Request, pkgbase: PackageBase) -> None: - has_cred = request.user.has_credential( - creds.PKGBASE_UNFLAG, - approved=[pkgbase.Flagger, pkgbase.Maintainer] - + [c.User for c in pkgbase.comaintainers], - ) - if has_cred: - _retry_unflag(pkgbase) - - -@db.retry_deadlock -def _retry_disown(request: Request, pkgbase: PackageBase): - notifs: list[notify.Notification] = [] - - is_maint = request.user == pkgbase.Maintainer - - comaint = pkgbase.comaintainers.filter( - PackageComaintainer.User == request.user - ).one_or_none() - is_comaint = comaint is not None - - if is_maint: - with db.begin(): - # Comaintainer with the lowest Priority value; next-in-line. - prio_comaint = pkgbase.comaintainers.order_by( - PackageComaintainer.Priority.asc() - ).first() - if prio_comaint: - # If there is such a comaintainer, promote them to maint. - pkgbase.Maintainer = prio_comaint.User - notifs.append(pkgbaseutil.remove_comaintainer(prio_comaint)) - else: - # Otherwise, just orphan the package completely. - pkgbase.Maintainer = None - elif is_comaint: - # This disown request is from a Comaintainer - with db.begin(): - notif = pkgbaseutil.remove_comaintainer(comaint) - notifs.append(notif) - elif request.user.has_credential(creds.PKGBASE_DISOWN): - # Otherwise, the request user performing this disownage is a - # Package Maintainer and we treat it like a standard orphan request. - notifs += handle_request(request, ORPHAN_ID, pkgbase) - with db.begin(): - pkgbase.Maintainer = None - db.delete_all(pkgbase.comaintainers) - - return notifs - - -def pkgbase_disown_instance(request: Request, pkgbase: PackageBase) -> None: - disowner = request.user - notifs = [notify.DisownNotification(disowner.ID, pkgbase.ID)] - notifs += _retry_disown(request, pkgbase) - util.apply_all(notifs, lambda n: n.send()) - - -@db.retry_deadlock -def _retry_adopt(request: Request, pkgbase: PackageBase) -> None: - with db.begin(): - pkgbase.Maintainer = request.user - - -def pkgbase_adopt_instance(request: Request, pkgbase: PackageBase) -> None: - _retry_adopt(request, pkgbase) - notif = notify.AdoptNotification(request.user.ID, pkgbase.ID) - notif.send() - - -@db.retry_deadlock -def _retry_delete(pkgbase: PackageBase, comments: str) -> None: - with db.begin(): - update_closure_comment(pkgbase, DELETION_ID, comments) - db.delete(pkgbase) - - -def pkgbase_delete_instance( - request: Request, pkgbase: PackageBase, comments: str = str() -) -> list[notify.Notification]: - notif = notify.DeleteNotification(request.user.ID, pkgbase.ID) - notifs = handle_request(request, DELETION_ID, pkgbase, comments=comments) + [notif] - - _retry_delete(pkgbase, comments) - - return notifs - - -@db.retry_deadlock -def _retry_merge(pkgbase: PackageBase, target: PackageBase) -> None: - # Target votes and notifications sets of user IDs that are - # looking to be migrated. - target_votes = set(v.UsersID for v in target.package_votes) - target_notifs = set(n.UserID for n in target.notifications) - - with db.begin(): - # Merge pkgbase's comments. - for comment in pkgbase.comments: - comment.PackageBase = target - - # Merge notifications that don't yet exist in the target. - for notif in pkgbase.notifications: - if notif.UserID not in target_notifs: - notif.PackageBase = target - - # Merge votes that don't yet exist in the target. - for vote in pkgbase.package_votes: - if vote.UsersID not in target_votes: - vote.PackageBase = target - - # Run popupdate. - popupdate.run_single(target) - - with db.begin(): - # Delete pkgbase and its packages now that everything's merged. - for pkg in pkgbase.packages: - db.delete(pkg) - db.delete(pkgbase) - - -def pkgbase_merge_instance( - request: Request, - pkgbase: PackageBase, - target: PackageBase, - comments: str = str(), -) -> None: - pkgbasename = str(pkgbase.Name) - - # Create notifications. - notifs = handle_request(request, MERGE_ID, pkgbase, target, comments) - - _retry_merge(pkgbase, target) - - # Log this out for accountability purposes. - logger.info( - f"Package Maintainer '{request.user.Username}' merged " - f"'{pkgbasename}' into '{target.Name}'." - ) - - # Send notifications. - util.apply_all(notifs, lambda n: n.send()) diff --git a/aurweb/pkgbase/util.py b/aurweb/pkgbase/util.py deleted file mode 100644 index d3c2f35c..00000000 --- a/aurweb/pkgbase/util.py +++ /dev/null @@ -1,246 +0,0 @@ -from typing import Any - -from fastapi import Request -from sqlalchemy import and_ -from sqlalchemy.orm import joinedload - -from aurweb import config, db, defaults, l10n, time, util -from aurweb.models import PackageBase, User -from aurweb.models.package_base import popularity -from aurweb.models.package_comaintainer import PackageComaintainer -from aurweb.models.package_comment import PackageComment -from aurweb.models.package_request import PENDING_ID, PackageRequest -from aurweb.models.package_vote import PackageVote -from aurweb.scripts import notify -from aurweb.templates import make_context as _make_context - - -def make_context( - request: Request, pkgbase: PackageBase, context: dict[str, Any] = None -) -> dict[str, Any]: - """Make a basic context for package or pkgbase. - - :param request: FastAPI request - :param pkgbase: PackageBase instance - :return: A pkgbase context without specific differences - """ - if not context: - context = _make_context(request, pkgbase.Name) - - is_authenticated = request.user.is_authenticated() - - # Per page and offset. - offset, per_page = util.sanitize_params( - request.query_params.get("O", defaults.O), - request.query_params.get("PP", defaults.COMMENTS_PER_PAGE), - ) - context["O"] = offset - context["PP"] = per_page - context["git_clone_uri_anon"] = config.get("options", "git_clone_uri_anon") - context["git_clone_uri_priv"] = config.get("options", "git_clone_uri_priv") - context["pkgbase"] = pkgbase - context["comaintainers"] = [ - c.User - for c in pkgbase.comaintainers.options(joinedload(PackageComaintainer.User)) - .order_by(PackageComaintainer.Priority.asc()) - .all() - ] - if is_authenticated: - context["unflaggers"] = context["comaintainers"].copy() - context["unflaggers"].extend([pkgbase.Maintainer, pkgbase.Flagger]) - else: - context["unflaggers"] = [] - - context["packages_count"] = pkgbase.packages.count() - context["keywords"] = pkgbase.keywords - context["comments_total"] = pkgbase.comments.order_by( - PackageComment.CommentTS.desc() - ).count() - context["comments"] = ( - pkgbase.comments.order_by(PackageComment.CommentTS.desc()) - .limit(per_page) - .offset(offset) - ) - context["pinned_comments"] = pkgbase.comments.filter( - PackageComment.PinnedTS != 0 - ).order_by(PackageComment.CommentTS.desc()) - - context["is_maintainer"] = bool(request.user == pkgbase.Maintainer) - if is_authenticated: - context["notified"] = request.user.notified(pkgbase) - else: - context["notified"] = False - - context["out_of_date"] = bool(pkgbase.OutOfDateTS) - - if is_authenticated: - context["voted"] = db.query( - request.user.package_votes.filter( - PackageVote.PackageBaseID == pkgbase.ID - ).exists() - ).scalar() - else: - context["voted"] = False - - if is_authenticated: - context["requests"] = pkgbase.requests.filter( - and_(PackageRequest.Status == PENDING_ID, PackageRequest.ClosedTS.is_(None)) - ).count() - else: - context["requests"] = [] - - context["popularity"] = popularity(pkgbase, time.utcnow()) - - return context - - -def remove_comaintainer( - comaint: PackageComaintainer, -) -> notify.ComaintainerRemoveNotification: - """ - Remove a PackageComaintainer. - - This function does *not* begin any database transaction and - must be used **within** a database transaction, e.g.: - - with db.begin(): - remove_comaintainer(comaint) - - :param comaint: Target PackageComaintainer to be deleted - :return: ComaintainerRemoveNotification - """ - pkgbase = comaint.PackageBase - notif = notify.ComaintainerRemoveNotification(comaint.User.ID, pkgbase.ID) - db.delete(comaint) - rotate_comaintainers(pkgbase) - return notif - - -@db.retry_deadlock -def remove_comaintainers(pkgbase: PackageBase, usernames: list[str]) -> None: - """ - Remove comaintainers from `pkgbase`. - - :param pkgbase: PackageBase instance - :param usernames: Iterable of username strings - """ - notifications = [] - with db.begin(): - comaintainers = ( - pkgbase.comaintainers.join(User).filter(User.Username.in_(usernames)).all() - ) - notifications = [ - notify.ComaintainerRemoveNotification(co.User.ID, pkgbase.ID) - for co in comaintainers - ] - db.delete_all(comaintainers) - - # Rotate comaintainer priority values. - with db.begin(): - rotate_comaintainers(pkgbase) - - # Send out notifications. - util.apply_all(notifications, lambda n: n.send()) - - -def latest_priority(pkgbase: PackageBase) -> int: - """ - Return the highest Priority column related to `pkgbase`. - - :param pkgbase: PackageBase instance - :return: Highest Priority found or 0 if no records exist - """ - - # Order comaintainers related to pkgbase by Priority DESC. - record = pkgbase.comaintainers.order_by(PackageComaintainer.Priority.desc()).first() - - # Use Priority column if record exists, otherwise 0. - return record.Priority if record else 0 - - -class NoopComaintainerNotification: - """A noop notification stub used as an error-state return value.""" - - def send(self) -> None: - """noop""" - return - - -@db.retry_deadlock -def add_comaintainer( - pkgbase: PackageBase, comaintainer: User -) -> notify.ComaintainerAddNotification: - """ - Add a new comaintainer to `pkgbase`. - - :param pkgbase: PackageBase instance - :param comaintainer: User instance used for new comaintainer record - :return: ComaintainerAddNotification - """ - # Skip given `comaintainers` who are already maintainer. - if pkgbase.Maintainer == comaintainer: - return NoopComaintainerNotification() - - # Priority for the new comaintainer is +1 more than the highest. - new_prio = latest_priority(pkgbase) + 1 - - with db.begin(): - db.create( - PackageComaintainer, - PackageBase=pkgbase, - User=comaintainer, - Priority=new_prio, - ) - - return notify.ComaintainerAddNotification(comaintainer.ID, pkgbase.ID) - - -def add_comaintainers( - request: Request, pkgbase: PackageBase, usernames: list[str] -) -> None: - """ - Add comaintainers to `pkgbase`. - - :param request: FastAPI request - :param pkgbase: PackageBase instance - :param usernames: Iterable of username strings - :return: Error string on failure else None - """ - # For each username in usernames, perform validation of the username - # and append the User record to `users` if no errors occur. - users = [] - for username in usernames: - user = db.query(User).filter(User.Username == username).first() - if not user: - _ = l10n.get_translator_for_request(request) - return _("Invalid user name: %s") % username - users.append(user) - - notifications = [] - - def add_comaint(user: User): - nonlocal notifications - # Populate `notifications` with add_comaintainer's return value, - # which is a ComaintainerAddNotification. - notifications.append(add_comaintainer(pkgbase, user)) - - # Move along: add all `users` as new `pkgbase` comaintainers. - util.apply_all(users, add_comaint) - - # Send out notifications. - util.apply_all(notifications, lambda n: n.send()) - - -def rotate_comaintainers(pkgbase: PackageBase) -> None: - """ - Rotate `pkgbase` comaintainers. - - This function resets the Priority column of all PackageComaintainer - instances related to `pkgbase` to seqential 1 .. n values with - persisted order. - - :param pkgbase: PackageBase instance - """ - comaintainers = pkgbase.comaintainers.order_by(PackageComaintainer.Priority.asc()) - for i, comaint in enumerate(comaintainers): - comaint.Priority = i + 1 diff --git a/aurweb/pkgbase/validate.py b/aurweb/pkgbase/validate.py deleted file mode 100644 index b76e1a38..00000000 --- a/aurweb/pkgbase/validate.py +++ /dev/null @@ -1,55 +0,0 @@ -from http import HTTPStatus -from typing import Any - -from fastapi import HTTPException - -from aurweb import config, db -from aurweb.exceptions import ValidationError -from aurweb.models import PackageBase - - -def request( - pkgbase: PackageBase, - type: str, - comments: str, - merge_into: str, - context: dict[str, Any], -) -> None: - # validate comment - comment(comments) - - if type == "merge": - # Perform merge-related checks. - if not merge_into: - # TODO: This error needs to be translated. - raise ValidationError(['The "Merge into" field must not be empty.']) - - target = db.query(PackageBase).filter(PackageBase.Name == merge_into).first() - if not target: - # TODO: This error needs to be translated. - raise ValidationError( - ["The package base you want to merge into does not exist."] - ) - - db.refresh(target) - if target.ID == pkgbase.ID: - # TODO: This error needs to be translated. - raise ValidationError(["You cannot merge a package base into itself."]) - - -def comment(comment: str): - if not comment: - raise ValidationError(["The comment field must not be empty."]) - - if len(comment) > config.getint("options", "max_chars_comment", 5000): - raise ValidationError(["Maximum number of characters for comment exceeded."]) - - -def comment_raise_http_ex(comments: str): - try: - comment(comments) - except ValidationError as err: - raise HTTPException( - status_code=HTTPStatus.BAD_REQUEST, - detail=err.data[0], - ) diff --git a/aurweb/prometheus.py b/aurweb/prometheus.py deleted file mode 100644 index 40b99a90..00000000 --- a/aurweb/prometheus.py +++ /dev/null @@ -1,143 +0,0 @@ -from typing import Any, Callable, Optional - -from prometheus_client import Counter, Gauge -from prometheus_fastapi_instrumentator import Instrumentator -from prometheus_fastapi_instrumentator.metrics import Info -from starlette.routing import Match, Route - -from aurweb import aur_logging - -logger = aur_logging.get_logger(__name__) -_instrumentator = Instrumentator() - - -# Custom metrics -SEARCH_REQUESTS = Counter( - "aur_search_requests", "Number of search requests by cache hit/miss", ["cache"] -) -USERS = Gauge( - "aur_users", "Number of AUR users by type", ["type"], multiprocess_mode="livemax" -) -PACKAGES = Gauge( - "aur_packages", - "Number of AUR packages by state", - ["state"], - multiprocess_mode="livemax", -) -REQUESTS = Gauge( - "aur_requests", - "Number of AUR requests by type and status", - ["type", "status"], - multiprocess_mode="livemax", -) - - -def instrumentator(): - return _instrumentator - - -# FastAPI metrics -# Taken from https://github.com/stephenhillier/starlette_exporter -# Their license is included in LICENSES/starlette_exporter. -# The code has been modified to remove child route checks -# (since we don't have any) and to stay within an 80-width limit. -def get_matching_route_path( - scope: dict[Any, Any], routes: list[Route], route_name: Optional[str] = None -) -> str: - """ - Find a matching route and return its original path string - - Will attempt to enter mounted routes and subrouters. - - Credit to https://github.com/elastic/apm-agent-python - - """ - for route in routes: - match, child_scope = route.matches(scope) - if match == Match.FULL: - route_name = route.path - - """ - # This path exists in the original function's code, but we - # don't need it (currently), so it's been removed to avoid - # useless test coverage. - child_scope = {**scope, **child_scope} - if isinstance(route, Mount) and route.routes: - child_route_name = get_matching_route_path(child_scope, - route.routes, - route_name) - if child_route_name is None: - route_name = None - else: - route_name += child_route_name - """ - - return route_name - elif match == Match.PARTIAL and route_name is None: - route_name = route.path - - -def http_requests_total() -> Callable[[Info], None]: - metric = Counter( - "http_requests_total", - "Number of HTTP requests.", - labelnames=("method", "path", "status"), - ) - - def instrumentation(info: Info) -> None: - if info.request.method.lower() in ("head", "options"): # pragma: no cover - return - - scope = info.request.scope - - # Taken from https://github.com/stephenhillier/starlette_exporter - # Their license is included at LICENSES/starlette_exporter. - # The code has been slightly modified: we no longer catch - # exceptions; we expect this collector to always succeed. - # Failures in this collector shall cause test failures. - if not (scope.get("endpoint", None) and scope.get("router", None)): - return None - - root_path = scope.get("root_path", str()) - app = scope.get("app", dict()) - - if hasattr(app, "root_path"): - app_root_path = getattr(app, "root_path") - if root_path.startswith(app_root_path): - root_path = root_path[len(app_root_path) :] - - base_scope = { - "type": scope.get("type"), - "path": root_path + scope.get("path"), - "path_params": scope.get("path_params", {}), - "method": scope.get("method"), - } - - method = scope.get("method") - path = get_matching_route_path(base_scope, scope.get("router").routes) - - if info.response: - status = str(int(info.response.status_code))[:1] + "xx" - metric.labels(method=method, path=path, status=status).inc() - - return instrumentation - - -def http_api_requests_total() -> Callable[[Info], None]: - metric = Counter( - "http_api_requests", - "Number of times an RPC API type has been requested.", - labelnames=("type", "status"), - ) - - def instrumentation(info: Info) -> None: - if info.request.method.lower() in ("head", "options"): # pragma: no cover - return - - if info.request.url.path.rstrip("/") == "/rpc": - type = info.request.query_params.get("type", "None") - if info.response: - status = str(info.response.status_code)[:1] + "xx" - metric.labels(type=type, status=status).inc() - - return instrumentation diff --git a/aurweb/ratelimit.py b/aurweb/ratelimit.py deleted file mode 100644 index 060f8dcb..00000000 --- a/aurweb/ratelimit.py +++ /dev/null @@ -1,117 +0,0 @@ -from fastapi import Request -from redis.client import Pipeline - -from aurweb import aur_logging, config, db, time -from aurweb.aur_redis import redis_connection -from aurweb.models import ApiRateLimit -from aurweb.util import get_client_ip - -logger = aur_logging.get_logger(__name__) - - -def _update_ratelimit_redis(request: Request, pipeline: Pipeline): - window_length = config.getint("ratelimit", "window_length") - now = time.utcnow() - time_to_delete = now - window_length - - host = get_client_ip(request) - window_key = f"ratelimit-ws:{host}" - requests_key = f"ratelimit:{host}" - - pipeline.get(window_key) - window = pipeline.execute()[0] - - if not window or int(window.decode()) < time_to_delete: - pipeline.set(window_key, now) - pipeline.expire(window_key, window_length) - - pipeline.set(requests_key, 1) - pipeline.expire(requests_key, window_length) - - pipeline.execute() - else: - pipeline.incr(requests_key) - pipeline.execute() - - -def _update_ratelimit_db(request: Request): - window_length = config.getint("ratelimit", "window_length") - now = time.utcnow() - time_to_delete = now - window_length - - @db.retry_deadlock - def retry_delete(records: list[ApiRateLimit]) -> None: - with db.begin(): - db.delete_all(records) - - records = db.query(ApiRateLimit).filter(ApiRateLimit.WindowStart < time_to_delete) - retry_delete(records) - - @db.retry_deadlock - def retry_create(record: ApiRateLimit, now: int, host: str) -> ApiRateLimit: - with db.begin(): - if not record: - record = db.create(ApiRateLimit, WindowStart=now, IP=host, Requests=1) - else: - record.Requests += 1 - return record - - host = get_client_ip(request) - record = db.query(ApiRateLimit, ApiRateLimit.IP == host).first() - record = retry_create(record, now, host) - - logger.debug(record.Requests) - return record - - -def update_ratelimit(request: Request, pipeline: Pipeline): - """Update the ratelimit stored in Redis or the database depending - on AUR_CONFIG's [options] cache setting. - - This Redis-capable function is slightly different than most. If Redis - is not configured to use a real server, this function instead uses - the database to persist tracking of a particular host. - - :param request: FastAPI request - :param pipeline: redis.client.Pipeline - :returns: ApiRateLimit record when Redis cache is not configured, else None - """ - if config.getboolean("ratelimit", "cache"): - return _update_ratelimit_redis(request, pipeline) - return _update_ratelimit_db(request) - - -def check_ratelimit(request: Request): - """Increment and check to see if request has exceeded their rate limit. - - :param request: FastAPI request - :returns: True if the request host has exceeded the rate limit else False - """ - redis = redis_connection() - pipeline = redis.pipeline() - - record = update_ratelimit(request, pipeline) - - # Get cache value, else None. - host = get_client_ip(request) - pipeline.get(f"ratelimit:{host}") - requests = pipeline.execute()[0] - - # Take into account the split paths. When Redis is used, a - # valid cache value will be returned which must be converted - # to an int. Otherwise, use the database record returned - # by update_ratelimit. - if not config.getboolean("ratelimit", "cache") or requests is None: - # If we got nothing from pipeline.get, we did not use - # the Redis path of logic: use the DB record's count. - requests = record.Requests - else: - # Otherwise, just case Redis results over to an int. - requests = int(requests.decode()) - - limit = config.getint("ratelimit", "request_limit") - exceeded_ratelimit = requests > limit - if exceeded_ratelimit: - logger.debug(f"{host} has exceeded the ratelimit.") - - return exceeded_ratelimit diff --git a/aurweb/requests/__init__.py b/aurweb/requests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aurweb/requests/util.py b/aurweb/requests/util.py deleted file mode 100644 index 97c3447e..00000000 --- a/aurweb/requests/util.py +++ /dev/null @@ -1,13 +0,0 @@ -from http import HTTPStatus - -from fastapi import HTTPException - -from aurweb import db -from aurweb.models import PackageRequest - - -def get_pkgreq_by_id(id: int) -> PackageRequest: - pkgreq = db.query(PackageRequest).filter(PackageRequest.ID == id).first() - if not pkgreq: - raise HTTPException(status_code=HTTPStatus.NOT_FOUND) - return db.refresh(pkgreq) diff --git a/aurweb/routers/__init__.py b/aurweb/routers/__init__.py deleted file mode 100644 index 552d8c28..00000000 --- a/aurweb/routers/__init__.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -API routers for FastAPI. - -See https://fastapi.tiangolo.com/tutorial/bigger-applications/ -""" - -from . import ( - accounts, - auth, - html, - package_maintainer, - packages, - pkgbase, - requests, - rpc, - rss, - sso, -) - -""" -aurweb application routes. This constant can be any iterable -and each element must have a .router attribute which points -to a fastapi.APIRouter. -""" -APP_ROUTES = [ - accounts, - auth, - html, - packages, - pkgbase, - requests, - package_maintainer, - rss, - rpc, - sso, -] diff --git a/aurweb/routers/accounts.py b/aurweb/routers/accounts.py deleted file mode 100644 index a2d167bc..00000000 --- a/aurweb/routers/accounts.py +++ /dev/null @@ -1,776 +0,0 @@ -import copy -import typing -from http import HTTPStatus -from typing import Any - -from fastapi import APIRouter, Form, HTTPException, Request -from fastapi.responses import HTMLResponse, RedirectResponse -from sqlalchemy import and_, or_ - -import aurweb.config -from aurweb import aur_logging, db, l10n, models, util -from aurweb.auth import account_type_required, creds, requires_auth, requires_guest -from aurweb.captcha import get_captcha_salts -from aurweb.exceptions import ValidationError, handle_form_exceptions -from aurweb.l10n import get_translator_for_request -from aurweb.models import account_type as at -from aurweb.models.ssh_pub_key import get_fingerprint -from aurweb.models.user import generate_resetkey -from aurweb.scripts.notify import ResetKeyNotification, WelcomeNotification -from aurweb.templates import make_context, make_variable_context, render_template -from aurweb.users import update, validate -from aurweb.users.util import get_user_by_name - -router = APIRouter() -logger = aur_logging.get_logger(__name__) - - -@router.get("/passreset", response_class=HTMLResponse) -@requires_guest -async def passreset(request: Request): - context = await make_variable_context(request, "Password Reset") - return render_template(request, "passreset.html", context) - - -@db.async_retry_deadlock -@router.post("/passreset", response_class=HTMLResponse) -@handle_form_exceptions -@requires_guest -async def passreset_post( - request: Request, - user: str = Form(...), - resetkey: str = Form(default=None), - password: str = Form(default=None), - confirm: str = Form(default=None), -): - context = await make_variable_context(request, "Password Reset") - - # The user parameter being required, we can match against - criteria = or_(models.User.Username == user, models.User.Email == user) - db_user = db.query(models.User, and_(criteria, models.User.Suspended == 0)).first() - if db_user is None: - context["errors"] = ["Invalid e-mail."] - return render_template( - request, "passreset.html", context, status_code=HTTPStatus.NOT_FOUND - ) - - db.refresh(db_user) - if resetkey: - context["resetkey"] = resetkey - - if not db_user.ResetKey or resetkey != db_user.ResetKey: - context["errors"] = ["Invalid e-mail."] - return render_template( - request, "passreset.html", context, status_code=HTTPStatus.NOT_FOUND - ) - - if not user or not password: - context["errors"] = ["Missing a required field."] - return render_template( - request, "passreset.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - if password != confirm: - # If the provided password does not match the provided confirm. - context["errors"] = ["Password fields do not match."] - return render_template( - request, "passreset.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - if len(password) < models.User.minimum_passwd_length(): - # Translate the error here, which simplifies error output - # in the jinja2 template. - _ = get_translator_for_request(request) - context["errors"] = [ - _("Your password must be at least %s characters.") - % (str(models.User.minimum_passwd_length())) - ] - return render_template( - request, "passreset.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - # We got to this point; everything matched up. Update the password - # and remove the ResetKey. - with db.begin(): - db_user.ResetKey = str() - if db_user.session: - db.delete(db_user.session) - db_user.update_password(password) - - # Render ?step=complete. - return RedirectResponse( - url="/passreset?step=complete", status_code=HTTPStatus.SEE_OTHER - ) - - # If we got here, we continue with issuing a resetkey for the user. - resetkey = generate_resetkey() - with db.begin(): - db_user.ResetKey = resetkey - - ResetKeyNotification(db_user.ID).send() - - # Render ?step=confirm. - return RedirectResponse( - url="/passreset?step=confirm", status_code=HTTPStatus.SEE_OTHER - ) - - -def process_account_form(request: Request, user: models.User, args: dict[str, Any]): - """Process an account form. All fields are optional and only checks - requirements in the case they are present. - - ``` - context = await make_variable_context(request, "Accounts") - ok, errors = process_account_form(request, user, **kwargs) - if not ok: - context["errors"] = errors - return render_template(request, "some_account_template.html", context) - ``` - - :param request: An incoming FastAPI request - :param user: The user model of the account being processed - :param args: A dictionary of arguments generated via request.form() - :return: A (passed processing boolean, list of errors) tuple - """ - - # Get a local translator. - _ = get_translator_for_request(request) - - checks = [ - validate.is_banned, - validate.invalid_user_password, - validate.invalid_fields, - validate.invalid_suspend_permission, - validate.invalid_username, - validate.invalid_password, - validate.invalid_email, - validate.invalid_backup_email, - validate.invalid_homepage, - validate.invalid_pgp_key, - validate.invalid_ssh_pubkey, - validate.invalid_language, - validate.invalid_timezone, - validate.username_in_use, - validate.email_in_use, - validate.invalid_account_type, - validate.invalid_captcha, - ] - - try: - for check in checks: - check(**args, request=request, user=user, _=_) - except ValidationError as exc: - return False, exc.data - - return True, [] - - -def make_account_form_context( - context: dict, request: Request, user: models.User, args: dict -): - """Modify a FastAPI context and add attributes for the account form. - - :param context: FastAPI context - :param request: FastAPI request - :param user: Target user - :param args: Persistent arguments: request.form() - :return: FastAPI context adjusted for account form - """ - # Do not modify the original context. - context = copy.copy(context) - - context["account_types"] = list( - filter( - lambda e: request.user.AccountTypeID >= e[0], - [ - (at.USER_ID, f"Normal {at.USER}"), - (at.PACKAGE_MAINTAINER_ID, at.PACKAGE_MAINTAINER), - (at.DEVELOPER_ID, at.DEVELOPER), - (at.PACKAGE_MAINTAINER_AND_DEV_ID, at.PACKAGE_MAINTAINER_AND_DEV), - ], - ) - ) - - if request.user.is_authenticated(): - context["username"] = args.get("U", user.Username) - context["account_type"] = args.get("T", user.AccountType.ID) - context["suspended"] = args.get("S", user.Suspended) - context["email"] = args.get("E", user.Email) - context["hide_email"] = args.get("H", user.HideEmail) - context["backup_email"] = args.get("BE", user.BackupEmail) - context["realname"] = args.get("R", user.RealName) - context["homepage"] = args.get("HP", user.Homepage or str()) - context["ircnick"] = args.get("I", user.IRCNick) - context["pgp"] = args.get("K", user.PGPKey or str()) - context["lang"] = args.get("L", user.LangPreference) - context["tz"] = args.get("TZ", user.Timezone) - ssh_pks = [pk.PubKey for pk in user.ssh_pub_keys] - context["ssh_pks"] = args.get("PK", ssh_pks) - context["cn"] = args.get("CN", user.CommentNotify) - context["un"] = args.get("UN", user.UpdateNotify) - context["on"] = args.get("ON", user.OwnershipNotify) - context["hdc"] = args.get("HDC", user.HideDeletedComments) - context["inactive"] = args.get("J", user.InactivityTS != 0) - else: - context["username"] = args.get("U", str()) - context["account_type"] = args.get("T", at.USER_ID) - context["suspended"] = args.get("S", False) - context["email"] = args.get("E", str()) - context["hide_email"] = args.get("H", False) - context["backup_email"] = args.get("BE", str()) - context["realname"] = args.get("R", str()) - context["homepage"] = args.get("HP", str()) - context["ircnick"] = args.get("I", str()) - context["pgp"] = args.get("K", str()) - context["lang"] = args.get("L", context.get("language")) - context["tz"] = args.get("TZ", context.get("timezone")) - context["ssh_pks"] = args.get("PK", str()) - context["cn"] = args.get("CN", True) - context["un"] = args.get("UN", False) - context["on"] = args.get("ON", True) - context["hdc"] = args.get("HDC", False) - context["inactive"] = args.get("J", False) - - context["password"] = args.get("P", str()) - context["confirm"] = args.get("C", str()) - - return context - - -@router.get("/register", response_class=HTMLResponse) -@requires_guest -async def account_register( - request: Request, - U: str = Form(default=str()), # Username - E: str = Form(default=str()), # Email - H: str = Form(default=False), # Hide Email - BE: str = Form(default=None), # Backup Email - R: str = Form(default=None), # Real Name - HP: str = Form(default=None), # Homepage - I: str = Form(default=None), # IRC Nick - K: str = Form(default=None), # PGP Key FP - L: str = Form(default=aurweb.config.get("options", "default_lang")), - TZ: str = Form(default=aurweb.config.get("options", "default_timezone")), - PK: str = Form(default=None), - CN: bool = Form(default=False), # Comment Notify - CU: bool = Form(default=False), # Update Notify - CO: bool = Form(default=False), # Owner Notify - HDC: bool = Form(default=False), # Hide Deleted Comments - captcha: str = Form(default=str()), -): - context = await make_variable_context(request, "Register") - context["captcha_salt"] = get_captcha_salts()[0] - context = make_account_form_context(context, request, None, dict()) - return render_template(request, "register.html", context) - - -@db.async_retry_deadlock -@router.post("/register", response_class=HTMLResponse) -@handle_form_exceptions -@requires_guest -async def account_register_post( - request: Request, - U: str = Form(default=str()), # Username - E: str = Form(default=str()), # Email - H: str = Form(default=False), # Hide Email - BE: str = Form(default=None), # Backup Email - R: str = Form(default=""), # Real Name - HP: str = Form(default=None), # Homepage - I: str = Form(default=None), # IRC Nick - K: str = Form(default=None), # PGP Key - L: str = Form(default=aurweb.config.get("options", "default_lang")), - TZ: str = Form(default=aurweb.config.get("options", "default_timezone")), - PK: str = Form(default=str()), # SSH PubKey - CN: bool = Form(default=False), - UN: bool = Form(default=False), - ON: bool = Form(default=False), - HDC: bool = Form(default=False), - captcha: str = Form(default=None), - captcha_salt: str = Form(...), -): - context = await make_variable_context(request, "Register") - args = dict(await request.form()) - args["K"] = args.get("K", str()).replace(" ", "") - K = args.get("K") - - # Force "H" into a boolean. - args["H"] = H = args.get("H", str()) == "on" - - context = make_account_form_context(context, request, None, args) - ok, errors = process_account_form(request, request.user, args) - if not ok: - # If the field values given do not meet the requirements, - # return HTTP 400 with an error. - context["errors"] = errors - return render_template( - request, "register.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - if not captcha: - context["errors"] = ["The CAPTCHA is missing."] - return render_template( - request, "register.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - # Create a user with no password with a resetkey, then send - # an email off about it. - resetkey = generate_resetkey() - - # By default, we grab the User account type to associate with. - atype = db.query( - models.AccountType, models.AccountType.AccountType == "User" - ).first() - - # Create a user given all parameters available. - with db.begin(): - user = db.create( - models.User, - Username=U, - Email=E, - HideEmail=H, - BackupEmail=BE, - RealName=R, - Homepage=HP, - IRCNick=I, - PGPKey=K, - LangPreference=L, - Timezone=TZ, - CommentNotify=CN, - UpdateNotify=UN, - OwnershipNotify=ON, - HideDeletedComments=HDC, - ResetKey=resetkey, - AccountType=atype, - ) - - # If a PK was given and either one does not exist or the given - # PK mismatches the existing user's SSHPubKey.PubKey. - if PK: - # Get the second element in the PK, which is the actual key. - keys = util.parse_ssh_keys(PK.strip()) - for k in keys: - pk = " ".join(k) - fprint = get_fingerprint(pk) - db.create(models.SSHPubKey, User=user, PubKey=pk, Fingerprint=fprint) - - # Send a reset key notification to the new user. - WelcomeNotification(user.ID).send() - - context["complete"] = True - context["user"] = user - return render_template(request, "register.html", context) - - -def cannot_edit( - request: Request, user: models.User -) -> typing.Optional[RedirectResponse]: - """ - Decide if `request.user` cannot edit `user`. - - If the request user can edit the target user, None is returned. - Otherwise, a redirect is returned to /account/{user.Username}. - - :param request: FastAPI request - :param user: Target user to be edited - :return: RedirectResponse if approval != granted else None - """ - # raise 404 if user does not exist - if not user: - raise HTTPException(status_code=HTTPStatus.NOT_FOUND) - approved = request.user.can_edit_user(user) - if not approved and (to := "/"): - if user: - to = f"/account/{user.Username}" - return RedirectResponse(to, status_code=HTTPStatus.SEE_OTHER) - return None - - -@router.get("/account/{username}/edit", response_class=HTMLResponse) -@requires_auth -async def account_edit(request: Request, username: str): - user = db.query(models.User, models.User.Username == username).first() - - response = cannot_edit(request, user) - if response: - return response - - context = await make_variable_context(request, "Accounts") - context["user"] = db.refresh(user) - - context = make_account_form_context(context, request, user, dict()) - return render_template(request, "account/edit.html", context) - - -@router.post("/account/{username}/edit", response_class=HTMLResponse) -@handle_form_exceptions -@requires_auth -async def account_edit_post( - request: Request, - username: str, - U: str = Form(default=str()), # Username - J: bool = Form(default=False), - E: str = Form(default=str()), # Email - H: str = Form(default=False), # Hide Email - BE: str = Form(default=None), # Backup Email - R: str = Form(default=None), # Real Name - HP: str = Form(default=None), # Homepage - I: str = Form(default=None), # IRC Nick - K: str = Form(default=None), # PGP Key - L: str = Form(aurweb.config.get("options", "default_lang")), - TZ: str = Form(aurweb.config.get("options", "default_timezone")), - P: str = Form(default=str()), # New Password - C: str = Form(default=None), # Password Confirm - S: bool = Form(default=False), # Suspended - PK: str = Form(default=None), # PubKey - CN: bool = Form(default=False), # Comment Notify - UN: bool = Form(default=False), # Update Notify - ON: bool = Form(default=False), # Owner Notify - HDC: bool = Form(default=False), # Hide Deleted Comments - T: int = Form(default=None), - passwd: str = Form(default=str()), -): - user = db.query(models.User).filter(models.User.Username == username).first() - response = cannot_edit(request, user) - if response: - return response - - context = await make_variable_context(request, "Accounts") - context["user"] = db.refresh(user) - - args = dict(await request.form()) - args["K"] = args.get("K", str()).replace(" ", "") - - context = make_account_form_context(context, request, user, args) - ok, errors = process_account_form(request, user, args) - - if PK: - context["ssh_pks"] = [PK] - - if not passwd: - context["errors"] = ["Invalid password."] - return render_template( - request, "account/edit.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - if not ok: - context["errors"] = errors - return render_template( - request, "account/edit.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - updates = [ - update.simple, - update.language, - update.timezone, - update.ssh_pubkey, - update.account_type, - update.password, - update.suspend, - ] - - # These update functions are all guarded by retry_deadlock; - # there's no need to guard this route itself. - for f in updates: - f(**args, request=request, user=user, context=context) - - if not errors: - context["complete"] = True - - return render_template(request, "account/edit.html", context) - - -@router.get("/account/{username}") -async def account(request: Request, username: str): - _ = l10n.get_translator_for_request(request) - context = await make_variable_context(request, _("Account") + " " + username) - if not request.user.is_authenticated(): - return render_template( - request, "account/show.html", context, status_code=HTTPStatus.UNAUTHORIZED - ) - - # Get related User record, if possible. - user = get_user_by_name(username) - context["user"] = user - - # Format PGPKey for display with a space between each 4 characters. - k = user.PGPKey or str() - context["pgp_key"] = " ".join([k[i : i + 4] for i in range(0, len(k), 4)]) - - login_ts = None - session = db.query(models.Session).filter(models.Session.UsersID == user.ID).first() - if session: - login_ts = user.session.LastUpdateTS - context["login_ts"] = login_ts - - # Render the template. - return render_template(request, "account/show.html", context) - - -@router.get("/account/{username}/comments") -@requires_auth -async def account_comments(request: Request, username: str): - user = get_user_by_name(username) - context = make_context(request, "Accounts") - context["username"] = username - context["comments"] = user.package_comments.order_by( - models.PackageComment.CommentTS.desc() - ) - return render_template(request, "account/comments.html", context) - - -@router.get("/accounts") -@requires_auth -@account_type_required( - {at.PACKAGE_MAINTAINER, at.DEVELOPER, at.PACKAGE_MAINTAINER_AND_DEV} -) -async def accounts(request: Request): - context = make_context(request, "Accounts") - return render_template(request, "account/search.html", context) - - -@router.post("/accounts") -@handle_form_exceptions -@requires_auth -@account_type_required( - {at.PACKAGE_MAINTAINER, at.DEVELOPER, at.PACKAGE_MAINTAINER_AND_DEV} -) -async def accounts_post( - request: Request, - O: int = Form(default=0), # Offset - SB: str = Form(default=str()), # Sort By - U: str = Form(default=str()), # Username - T: str = Form(default=str()), # Account Type - S: bool = Form(default=False), # Suspended - E: str = Form(default=str()), # Email - R: str = Form(default=str()), # Real Name - I: str = Form(default=str()), # IRC Nick - K: str = Form(default=str()), -): # PGP Key - context = await make_variable_context(request, "Accounts") - context["pp"] = pp = 50 # Hits per page. - - offset = max(O, 0) # Minimize offset at 0. - context["offset"] = offset # Offset. - - context["params"] = dict(await request.form()) - if "O" in context["params"]: - context["params"].pop("O") - - # Setup order by criteria based on SB. - order_by_columns = { - "t": (models.AccountType.ID.asc(), models.User.Username.asc()), - "r": (models.User.RealName.asc(), models.AccountType.ID.asc()), - "i": (models.User.IRCNick.asc(), models.AccountType.ID.asc()), - } - default_order = (models.User.Username.asc(), models.AccountType.ID.asc()) - order_by = order_by_columns.get(SB, default_order) - - # Convert parameter T to an AccountType ID. - account_types = { - "u": at.USER_ID, - "t": at.PACKAGE_MAINTAINER_ID, - "d": at.DEVELOPER_ID, - "td": at.PACKAGE_MAINTAINER_AND_DEV_ID, - } - account_type_id = account_types.get(T, None) - - # Get a query handle to users, populate the total user - # count into a jinja2 context variable. - query = db.query(models.User).join(models.AccountType) - - # Populate this list with any additional statements to - # be ANDed together. - statements = [ - v - for k, v in [ - (account_type_id is not None, models.AccountType.ID == account_type_id), - (bool(U), models.User.Username.like(f"%{U}%")), - (bool(S), models.User.Suspended == S), - (bool(E), models.User.Email.like(f"%{E}%")), - (bool(R), models.User.RealName.like(f"%{R}%")), - (bool(I), models.User.IRCNick.like(f"%{I}%")), - (bool(K), models.User.PGPKey.like(f"%{K}%")), - ] - if k - ] - - # Filter the query by coe-mbining all statements added above into - # an AND statement, unless there's just one statement, which - # we pass on to filter() as args. - if statements: - query = query.filter(and_(*statements)) - - context["total_users"] = query.count() - - # Finally, order and truncate our users for the current page. - users = query.order_by(*order_by).limit(pp).offset(offset).all() - context["users"] = util.apply_all(users, db.refresh) - - return render_template(request, "account/index.html", context) - - -@router.get("/account/{name}/delete") -@requires_auth -async def account_delete(request: Request, name: str): - user = db.query(models.User).filter(models.User.Username == name).first() - if not user: - raise HTTPException(status_code=HTTPStatus.NOT_FOUND) - - has_cred = request.user.has_credential(creds.ACCOUNT_EDIT, approved=[user]) - if not has_cred: - _ = l10n.get_translator_for_request(request) - raise HTTPException( - detail=_("You do not have permission to edit this account."), - status_code=HTTPStatus.UNAUTHORIZED, - ) - - context = make_context(request, "Accounts") - context["name"] = name - return render_template(request, "account/delete.html", context) - - -@db.async_retry_deadlock -@router.post("/account/{name}/delete") -@handle_form_exceptions -@requires_auth -async def account_delete_post( - request: Request, - name: str, - passwd: str = Form(default=str()), - confirm: bool = Form(default=False), -): - user = db.query(models.User).filter(models.User.Username == name).first() - if not user: - raise HTTPException(status_code=HTTPStatus.NOT_FOUND) - - has_cred = request.user.has_credential(creds.ACCOUNT_EDIT, approved=[user]) - if not has_cred: - _ = l10n.get_translator_for_request(request) - raise HTTPException( - detail=_("You do not have permission to edit this account."), - status_code=HTTPStatus.UNAUTHORIZED, - ) - - context = make_context(request, "Accounts") - context["name"] = name - - confirm = util.strtobool(confirm) - if not confirm: - context["errors"] = [ - "The account has not been deleted, check the confirmation checkbox." - ] - return render_template( - request, - "account/delete.html", - context, - status_code=HTTPStatus.BAD_REQUEST, - ) - - if not request.user.valid_password(passwd): - context["errors"] = ["Invalid password."] - return render_template( - request, - "account/delete.html", - context, - status_code=HTTPStatus.BAD_REQUEST, - ) - - with db.begin(): - db.delete(user) - - return RedirectResponse("/", status_code=HTTPStatus.SEE_OTHER) - - -def render_terms_of_service(request: Request, context: dict, terms: typing.Iterable): - if not terms: - return RedirectResponse("/", status_code=HTTPStatus.SEE_OTHER) - context["unaccepted_terms"] = terms - return render_template(request, "tos/index.html", context) - - -@router.get("/tos") -@requires_auth -async def terms_of_service(request: Request): - # Query the database for terms that were previously accepted, - # but now have a bumped Revision that needs to be accepted. - diffs = ( - db.query(models.Term) - .join(models.AcceptedTerm) - .filter(models.AcceptedTerm.Revision < models.Term.Revision) - .all() - ) - - # Query the database for any terms that have not yet been accepted. - unaccepted = ( - db.query(models.Term) - .filter(~models.Term.ID.in_(db.query(models.AcceptedTerm.TermsID))) - .all() - ) - - for record in diffs + unaccepted: - db.refresh(record) - - # Translate the 'Terms of Service' part of our page title. - _ = l10n.get_translator_for_request(request) - title = f"AUR {_('Terms of Service')}" - context = await make_variable_context(request, title) - - accept_needed = sorted(unaccepted + diffs) - return render_terms_of_service(request, context, accept_needed) - - -@db.async_retry_deadlock -@router.post("/tos") -@handle_form_exceptions -@requires_auth -async def terms_of_service_post(request: Request, accept: bool = Form(default=False)): - # Query the database for terms that were previously accepted, - # but now have a bumped Revision that needs to be accepted. - diffs = ( - db.query(models.Term) - .join(models.AcceptedTerm) - .filter(models.AcceptedTerm.Revision < models.Term.Revision) - .all() - ) - - # Query the database for any terms that have not yet been accepted. - unaccepted = ( - db.query(models.Term) - .filter(~models.Term.ID.in_(db.query(models.AcceptedTerm.TermsID))) - .all() - ) - - if not accept: - # Translate the 'Terms of Service' part of our page title. - _ = l10n.get_translator_for_request(request) - title = f"AUR {_('Terms of Service')}" - context = await make_variable_context(request, title) - - # We already did the database filters here, so let's just use - # them instead of reiterating the process in terms_of_service. - accept_needed = sorted(unaccepted + diffs) - return render_terms_of_service( - request, context, util.apply_all(accept_needed, db.refresh) - ) - - with db.begin(): - # For each term we found, query for the matching accepted term - # and update its Revision to the term's current Revision. - for term in diffs: - db.refresh(term) - accepted_term = request.user.accepted_terms.filter( - models.AcceptedTerm.TermsID == term.ID - ).first() - accepted_term.Revision = term.Revision - - # For each term that was never accepted, accept it! - for term in unaccepted: - db.refresh(term) - db.create( - models.AcceptedTerm, - User=request.user, - Term=term, - Revision=term.Revision, - ) - - return RedirectResponse("/", status_code=HTTPStatus.SEE_OTHER) diff --git a/aurweb/routers/auth.py b/aurweb/routers/auth.py deleted file mode 100644 index 88eaa0e6..00000000 --- a/aurweb/routers/auth.py +++ /dev/null @@ -1,122 +0,0 @@ -from http import HTTPStatus - -from fastapi import APIRouter, Form, HTTPException, Request -from fastapi.responses import HTMLResponse, RedirectResponse -from sqlalchemy import or_ - -import aurweb.config -from aurweb import cookies, db -from aurweb.auth import requires_auth, requires_guest -from aurweb.exceptions import handle_form_exceptions -from aurweb.l10n import get_translator_for_request -from aurweb.models import User -from aurweb.templates import make_variable_context, render_template - -router = APIRouter() - - -async def login_template(request: Request, next: str, errors: list = None): - """Provide login-specific template context to render_template.""" - context = await make_variable_context(request, "Login", next) - context["errors"] = errors - context["url_base"] = f"{request.url.scheme}://{request.url.netloc}" - return render_template(request, "login.html", context) - - -@router.get("/login", response_class=HTMLResponse) -async def login_get(request: Request, next: str = "/"): - return await login_template(request, next) - - -@db.retry_deadlock -def _retry_login(request: Request, user: User, passwd: str) -> str: - return user.login(request, passwd) - - -@router.post("/login", response_class=HTMLResponse) -@handle_form_exceptions -@requires_guest -async def login_post( - request: Request, - next: str = Form(...), - user: str = Form(default=str()), - passwd: str = Form(default=str()), - remember_me: bool = Form(default=False), -): - # TODO: Once the Origin header gets broader adoption, this code can be - # slightly simplified to use it. - login_path = aurweb.config.get("options", "aur_location") + "/login" - referer = request.headers.get("Referer") - if not referer or not referer.startswith(login_path): - _ = get_translator_for_request(request) - raise HTTPException( - status_code=HTTPStatus.BAD_REQUEST, detail=_("Bad Referer header.") - ) - - user = ( - db.query(User) - .filter( - or_( - User.Username == user, - User.Email == user, - ) - ) - .first() - ) - if not user: - return await login_template(request, next, errors=["Bad username or password."]) - - if user.Suspended: - return await login_template(request, next, errors=["Account Suspended"]) - - # If "remember me" was not ticked, we set a session cookie for AURSID, - # otherwise we make it a persistent cookie - cookie_timeout = None - if remember_me: - cookie_timeout = aurweb.config.getint("options", "persistent_cookie_timeout") - - perma_timeout = aurweb.config.getint("options", "permanent_cookie_timeout") - sid = _retry_login(request, user, passwd) - if not sid: - return await login_template(request, next, errors=["Bad username or password."]) - - response = RedirectResponse(url=next, status_code=HTTPStatus.SEE_OTHER) - - secure = aurweb.config.getboolean("options", "disable_http_login") - response.set_cookie( - "AURSID", - sid, - max_age=cookie_timeout, - secure=secure, - httponly=secure, - samesite=cookies.samesite(), - ) - response.set_cookie( - "AURREMEMBER", - remember_me, - max_age=perma_timeout, - secure=secure, - httponly=secure, - samesite=cookies.samesite(), - ) - return response - - -@db.retry_deadlock -def _retry_logout(request: Request) -> None: - request.user.logout(request) - - -@router.post("/logout") -@handle_form_exceptions -@requires_auth -async def logout(request: Request, next: str = Form(default="/")): - if request.user.is_authenticated(): - _retry_logout(request) - - # Use 303 since we may be handling a post request, that'll get it - # to redirect to a get request. - response = RedirectResponse(url=next, status_code=HTTPStatus.SEE_OTHER) - response.delete_cookie("AURSID") - response.delete_cookie("AURREMEMBER") - return response diff --git a/aurweb/routers/html.py b/aurweb/routers/html.py deleted file mode 100644 index 25c611d0..00000000 --- a/aurweb/routers/html.py +++ /dev/null @@ -1,227 +0,0 @@ -""" AURWeb's primary routing module. Define all routes via @app.app.{get,post} -decorators in some way; more complex routes should be defined in their -own modules and imported here. """ - -import os -from http import HTTPStatus - -from fastapi import APIRouter, Form, HTTPException, Request, Response -from fastapi.responses import HTMLResponse, RedirectResponse -from prometheus_client import ( - CONTENT_TYPE_LATEST, - CollectorRegistry, - generate_latest, - multiprocess, -) -from sqlalchemy import case, or_ - -import aurweb.config -import aurweb.models.package_request -from aurweb import aur_logging, cookies, db, models, statistics, time, util -from aurweb.exceptions import handle_form_exceptions -from aurweb.models.package_request import PENDING_ID -from aurweb.packages.util import query_notified, query_voted, updated_packages -from aurweb.templates import make_context, render_template - -logger = aur_logging.get_logger(__name__) -router = APIRouter() - - -@router.get("/favicon.ico") -async def favicon(request: Request): - """Some browsers attempt to find a website's favicon via root uri at - /favicon.ico, so provide a redirection here to our static icon.""" - return RedirectResponse("/static/images/favicon.ico") - - -@db.async_retry_deadlock -@router.post("/language", response_class=RedirectResponse) -@handle_form_exceptions -async def language( - request: Request, - set_lang: str = Form(...), - next: str = Form(...), - q: str = Form(default=None), -): - """ - A POST route used to set a session's language. - - Return a 303 See Other redirect to {next}?next={next}. If we are - setting the language on any page, we want to preserve query - parameters across the redirect. - """ - if next[0] != "/": - return HTMLResponse(b"Invalid 'next' parameter.", status_code=400) - - query_string = "?" + q if q else str() - - response = RedirectResponse( - url=f"{next}{query_string}", status_code=HTTPStatus.SEE_OTHER - ) - - # If the user is authenticated, update the user's LangPreference. - # Otherwise set an AURLANG cookie - if request.user.is_authenticated(): - with db.begin(): - request.user.LangPreference = set_lang - else: - secure = aurweb.config.getboolean("options", "disable_http_login") - perma_timeout = aurweb.config.getint("options", "permanent_cookie_timeout") - - response.set_cookie( - "AURLANG", - set_lang, - secure=secure, - httponly=secure, - max_age=perma_timeout, - samesite=cookies.samesite(), - ) - - return response - - -@router.get("/", response_class=HTMLResponse) -async def index(request: Request): - """Homepage route.""" - context = make_context(request, "Home") - context["ssh_fingerprints"] = util.get_ssh_fingerprints() - - cache_expire = aurweb.config.getint("cache", "expiry_time_statistics", 300) - - # Package statistics. - counts = statistics.get_homepage_counts() - for k in counts: - context[k] = counts[k] - - # Get the 15 most recently updated packages. - context["package_updates"] = updated_packages(15, cache_expire) - - if request.user.is_authenticated(): - # Authenticated users get a few extra pieces of data for - # the dashboard display. - packages = db.query(models.Package).join(models.PackageBase) - - maintained = ( - packages.join( - models.PackageComaintainer, - models.PackageComaintainer.PackageBaseID == models.PackageBase.ID, - isouter=True, - ) - .join( - models.User, - or_( - models.PackageBase.MaintainerUID == models.User.ID, - models.PackageComaintainer.UsersID == models.User.ID, - ), - ) - .filter(models.User.ID == request.user.ID) - ) - - # Packages maintained by the user that have been flagged. - context["flagged_packages"] = ( - maintained.filter(models.PackageBase.OutOfDateTS.isnot(None)) - .order_by(models.PackageBase.ModifiedTS.desc(), models.Package.Name.asc()) - .limit(50) - .all() - ) - - # Flagged packages that request.user has voted for. - context["flagged_packages_voted"] = query_voted( - context.get("flagged_packages"), request.user - ) - - # Flagged packages that request.user is being notified about. - context["flagged_packages_notified"] = query_notified( - context.get("flagged_packages"), request.user - ) - - archive_time = aurweb.config.getint("options", "request_archive_time") - start = time.utcnow() - archive_time - - # Package requests created by request.user. - context["package_requests"] = ( - request.user.package_requests.filter( - models.PackageRequest.RequestTS >= start - ) - .order_by( - # Order primarily by the Status column being PENDING_ID, - # and secondarily by RequestTS; both in descending order. - case([(models.PackageRequest.Status == PENDING_ID, 1)], else_=0).desc(), - models.PackageRequest.RequestTS.desc(), - ) - .limit(50) - .all() - ) - - # Packages that the request user maintains or comaintains. - context["packages"] = ( - maintained.filter(models.User.ID == models.PackageBase.MaintainerUID) - .order_by(models.PackageBase.ModifiedTS.desc(), models.Package.Name.desc()) - .limit(50) - .all() - ) - - # Packages that request.user has voted for. - context["packages_voted"] = query_voted(context.get("packages"), request.user) - - # Packages that request.user is being notified about. - context["packages_notified"] = query_notified( - context.get("packages"), request.user - ) - - # Any packages that the request user comaintains. - context["comaintained"] = ( - packages.join(models.PackageComaintainer) - .filter(models.PackageComaintainer.UsersID == request.user.ID) - .order_by(models.PackageBase.ModifiedTS.desc(), models.Package.Name.desc()) - .limit(50) - .all() - ) - - # Comaintained packages that request.user has voted for. - context["comaintained_voted"] = query_voted( - context.get("comaintained"), request.user - ) - - # Comaintained packages that request.user is being notified about. - context["comaintained_notified"] = query_notified( - context.get("comaintained"), request.user - ) - - return render_template(request, "index.html", context) - - -@router.get("/{archive}.sha256") -async def archive_sha256(request: Request, archive: str): - archivedir = aurweb.config.get("mkpkglists", "archivedir") - hashfile = os.path.join(archivedir, f"{archive}.sha256") - if not os.path.exists(hashfile): - raise HTTPException(status_code=HTTPStatus.NOT_FOUND) - - with open(hashfile) as f: - hash_value = f.read() - headers = {"Content-Type": "text/plain"} - return Response(hash_value, headers=headers) - - -@router.get("/metrics") -async def metrics(request: Request): - if not os.environ.get("PROMETHEUS_MULTIPROC_DIR", None): - return Response( - "Prometheus metrics are not enabled.", - status_code=HTTPStatus.SERVICE_UNAVAILABLE, - ) - - # update prometheus gauges for packages and users - statistics.update_prometheus_metrics() - - registry = CollectorRegistry() - multiprocess.MultiProcessCollector(registry) - data = generate_latest(registry) - headers = {"Content-Type": CONTENT_TYPE_LATEST, "Content-Length": str(len(data))} - return Response(data, headers=headers) - - -@router.get("/raisefivethree", response_class=HTMLResponse) -async def raise_service_unavailable(request: Request): - raise HTTPException(status_code=HTTPStatus.SERVICE_UNAVAILABLE) diff --git a/aurweb/routers/package_maintainer.py b/aurweb/routers/package_maintainer.py deleted file mode 100644 index 9ce38d07..00000000 --- a/aurweb/routers/package_maintainer.py +++ /dev/null @@ -1,394 +0,0 @@ -import html -import typing -from http import HTTPStatus -from typing import Any - -from fastapi import APIRouter, Form, HTTPException, Request -from fastapi.responses import RedirectResponse, Response -from sqlalchemy import and_, func, or_ - -from aurweb import aur_logging, db, l10n, models, time -from aurweb.auth import creds, requires_auth -from aurweb.exceptions import handle_form_exceptions -from aurweb.models import User -from aurweb.models.account_type import ( - PACKAGE_MAINTAINER_AND_DEV_ID, - PACKAGE_MAINTAINER_ID, -) -from aurweb.templates import make_context, make_variable_context, render_template - -router = APIRouter() -logger = aur_logging.get_logger(__name__) - -# Some PM route specific constants. -ITEMS_PER_PAGE = 10 # Paged table size. -MAX_AGENDA_LENGTH = 75 # Agenda table column length. - -ADDVOTE_SPECIFICS = { - # This dict stores a vote duration and quorum for a proposal. - # When a proposal is added, duration is added to the current - # timestamp. - # "addvote_type": (duration, quorum) - "add_pm": (7 * 24 * 60 * 60, 0.66), - "remove_pm": (7 * 24 * 60 * 60, 0.75), - "remove_inactive_pm": (5 * 24 * 60 * 60, 0.66), - "bylaws": (7 * 24 * 60 * 60, 0.75), -} - - -def populate_package_maintainer_counts(context: dict[str, Any]) -> None: - pm_query = db.query(User).filter( - or_( - User.AccountTypeID == PACKAGE_MAINTAINER_ID, - User.AccountTypeID == PACKAGE_MAINTAINER_AND_DEV_ID, - ) - ) - context["package_maintainer_count"] = pm_query.count() - - # In case any records have a None InactivityTS. - active_pm_query = pm_query.filter( - or_(User.InactivityTS.is_(None), User.InactivityTS == 0) - ) - context["active_package_maintainer_count"] = active_pm_query.count() - - -@router.get("/package-maintainer") -@requires_auth -async def package_maintainer( - request: Request, - coff: int = 0, # current offset - cby: str = "desc", # current by - poff: int = 0, # past offset - pby: str = "desc", -): # past by - """Proposal listings.""" - - if not request.user.has_credential(creds.PM_LIST_VOTES): - return RedirectResponse("/", status_code=HTTPStatus.SEE_OTHER) - - context = make_context(request, "Package Maintainer") - - current_by, past_by = cby, pby - current_off, past_off = coff, poff - - context["pp"] = pp = ITEMS_PER_PAGE - context["prev_len"] = MAX_AGENDA_LENGTH - - ts = time.utcnow() - - if current_by not in {"asc", "desc"}: - # If a malicious by was given, default to desc. - current_by = "desc" - context["current_by"] = current_by - - if past_by not in {"asc", "desc"}: - # If a malicious by was given, default to desc. - past_by = "desc" - context["past_by"] = past_by - - current_votes = ( - db.query(models.VoteInfo) - .filter(models.VoteInfo.End > ts) - .order_by(models.VoteInfo.Submitted.desc()) - ) - context["current_votes_count"] = current_votes.count() - current_votes = current_votes.limit(pp).offset(current_off) - context["current_votes"] = ( - reversed(current_votes.all()) if current_by == "asc" else current_votes.all() - ) - context["current_off"] = current_off - - past_votes = ( - db.query(models.VoteInfo) - .filter(models.VoteInfo.End <= ts) - .order_by(models.VoteInfo.Submitted.desc()) - ) - context["past_votes_count"] = past_votes.count() - past_votes = past_votes.limit(pp).offset(past_off) - context["past_votes"] = ( - reversed(past_votes.all()) if past_by == "asc" else past_votes.all() - ) - context["past_off"] = past_off - - last_vote = func.max(models.Vote.VoteID).label("LastVote") - last_votes_by_pm = ( - db.query(models.Vote) - .join(models.User) - .join(models.VoteInfo, models.VoteInfo.ID == models.Vote.VoteID) - .filter( - and_( - models.Vote.VoteID == models.VoteInfo.ID, - models.User.ID == models.Vote.UserID, - models.VoteInfo.End < ts, - or_(models.User.AccountTypeID == 2, models.User.AccountTypeID == 4), - ) - ) - .with_entities(models.Vote.UserID, last_vote, models.User.Username) - .group_by(models.Vote.UserID) - .order_by(last_vote.desc(), models.User.Username.asc()) - ) - context["last_votes_by_pm"] = last_votes_by_pm.all() - - context["current_by_next"] = "asc" if current_by == "desc" else "desc" - context["past_by_next"] = "asc" if past_by == "desc" else "desc" - - populate_package_maintainer_counts(context) - - context["q"] = { - "coff": current_off, - "cby": current_by, - "poff": past_off, - "pby": past_by, - } - - return render_template(request, "package-maintainer/index.html", context) - - -def render_proposal( - request: Request, - context: dict, - proposal: int, - voteinfo: models.VoteInfo, - voters: typing.Iterable[models.User], - vote: models.Vote, - status_code: HTTPStatus = HTTPStatus.OK, -): - """Render a single PM proposal.""" - context["proposal"] = proposal - context["voteinfo"] = voteinfo - context["voters"] = voters.all() - - total = voteinfo.total_votes() - participation = (total / voteinfo.ActiveUsers) if voteinfo.ActiveUsers else 0 - context["participation"] = participation - - accepted = (voteinfo.Yes > voteinfo.ActiveUsers / 2) or ( - participation > voteinfo.Quorum and voteinfo.Yes > voteinfo.No - ) - context["accepted"] = accepted - - can_vote = voters.filter(models.Vote.User == request.user).first() is None - context["can_vote"] = can_vote - - if not voteinfo.is_running(): - context["error"] = "Voting is closed for this proposal." - - context["vote"] = vote - context["has_voted"] = vote is not None - - return render_template( - request, "package-maintainer/show.html", context, status_code=status_code - ) - - -@router.get("/package-maintainer/{proposal}") -@requires_auth -async def package_maintainer_proposal(request: Request, proposal: int): - if not request.user.has_credential(creds.PM_LIST_VOTES): - return RedirectResponse("/package-maintainer", status_code=HTTPStatus.SEE_OTHER) - - context = await make_variable_context(request, "Package Maintainer") - proposal = int(proposal) - - voteinfo = db.query(models.VoteInfo).filter(models.VoteInfo.ID == proposal).first() - if not voteinfo: - raise HTTPException(status_code=HTTPStatus.NOT_FOUND) - - voters = ( - db.query(models.User) - .join(models.Vote) - .filter(models.Vote.VoteID == voteinfo.ID) - ) - vote = ( - db.query(models.Vote) - .filter( - and_( - models.Vote.UserID == request.user.ID, - models.Vote.VoteID == voteinfo.ID, - ) - ) - .first() - ) - if not request.user.has_credential(creds.PM_VOTE): - context["error"] = "Only Package Maintainers are allowed to vote." - if voteinfo.User == request.user.Username: - context["error"] = "You cannot vote in an proposal about you." - elif vote is not None: - context["error"] = "You've already voted for this proposal." - - context["vote"] = vote - return render_proposal(request, context, proposal, voteinfo, voters, vote) - - -@db.async_retry_deadlock -@router.post("/package-maintainer/{proposal}") -@handle_form_exceptions -@requires_auth -async def package_maintainer_proposal_post( - request: Request, proposal: int, decision: str = Form(...) -): - if not request.user.has_credential(creds.PM_LIST_VOTES): - return RedirectResponse("/package-maintainer", status_code=HTTPStatus.SEE_OTHER) - - context = await make_variable_context(request, "Package Maintainer") - proposal = int(proposal) # Make sure it's an int. - - voteinfo = db.query(models.VoteInfo).filter(models.VoteInfo.ID == proposal).first() - if not voteinfo: - raise HTTPException(status_code=HTTPStatus.NOT_FOUND) - - voters = ( - db.query(models.User) - .join(models.Vote) - .filter(models.Vote.VoteID == voteinfo.ID) - ) - vote = ( - db.query(models.Vote) - .filter( - and_( - models.Vote.UserID == request.user.ID, - models.Vote.VoteID == voteinfo.ID, - ) - ) - .first() - ) - - status_code = HTTPStatus.OK - if not request.user.has_credential(creds.PM_VOTE): - context["error"] = "Only Package Maintainers are allowed to vote." - status_code = HTTPStatus.UNAUTHORIZED - elif voteinfo.User == request.user.Username: - context["error"] = "You cannot vote in an proposal about you." - status_code = HTTPStatus.BAD_REQUEST - elif vote is not None: - context["error"] = "You've already voted for this proposal." - status_code = HTTPStatus.BAD_REQUEST - - if status_code != HTTPStatus.OK: - return render_proposal( - request, context, proposal, voteinfo, voters, vote, status_code=status_code - ) - - with db.begin(): - if decision in {"Yes", "No", "Abstain"}: - # Increment whichever decision was given to us. - setattr(voteinfo, decision, getattr(voteinfo, decision) + 1) - else: - return Response( - "Invalid 'decision' value.", status_code=HTTPStatus.BAD_REQUEST - ) - - vote = db.create(models.Vote, User=request.user, VoteInfo=voteinfo) - - context["error"] = "You've already voted for this proposal." - return render_proposal(request, context, proposal, voteinfo, voters, vote) - - -@router.get("/addvote") -@requires_auth -async def package_maintainer_addvote( - request: Request, user: str = str(), type: str = "add_pm", agenda: str = str() -): - if not request.user.has_credential(creds.PM_ADD_VOTE): - return RedirectResponse("/package-maintainer", status_code=HTTPStatus.SEE_OTHER) - - context = await make_variable_context(request, "Add Proposal") - - if type not in ADDVOTE_SPECIFICS: - context["error"] = "Invalid type." - type = "add_pm" # Default it. - - context["user"] = user - context["type"] = type - context["agenda"] = agenda - - return render_template(request, "addvote.html", context) - - -@db.async_retry_deadlock -@router.post("/addvote") -@handle_form_exceptions -@requires_auth -async def package_maintainer_addvote_post( - request: Request, - user: str = Form(default=str()), - type: str = Form(default=str()), - agenda: str = Form(default=str()), -): - if not request.user.has_credential(creds.PM_ADD_VOTE): - return RedirectResponse("/package-maintainer", status_code=HTTPStatus.SEE_OTHER) - - # Build a context. - context = await make_variable_context(request, "Add Proposal") - - context["type"] = type - context["user"] = user - context["agenda"] = agenda - - def render_addvote(context, status_code): - """Simplify render_template a bit for this test.""" - return render_template(request, "addvote.html", context, status_code) - - # Alright, get some database records, if we can. - if type != "bylaws": - user_record = db.query(models.User).filter(models.User.Username == user).first() - if user_record is None: - context["error"] = "Username does not exist." - return render_addvote(context, HTTPStatus.NOT_FOUND) - - utcnow = time.utcnow() - voteinfo = ( - db.query(models.VoteInfo) - .filter(and_(models.VoteInfo.User == user, models.VoteInfo.End > utcnow)) - .count() - ) - if voteinfo: - _ = l10n.get_translator_for_request(request) - context["error"] = _("%s already has proposal running for them.") % ( - html.escape(user), - ) - return render_addvote(context, HTTPStatus.BAD_REQUEST) - - if type not in ADDVOTE_SPECIFICS: - context["error"] = "Invalid type." - context["type"] = type = "add_pm" # Default for rendering. - return render_addvote(context, HTTPStatus.BAD_REQUEST) - - if not agenda: - context["error"] = "Proposal cannot be empty." - return render_addvote(context, HTTPStatus.BAD_REQUEST) - - # Gather some mapped constants and the current timestamp. - duration, quorum = ADDVOTE_SPECIFICS.get(type) - timestamp = time.utcnow() - - # Active PM types we filter for. - types = {PACKAGE_MAINTAINER_ID, PACKAGE_MAINTAINER_AND_DEV_ID} - - # Create a new VoteInfo (proposal)! - with db.begin(): - active_pms = ( - db.query(User) - .filter( - and_( - User.Suspended == 0, - User.InactivityTS.isnot(None), - User.AccountTypeID.in_(types), - ) - ) - .count() - ) - voteinfo = db.create( - models.VoteInfo, - User=user, - Agenda=html.escape(agenda), - Submitted=timestamp, - End=(timestamp + duration), - Quorum=quorum, - ActiveUsers=active_pms, - Submitter=request.user, - ) - - # Redirect to the new proposal. - endpoint = f"/package-maintainer/{voteinfo.ID}" - return RedirectResponse(endpoint, status_code=HTTPStatus.SEE_OTHER) diff --git a/aurweb/routers/packages.py b/aurweb/routers/packages.py deleted file mode 100644 index 13f30494..00000000 --- a/aurweb/routers/packages.py +++ /dev/null @@ -1,518 +0,0 @@ -from collections import defaultdict -from http import HTTPStatus -from typing import Any - -from fastapi import APIRouter, Form, Query, Request, Response - -import aurweb.filters # noqa: F401 -from aurweb import aur_logging, config, db, defaults, models, util -from aurweb.auth import creds, requires_auth -from aurweb.cache import db_count_cache, db_query_cache -from aurweb.exceptions import InvariantError, handle_form_exceptions -from aurweb.models.relation_type import CONFLICTS_ID, PROVIDES_ID, REPLACES_ID -from aurweb.packages import util as pkgutil -from aurweb.packages.search import PackageSearch -from aurweb.packages.util import get_pkg_or_base -from aurweb.pkgbase import actions as pkgbase_actions, util as pkgbaseutil -from aurweb.templates import make_context, make_variable_context, render_template -from aurweb.util import hash_query - -logger = aur_logging.get_logger(__name__) -router = APIRouter() - - -async def packages_get( - request: Request, context: dict[str, Any], status_code: HTTPStatus = HTTPStatus.OK -): - # Query parameters used in this request. - context["q"] = dict(request.query_params) - - # Per page and offset. - offset, per_page = util.sanitize_params( - request.query_params.get("O", defaults.O), - request.query_params.get("PP", defaults.PP), - ) - context["O"] = offset - - # Limit PP to options.max_search_results - max_search_results = config.getint("options", "max_search_results") - context["PP"] = per_page = min(per_page, max_search_results) - - # Query search by. - search_by = context["SeB"] = request.query_params.get("SeB", "nd") - - # Query sort by. - sort_by = request.query_params.get("SB", None) - - # Query sort order. - sort_order = request.query_params.get("SO", None) - - # Apply ordering, limit and offset. - search = PackageSearch(request.user) - - # For each keyword found in K, apply a search_by filter. - # This means that for any sentences separated by spaces, - # they are used as if they were ANDed. - keywords = context["K"] = request.query_params.get("K", str()) - - keywords = keywords.split(" ") - if search_by == "k": - # If we're searchin by keywords, supply a set of keywords. - search.search_by(search_by, set(keywords)) - else: - for keyword in keywords: - search.search_by(search_by, keyword) - - flagged = request.query_params.get("outdated", None) - if flagged: - # If outdated was given, set it up in the context. - context["outdated"] = flagged - - # When outdated is set to "on," we filter records which do have - # an OutOfDateTS. When it's set to "off," we filter out any which - # do **not** have OutOfDateTS. - criteria = None - if flagged == "on": - criteria = models.PackageBase.OutOfDateTS.isnot - else: - criteria = models.PackageBase.OutOfDateTS.is_ - - # Apply the flag criteria to our PackageSearch.query. - search.query = search.query.filter(criteria(None)) - - submit = request.query_params.get("submit", "Go") - if submit == "Orphans": - # If the user clicked the "Orphans" button, we only want - # orphaned packages. - search.query = search.query.filter(models.PackageBase.MaintainerUID.is_(None)) - - # Collect search result count here; we've applied our keywords. - # Including more query operations below, like ordering, will - # increase the amount of time required to collect a count. - # we use redis for caching the results of the query - cache_expire = config.getint("cache", "expiry_time_search", 600) - num_packages = db_count_cache(hash_query(search.query), search.query, cache_expire) - - # Apply user-specified sort column and ordering. - search.sort_by(sort_by, sort_order) - - # Insert search results into the context. - results = search.results().with_entities( - models.Package.ID, - models.Package.Name, - models.Package.PackageBaseID, - models.Package.Version, - models.Package.Description, - models.PackageBase.Popularity, - models.PackageBase.NumVotes, - models.PackageBase.OutOfDateTS, - models.PackageBase.ModifiedTS, - models.User.Username.label("Maintainer"), - models.PackageVote.PackageBaseID.label("Voted"), - models.PackageNotification.PackageBaseID.label("Notify"), - ) - - # paging - results = results.limit(per_page).offset(offset) - - # we use redis for caching the results of the query - packages = db_query_cache(hash_query(results), results, cache_expire) - - context["packages"] = packages - context["packages_count"] = num_packages - - return render_template( - request, "packages/index.html", context, status_code=status_code - ) - - -@router.get("/packages") -async def packages(request: Request) -> Response: - context = await make_variable_context(request, "Packages") - return await packages_get(request, context) - - -@router.get("/packages/{name}") -async def package( - request: Request, - name: str, - all_deps: bool = Query(default=False), - all_reqs: bool = Query(default=False), -) -> Response: - """ - Get a package by name. - - By default, we limit the number of depends and requires results - to 20. To bypass this and load all of them, which should be triggered - via a "Show more" link near the limited listing. - - :param name: Package.Name - :param all_deps: Boolean indicating whether we should load all depends - :param all_reqs: Boolean indicating whether we should load all requires - :return: FastAPI Response - """ - - # Get the Package. - pkg = get_pkg_or_base(name, models.Package) - pkgbase = pkg.PackageBase - - rels = pkg.package_relations.order_by(models.PackageRelation.RelName.asc()) - rels_data = defaultdict(list) - for rel in rels: - if rel.RelTypeID == CONFLICTS_ID: - rels_data["c"].append(rel) - elif rel.RelTypeID == PROVIDES_ID: - rels_data["p"].append(rel) - elif rel.RelTypeID == REPLACES_ID: - rels_data["r"].append(rel) - - # Add our base information. - context = pkgbaseutil.make_context(request, pkgbase) - context["q"] = dict(request.query_params) - - context.update({"all_deps": all_deps, "all_reqs": all_reqs}) - - context["package"] = pkg - - # Package sources. - context["sources"] = pkg.package_sources.order_by( - models.PackageSource.Source.asc() - ).all() - - # Listing metadata. - context["max_listing"] = max_listing = 20 - - # Package dependencies. - deps = pkg.package_dependencies.order_by( - models.PackageDependency.DepTypeID.asc(), models.PackageDependency.DepName.asc() - ) - context["depends_count"] = deps.count() - if not all_deps: - deps = deps.limit(max_listing) - context["dependencies"] = deps.all() - # Existing dependencies to avoid multiple lookups - context["dependencies_names_from_aur"] = [ - item.Name - for item in db.query(models.Package) - .filter( - models.Package.Name.in_( - pkg.package_dependencies.with_entities(models.PackageDependency.DepName) - ) - ) - .all() - ] - - # Package requirements (other packages depend on this one). - reqs = pkgutil.pkg_required(pkg.Name, [p.RelName for p in rels_data.get("p", [])]) - context["reqs_count"] = reqs.count() - if not all_reqs: - reqs = reqs.limit(max_listing) - context["required_by"] = reqs.all() - - context["licenses"] = pkg.package_licenses - - context["groups"] = pkg.package_groups - - conflicts = pkg.package_relations.filter( - models.PackageRelation.RelTypeID == CONFLICTS_ID - ).order_by(models.PackageRelation.RelName.asc()) - context["conflicts"] = conflicts - - provides = pkg.package_relations.filter( - models.PackageRelation.RelTypeID == PROVIDES_ID - ).order_by(models.PackageRelation.RelName.asc()) - context["provides"] = provides - - replaces = pkg.package_relations.filter( - models.PackageRelation.RelTypeID == REPLACES_ID - ).order_by(models.PackageRelation.RelName.asc()) - context["replaces"] = replaces - - return render_template(request, "packages/show.html", context) - - -async def packages_unflag(request: Request, package_ids: list[int] = [], **kwargs): - if not package_ids: - return False, ["You did not select any packages to unflag."] - - # Holds the set of package bases we're looking to unflag. - # Constructed below via looping through the packages query. - bases = set() - - package_ids = set(package_ids) # Convert this to a set for O(1). - packages = db.query(models.Package).filter(models.Package.ID.in_(package_ids)).all() - for pkg in packages: - has_cred = request.user.has_credential( - creds.PKGBASE_UNFLAG, approved=[pkg.PackageBase.Flagger] - ) - if not has_cred: - return False, ["You did not select any packages to unflag."] - - if pkg.PackageBase not in bases: - bases.update({pkg.PackageBase}) - - for pkgbase in bases: - pkgbase_actions.pkgbase_unflag_instance(request, pkgbase) - return True, ["The selected packages have been unflagged."] - - -async def packages_notify(request: Request, package_ids: list[int] = [], **kwargs): - # In cases where we encounter errors with the request, we'll - # use this error tuple as a return value. - # TODO: This error does not yet have a translation. - error_tuple = (False, ["You did not select any packages to be notified about."]) - if not package_ids: - return error_tuple - - bases = set() - package_ids = set(package_ids) - packages = db.query(models.Package).filter(models.Package.ID.in_(package_ids)).all() - - for pkg in packages: - if pkg.PackageBase not in bases: - bases.update({pkg.PackageBase}) - - # Perform some checks on what the user selected for notify. - for pkgbase in bases: - notif = db.query( - pkgbase.notifications.filter( - models.PackageNotification.UserID == request.user.ID - ).exists() - ).scalar() - has_cred = request.user.has_credential(creds.PKGBASE_NOTIFY) - - # If the request user either does not have credentials - # or the notification already exists: - if not (has_cred and not notif): - return error_tuple - - # If we get here, user input is good. - for pkgbase in bases: - pkgbase_actions.pkgbase_notify_instance(request, pkgbase) - - # TODO: This message does not yet have a translation. - return True, ["The selected packages' notifications have been enabled."] - - -async def packages_unnotify(request: Request, package_ids: list[int] = [], **kwargs): - if not package_ids: - # TODO: This error does not yet have a translation. - return False, ["You did not select any packages for notification removal."] - - # TODO: This error does not yet have a translation. - error_tuple = ( - False, - ["A package you selected does not have notifications enabled."], - ) - - bases = set() - package_ids = set(package_ids) - packages = db.query(models.Package).filter(models.Package.ID.in_(package_ids)).all() - - for pkg in packages: - if pkg.PackageBase not in bases: - bases.update({pkg.PackageBase}) - - # Perform some checks on what the user selected for notify. - for pkgbase in bases: - notif = db.query( - pkgbase.notifications.filter( - models.PackageNotification.UserID == request.user.ID - ).exists() - ).scalar() - if not notif: - return error_tuple - - for pkgbase in bases: - pkgbase_actions.pkgbase_unnotify_instance(request, pkgbase) - - # TODO: This message does not yet have a translation. - return True, ["The selected packages' notifications have been removed."] - - -async def packages_adopt( - request: Request, package_ids: list[int] = [], confirm: bool = False, **kwargs -): - if not package_ids: - return False, ["You did not select any packages to adopt."] - - if not confirm: - return ( - False, - [ - "The selected packages have not been adopted, " - "check the confirmation checkbox." - ], - ) - - bases = set() - package_ids = set(package_ids) - packages = db.query(models.Package).filter(models.Package.ID.in_(package_ids)).all() - - for pkg in packages: - if pkg.PackageBase not in bases: - bases.update({pkg.PackageBase}) - - # Check that the user has credentials for every package they selected. - for pkgbase in bases: - has_cred = request.user.has_credential(creds.PKGBASE_ADOPT) - if not (has_cred or not pkgbase.Maintainer): - # TODO: This error needs to be translated. - return ( - False, - ["You are not allowed to adopt one of the " "packages you selected."], - ) - - # Now, really adopt the bases. - for pkgbase in bases: - pkgbase_actions.pkgbase_adopt_instance(request, pkgbase) - - return True, ["The selected packages have been adopted."] - - -def disown_all(request: Request, pkgbases: list[models.PackageBase]) -> list[str]: - errors = [] - for pkgbase in pkgbases: - try: - pkgbase_actions.pkgbase_disown_instance(request, pkgbase) - except InvariantError as exc: - errors.append(str(exc)) - return errors - - -async def packages_disown( - request: Request, package_ids: list[int] = [], confirm: bool = False, **kwargs -): - if not package_ids: - return False, ["You did not select any packages to disown."] - - if not confirm: - return ( - False, - [ - "The selected packages have not been disowned, " - "check the confirmation checkbox." - ], - ) - - bases = set() - package_ids = set(package_ids) - packages = db.query(models.Package).filter(models.Package.ID.in_(package_ids)).all() - - for pkg in packages: - if pkg.PackageBase not in bases: - bases.update({pkg.PackageBase}) - - # Check that the user has credentials for every package they selected. - for pkgbase in bases: - has_cred = request.user.has_credential( - creds.PKGBASE_DISOWN, approved=[pkgbase.Maintainer] - ) - if not has_cred: - # TODO: This error needs to be translated. - return ( - False, - ["You are not allowed to disown one " "of the packages you selected."], - ) - - # Now, disown all the bases if we can. - if errors := disown_all(request, bases): - return False, errors - - return True, ["The selected packages have been disowned."] - - -async def packages_delete( - request: Request, - package_ids: list[int] = [], - confirm: bool = False, - merge_into: str = str(), - **kwargs, -): - if not package_ids: - return False, ["You did not select any packages to delete."] - - if not confirm: - return ( - False, - [ - "The selected packages have not been deleted, " - "check the confirmation checkbox." - ], - ) - - if not request.user.has_credential(creds.PKGBASE_DELETE): - return False, ["You do not have permission to delete packages."] - - # set-ify package_ids and query the database for related records. - package_ids = set(package_ids) - packages = db.query(models.Package).filter(models.Package.ID.in_(package_ids)).all() - - if len(packages) != len(package_ids): - # Let the user know there was an issue with their input: they have - # provided at least one package_id which does not exist in the DB. - # TODO: This error has not yet been translated. - return False, ["One of the packages you selected does not exist."] - - # Make a set out of all package bases related to `packages`. - bases = {pkg.PackageBase for pkg in packages} - deleted_bases, notifs = [], [] - for pkgbase in bases: - deleted_bases.append(pkgbase.Name) - notifs += pkgbase_actions.pkgbase_delete_instance(request, pkgbase) - - # Log out the fact that this happened for accountability. - logger.info( - f"Privileged user '{request.user.Username}' deleted the " - f"following package bases: {str(deleted_bases)}." - ) - - util.apply_all(notifs, lambda n: n.send()) - return True, ["The selected packages have been deleted."] - - -# A mapping of action string -> callback functions used within the -# `packages_post` route below. We expect any action callback to -# return a tuple in the format: (succeeded: bool, message: list[str]). -PACKAGE_ACTIONS = { - "unflag": packages_unflag, - "notify": packages_notify, - "unnotify": packages_unnotify, - "adopt": packages_adopt, - "disown": packages_disown, - "delete": packages_delete, -} - - -@router.post("/packages") -@handle_form_exceptions -@requires_auth -async def packages_post( - request: Request, - IDs: list[int] = Form(default=[]), - action: str = Form(default=str()), - confirm: bool = Form(default=False), -): - # If an invalid action is specified, just render GET /packages - # with an BAD_REQUEST status_code. - if action not in PACKAGE_ACTIONS: - context = make_context(request, "Packages") - return await packages_get(request, context, HTTPStatus.BAD_REQUEST) - - context = make_context(request, "Packages") - - # We deal with `IDs`, `merge_into` and `confirm` arguments - # within action callbacks. - callback = PACKAGE_ACTIONS.get(action) - retval = await callback(request, package_ids=IDs, confirm=confirm) - if retval: # If *anything* was returned: - success, messages = retval - if not success: - # If the first element was False: - context["errors"] = messages - return await packages_get(request, context, HTTPStatus.BAD_REQUEST) - else: - # Otherwise: - context["success"] = messages - - return await packages_get(request, context) diff --git a/aurweb/routers/pkgbase.py b/aurweb/routers/pkgbase.py deleted file mode 100644 index 213348cd..00000000 --- a/aurweb/routers/pkgbase.py +++ /dev/null @@ -1,987 +0,0 @@ -from http import HTTPStatus - -from fastapi import APIRouter, Form, HTTPException, Query, Request, Response -from fastapi.responses import JSONResponse, RedirectResponse -from sqlalchemy import and_ - -from aurweb import aur_logging, config, db, l10n, templates, time, util -from aurweb.auth import creds, requires_auth -from aurweb.exceptions import InvariantError, ValidationError, handle_form_exceptions -from aurweb.models import PackageBase -from aurweb.models.package_comment import PackageComment -from aurweb.models.package_keyword import PackageKeyword -from aurweb.models.package_notification import PackageNotification -from aurweb.models.package_request import ACCEPTED_ID, PENDING_ID, PackageRequest -from aurweb.models.package_vote import PackageVote -from aurweb.models.request_type import DELETION_ID, MERGE_ID, ORPHAN_ID -from aurweb.packages.requests import update_closure_comment -from aurweb.packages.util import get_pkg_or_base, get_pkgbase_comment -from aurweb.pkgbase import actions, util as pkgbaseutil, validate -from aurweb.scripts import notify, popupdate -from aurweb.scripts.rendercomment import update_comment_render_fastapi -from aurweb.templates import make_variable_context, render_template - -logger = aur_logging.get_logger(__name__) -router = APIRouter() - - -@router.get("/pkgbase/{name}") -async def pkgbase(request: Request, name: str) -> Response: - """ - Single package base view. - - :param request: FastAPI Request - :param name: PackageBase.Name - :return: HTMLResponse - """ - # Get the PackageBase. - pkgbase = get_pkg_or_base(name, PackageBase) - - # Redirect to /packages if there's only one related Package - # and its name matches its PackageBase. - packages = pkgbase.packages.all() - pkg = packages[0] - if len(packages) == 1 and pkg.Name == pkgbase.Name: - return RedirectResponse( - f"/packages/{pkg.Name}", status_code=int(HTTPStatus.SEE_OTHER) - ) - - # Add our base information. - context = pkgbaseutil.make_context(request, pkgbase) - context["packages"] = packages - - return render_template(request, "pkgbase/index.html", context) - - -@router.get("/pkgbase/{name}/voters") -async def pkgbase_voters(request: Request, name: str) -> Response: - """ - View of package base voters. - - Requires `request.user` has creds.PKGBASE_LIST_VOTERS credential. - - :param request: FastAPI Request - :param name: PackageBase.Name - :return: HTMLResponse - """ - # Get the PackageBase. - pkgbase = get_pkg_or_base(name, PackageBase) - - if not request.user.has_credential(creds.PKGBASE_LIST_VOTERS): - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - context = templates.make_context(request, "Voters") - context["pkgbase"] = pkgbase - return render_template(request, "pkgbase/voters.html", context) - - -@router.get("/pkgbase/{name}/flag-comment") -async def pkgbase_flag_comment(request: Request, name: str): - pkgbase = get_pkg_or_base(name, PackageBase) - - if pkgbase.OutOfDateTS is None: - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - context = templates.make_context(request, "Flag Comment") - context["pkgbase"] = pkgbase - return render_template(request, "pkgbase/flag-comment.html", context) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/keywords") -@handle_form_exceptions -async def pkgbase_keywords( - request: Request, name: str, keywords: str = Form(default=str()) -): - pkgbase = get_pkg_or_base(name, PackageBase) - - approved = [pkgbase.Maintainer] + [c.User for c in pkgbase.comaintainers] - has_cred = creds.has_credential( - request.user, creds.PKGBASE_SET_KEYWORDS, approved=approved - ) - if not has_cred: - return Response(status_code=HTTPStatus.UNAUTHORIZED) - - # Lowercase all keywords. Our database table is case insensitive, - # and providing CI duplicates of keywords is erroneous. - keywords = set(k.lower() for k in keywords.split()) - - # Delete all keywords which are not supplied by the user. - with db.begin(): - other_keywords = pkgbase.keywords.filter(~PackageKeyword.Keyword.in_(keywords)) - other_keyword_strings = set(kwd.Keyword.lower() for kwd in other_keywords) - - existing_keywords = set( - kwd.Keyword.lower() - for kwd in pkgbase.keywords.filter( - ~PackageKeyword.Keyword.in_(other_keyword_strings) - ) - ) - - db.delete_all(other_keywords) - new_keywords = keywords.difference(existing_keywords) - for keyword in new_keywords: - db.create(PackageKeyword, PackageBase=pkgbase, Keyword=keyword) - - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - -@router.get("/pkgbase/{name}/flag") -@requires_auth -async def pkgbase_flag_get(request: Request, name: str): - pkgbase = get_pkg_or_base(name, PackageBase) - - has_cred = request.user.has_credential(creds.PKGBASE_FLAG) - if not has_cred or pkgbase.OutOfDateTS is not None: - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - context = templates.make_context(request, "Flag Package Out-Of-Date") - context["pkgbase"] = pkgbase - return render_template(request, "pkgbase/flag.html", context) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/flag") -@handle_form_exceptions -@requires_auth -async def pkgbase_flag_post( - request: Request, name: str, comments: str = Form(default=str()) -): - pkgbase = get_pkg_or_base(name, PackageBase) - - if not comments: - context = templates.make_context(request, "Flag Package Out-Of-Date") - context["pkgbase"] = pkgbase - context["errors"] = [ - "The selected packages have not been flagged, " "please enter a comment." - ] - return render_template( - request, "pkgbase/flag.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - validate.comment_raise_http_ex(comments) - - has_cred = request.user.has_credential(creds.PKGBASE_FLAG) - if has_cred and not pkgbase.OutOfDateTS: - now = time.utcnow() - with db.begin(): - pkgbase.OutOfDateTS = now - pkgbase.Flagger = request.user - pkgbase.FlaggerComment = comments - - notify.FlagNotification(request.user.ID, pkgbase.ID).send() - - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/comments") -@handle_form_exceptions -@requires_auth -async def pkgbase_comments_post( - request: Request, - name: str, - comment: str = Form(default=str()), - enable_notifications: bool = Form(default=False), -): - """Add a new comment via POST request.""" - pkgbase = get_pkg_or_base(name, PackageBase) - - validate.comment_raise_http_ex(comment) - - # If the provided comment is different than the record's version, - # update the db record. - now = time.utcnow() - with db.begin(): - comment = db.create( - PackageComment, - User=request.user, - PackageBase=pkgbase, - Comments=comment, - RenderedComment=str(), - CommentTS=now, - ) - - if enable_notifications and not request.user.notified(pkgbase): - db.create(PackageNotification, User=request.user, PackageBase=pkgbase) - update_comment_render_fastapi(comment) - - notif = notify.CommentNotification(request.user.ID, pkgbase.ID, comment.ID) - notif.send() - - # Redirect to the pkgbase page. - return RedirectResponse( - f"/pkgbase/{pkgbase.Name}#comment-{comment.ID}", - status_code=HTTPStatus.SEE_OTHER, - ) - - -@router.get("/pkgbase/{name}/comments/{id}/form") -@requires_auth -async def pkgbase_comment_form( - request: Request, name: str, id: int, next: str = Query(default=None) -): - """ - Produce a comment form for comment {id}. - - This route is used as a partial HTML endpoint when editing - package comments via Javascript. This endpoint used to be - part of the RPC as type=get-comment-form and has been - relocated here because the form returned cannot be used - externally and requires a POST request by the user. - - :param request: FastAPI Request - :param name: PackageBase.Name - :param id: PackageComment.ID - :param next: Optional `next` value used for the comment form - :return: JSONResponse - """ - pkgbase = get_pkg_or_base(name, PackageBase) - comment = pkgbase.comments.filter(PackageComment.ID == id).first() - if not comment: - return JSONResponse({}, status_code=HTTPStatus.NOT_FOUND) - - if not request.user.is_elevated() and request.user != comment.User: - return JSONResponse({}, status_code=HTTPStatus.UNAUTHORIZED) - - context = pkgbaseutil.make_context(request, pkgbase) - context["comment"] = comment - - if not next: - next = f"/pkgbase/{name}" - - context["next"] = next - - form = templates.render_raw_template( - request, "partials/packages/comment_form.html", context - ) - return JSONResponse({"form": form}) - - -@router.get("/pkgbase/{name}/comments/{id}/edit") -@requires_auth -async def pkgbase_comment_edit( - request: Request, name: str, id: int, next: str = Form(default=None) -): - """ - Render the non-javascript edit form. - - :param request: FastAPI Request - :param name: PackageBase.Name - :param id: PackageComment.ID - :param next: Optional `next` parameter used in the POST request - :return: HTMLResponse - """ - pkgbase = get_pkg_or_base(name, PackageBase) - comment = get_pkgbase_comment(pkgbase, id) - - if not next: - next = f"/pkgbase/{name}" - - context = await make_variable_context(request, "Edit comment", next=next) - context["comment"] = comment - return render_template(request, "pkgbase/comments/edit.html", context) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/comments/{id}") -@handle_form_exceptions -@requires_auth -async def pkgbase_comment_post( - request: Request, - name: str, - id: int, - comment: str = Form(default=str()), - enable_notifications: bool = Form(default=False), - next: str = Form(default=None), - cancel: bool = Form(default=False), -): - """Edit an existing comment.""" - if cancel: - return RedirectResponse( - f"/pkgbase/{name}#comment-{id}", status_code=HTTPStatus.SEE_OTHER - ) - - pkgbase = get_pkg_or_base(name, PackageBase) - db_comment = get_pkgbase_comment(pkgbase, id) - - validate.comment_raise_http_ex(comment) - - if request.user.ID != db_comment.UsersID: - raise HTTPException(status_code=HTTPStatus.UNAUTHORIZED) - - # If the provided comment is different than the record's version, - # update the db record. - now = time.utcnow() - if db_comment.Comments != comment: - with db.begin(): - db_comment.Comments = comment - db_comment.Editor = request.user - db_comment.EditedTS = now - - if enable_notifications: - with db.begin(): - db_notif = request.user.notifications.filter( - PackageNotification.PackageBaseID == pkgbase.ID - ).first() - if not db_notif: - db.create(PackageNotification, User=request.user, PackageBase=pkgbase) - - update_comment_render_fastapi(db_comment) - - if not next: - next = f"/pkgbase/{pkgbase.Name}" - - # Redirect to the pkgbase page anchored to the updated comment. - return RedirectResponse( - f"{next}#comment-{db_comment.ID}", status_code=HTTPStatus.SEE_OTHER - ) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/comments/{id}/pin") -@handle_form_exceptions -@requires_auth -async def pkgbase_comment_pin( - request: Request, name: str, id: int, next: str = Form(default=None) -): - """ - Pin a comment. - - :param request: FastAPI Request - :param name: PackageBase.Name - :param id: PackageComment.ID - :param next: Optional `next` parameter used in the POST request - :return: RedirectResponse to `next` - """ - pkgbase = get_pkg_or_base(name, PackageBase) - comment = get_pkgbase_comment(pkgbase, id) - - has_cred = request.user.has_credential( - creds.COMMENT_PIN, approved=comment.maintainers() - ) - if not has_cred: - _ = l10n.get_translator_for_request(request) - raise HTTPException( - status_code=HTTPStatus.UNAUTHORIZED, - detail=_("You are not allowed to pin this comment."), - ) - - now = time.utcnow() - with db.begin(): - comment.PinnedTS = now - - if not next: - next = f"/pkgbase/{name}" - - return RedirectResponse(next, status_code=HTTPStatus.SEE_OTHER) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/comments/{id}/unpin") -@handle_form_exceptions -@requires_auth -async def pkgbase_comment_unpin( - request: Request, name: str, id: int, next: str = Form(default=None) -): - """ - Unpin a comment. - - :param request: FastAPI Request - :param name: PackageBase.Name - :param id: PackageComment.ID - :param next: Optional `next` parameter used in the POST request - :return: RedirectResponse to `next` - """ - pkgbase = get_pkg_or_base(name, PackageBase) - comment = get_pkgbase_comment(pkgbase, id) - - has_cred = request.user.has_credential( - creds.COMMENT_PIN, approved=comment.maintainers() - ) - if not has_cred: - _ = l10n.get_translator_for_request(request) - raise HTTPException( - status_code=HTTPStatus.UNAUTHORIZED, - detail=_("You are not allowed to unpin this comment."), - ) - - with db.begin(): - comment.PinnedTS = 0 - - if not next: - next = f"/pkgbase/{name}" - - return RedirectResponse(next, status_code=HTTPStatus.SEE_OTHER) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/comments/{id}/delete") -@handle_form_exceptions -@requires_auth -async def pkgbase_comment_delete( - request: Request, name: str, id: int, next: str = Form(default=None) -): - """ - Delete a comment. - - This action does **not** delete the comment from the database, but - sets PackageBase.DelTS and PackageBase.DeleterUID, which is used to - decide who gets to view the comment and what utilities it gets. - - :param request: FastAPI Request - :param name: PackageBase.Name - :param id: PackageComment.ID - :param next: Optional `next` parameter used in the POST request - :return: RedirectResposne to `next` - """ - pkgbase = get_pkg_or_base(name, PackageBase) - comment = get_pkgbase_comment(pkgbase, id) - - authorized = request.user.has_credential(creds.COMMENT_DELETE, [comment.User]) - if not authorized: - _ = l10n.get_translator_for_request(request) - raise HTTPException( - status_code=HTTPStatus.UNAUTHORIZED, - detail=_("You are not allowed to delete this comment."), - ) - - now = time.utcnow() - with db.begin(): - comment.Deleter = request.user - comment.DelTS = now - - if not next: - next = f"/pkgbase/{name}" - - return RedirectResponse(next, status_code=HTTPStatus.SEE_OTHER) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/comments/{id}/undelete") -@handle_form_exceptions -@requires_auth -async def pkgbase_comment_undelete( - request: Request, name: str, id: int, next: str = Form(default=None) -): - """ - Undelete a comment. - - This action does **not** undelete any comment from the database, but - unsets PackageBase.DelTS and PackageBase.DeleterUID which restores - the comment to a standard state. - - :param request: FastAPI Request - :param name: PackageBase.Name - :param id: PackageComment.ID - :param next: Optional `next` parameter used in the POST request - :return: RedirectResponse to `next` - """ - pkgbase = get_pkg_or_base(name, PackageBase) - comment = get_pkgbase_comment(pkgbase, id) - - has_cred = request.user.has_credential( - creds.COMMENT_UNDELETE, approved=[comment.User] - ) - if not has_cred: - _ = l10n.get_translator_for_request(request) - raise HTTPException( - status_code=HTTPStatus.UNAUTHORIZED, - detail=_("You are not allowed to undelete this comment."), - ) - - with db.begin(): - comment.Deleter = None - comment.DelTS = None - - if not next: - next = f"/pkgbase/{name}" - - return RedirectResponse(next, status_code=HTTPStatus.SEE_OTHER) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/vote") -@handle_form_exceptions -@requires_auth -async def pkgbase_vote(request: Request, name: str): - pkgbase = get_pkg_or_base(name, PackageBase) - - vote = pkgbase.package_votes.filter(PackageVote.UsersID == request.user.ID).first() - has_cred = request.user.has_credential(creds.PKGBASE_VOTE) - if has_cred and not vote: - now = time.utcnow() - with db.begin(): - db.create(PackageVote, User=request.user, PackageBase=pkgbase, VoteTS=now) - - # Update NumVotes/Popularity. - popupdate.run_single(pkgbase) - - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/unvote") -@handle_form_exceptions -@requires_auth -async def pkgbase_unvote(request: Request, name: str): - pkgbase = get_pkg_or_base(name, PackageBase) - - vote = pkgbase.package_votes.filter(PackageVote.UsersID == request.user.ID).first() - has_cred = request.user.has_credential(creds.PKGBASE_VOTE) - if has_cred and vote: - with db.begin(): - db.delete(vote) - - # Update NumVotes/Popularity. - popupdate.run_single(pkgbase) - - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/notify") -@handle_form_exceptions -@requires_auth -async def pkgbase_notify(request: Request, name: str): - pkgbase = get_pkg_or_base(name, PackageBase) - actions.pkgbase_notify_instance(request, pkgbase) - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/unnotify") -@handle_form_exceptions -@requires_auth -async def pkgbase_unnotify(request: Request, name: str): - pkgbase = get_pkg_or_base(name, PackageBase) - actions.pkgbase_unnotify_instance(request, pkgbase) - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/unflag") -@handle_form_exceptions -@requires_auth -async def pkgbase_unflag(request: Request, name: str): - pkgbase = get_pkg_or_base(name, PackageBase) - actions.pkgbase_unflag_instance(request, pkgbase) - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - -@router.get("/pkgbase/{name}/disown") -@requires_auth -async def pkgbase_disown_get( - request: Request, name: str, next: str = Query(default=str()) -): - pkgbase = get_pkg_or_base(name, PackageBase) - - comaints = {c.User for c in pkgbase.comaintainers} - approved = [pkgbase.Maintainer] + list(comaints) - has_cred = request.user.has_credential(creds.PKGBASE_DISOWN, approved=approved) - if not has_cred: - return RedirectResponse(f"/pkgbase/{name}", HTTPStatus.SEE_OTHER) - - context = templates.make_context(request, "Disown Package") - context["pkgbase"] = pkgbase - context["next"] = next or "/pkgbase/{name}" - context["is_maint"] = request.user == pkgbase.Maintainer - context["is_comaint"] = request.user in comaints - return render_template(request, "pkgbase/disown.html", context) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/disown") -@handle_form_exceptions -@requires_auth -async def pkgbase_disown_post( - request: Request, - name: str, - comments: str = Form(default=str()), - confirm: bool = Form(default=False), - next: str = Form(default=str()), -): - pkgbase = get_pkg_or_base(name, PackageBase) - - if comments: - validate.comment_raise_http_ex(comments) - - comaints = {c.User for c in pkgbase.comaintainers} - approved = [pkgbase.Maintainer] + list(comaints) - has_cred = request.user.has_credential(creds.PKGBASE_DISOWN, approved=approved) - if not has_cred: - return RedirectResponse(f"/pkgbase/{name}", HTTPStatus.SEE_OTHER) - - context = templates.make_context(request, "Disown Package") - context["pkgbase"] = pkgbase - context["is_maint"] = request.user == pkgbase.Maintainer - context["is_comaint"] = request.user in comaints - - if not confirm: - context["errors"] = [ - ( - "The selected packages have not been disowned, " - "check the confirmation checkbox." - ) - ] - return render_template( - request, "pkgbase/disown.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - if request.user != pkgbase.Maintainer and request.user not in comaints: - with db.begin(): - update_closure_comment(pkgbase, ORPHAN_ID, comments) - - try: - actions.pkgbase_disown_instance(request, pkgbase) - except InvariantError as exc: - context["errors"] = [str(exc)] - return render_template( - request, "pkgbase/disown.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - next = next or f"/pkgbase/{name}" - return RedirectResponse(next, status_code=HTTPStatus.SEE_OTHER) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/adopt") -@handle_form_exceptions -@requires_auth -async def pkgbase_adopt_post(request: Request, name: str): - pkgbase = get_pkg_or_base(name, PackageBase) - - has_cred = request.user.has_credential(creds.PKGBASE_ADOPT) - if has_cred or not pkgbase.Maintainer: - # If the user has credentials, they'll adopt the package regardless - # of maintainership. Otherwise, we'll promote the user to maintainer - # if no maintainer currently exists. - actions.pkgbase_adopt_instance(request, pkgbase) - - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - -@router.get("/pkgbase/{name}/comaintainers") -@requires_auth -async def pkgbase_comaintainers(request: Request, name: str) -> Response: - # Get the PackageBase. - pkgbase = get_pkg_or_base(name, PackageBase) - - # Unauthorized users (Non-TU/Dev and not the pkgbase maintainer) - # get redirected to the package base's page. - has_creds = request.user.has_credential( - creds.PKGBASE_EDIT_COMAINTAINERS, approved=[pkgbase.Maintainer] - ) - if not has_creds: - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - # Add our base information. - context = templates.make_context(request, "Manage Co-maintainers") - context.update( - { - "pkgbase": pkgbase, - "comaintainers": [c.User.Username for c in pkgbase.comaintainers], - } - ) - - return render_template(request, "pkgbase/comaintainers.html", context) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/comaintainers") -@handle_form_exceptions -@requires_auth -async def pkgbase_comaintainers_post( - request: Request, name: str, users: str = Form(default=str()) -) -> Response: - # Get the PackageBase. - pkgbase = get_pkg_or_base(name, PackageBase) - - # Unauthorized users (Non-TU/Dev and not the pkgbase maintainer) - # get redirected to the package base's page. - has_creds = request.user.has_credential( - creds.PKGBASE_EDIT_COMAINTAINERS, approved=[pkgbase.Maintainer] - ) - if not has_creds: - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - users = {e.strip() for e in users.split("\n") if bool(e.strip())} - records = {c.User.Username for c in pkgbase.comaintainers} - - users_to_rm = records.difference(users) - pkgbaseutil.remove_comaintainers(pkgbase, users_to_rm) - logger.debug( - f"{request.user} removed comaintainers from " f"{pkgbase.Name}: {users_to_rm}" - ) - - users_to_add = users.difference(records) - error = pkgbaseutil.add_comaintainers(request, pkgbase, users_to_add) - if error: - context = templates.make_context(request, "Manage Co-maintainers") - context["pkgbase"] = pkgbase - context["comaintainers"] = [c.User.Username for c in pkgbase.comaintainers] - context["errors"] = [error] - return render_template(request, "pkgbase/comaintainers.html", context) - - logger.debug( - f"{request.user} added comaintainers to " f"{pkgbase.Name}: {users_to_add}" - ) - - return RedirectResponse( - f"/pkgbase/{pkgbase.Name}", status_code=HTTPStatus.SEE_OTHER - ) - - -@router.get("/pkgbase/{name}/request") -@requires_auth -async def pkgbase_request( - request: Request, name: str, next: str = Query(default=str()) -): - pkgbase = get_pkg_or_base(name, PackageBase) - context = await make_variable_context(request, "Submit Request") - context["pkgbase"] = pkgbase - context["next"] = next or f"/pkgbase/{name}" - return render_template(request, "pkgbase/request.html", context) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/request") -@handle_form_exceptions -@requires_auth -async def pkgbase_request_post( - request: Request, - name: str, - type: str = Form(...), - merge_into: str = Form(default=None), - comments: str = Form(default=str()), - next: str = Form(default=str()), -): - pkgbase = get_pkg_or_base(name, PackageBase) - - # Create our render context. - context = await make_variable_context(request, "Submit Request") - context["pkgbase"] = pkgbase - - types = {"deletion": DELETION_ID, "merge": MERGE_ID, "orphan": ORPHAN_ID} - - if type not in types: - # In the case that someone crafted a POST request with an invalid - # type, just return them to the request form with BAD_REQUEST status. - return render_template( - request, "pkgbase/request.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - try: - validate.request(pkgbase, type, comments, merge_into, context) - except ValidationError as exc: - logger.error(f"Request Validation Error: {str(exc.data)}") - context["errors"] = exc.data - return render_template(request, "pkgbase/request.html", context) - - # All good. Create a new PackageRequest based on the given type. - now = time.utcnow() - with db.begin(): - pkgreq = db.create( - PackageRequest, - ReqTypeID=types.get(type), - User=request.user, - RequestTS=now, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - MergeBaseName=merge_into, - Comments=comments, - ClosureComment=str(), - ) - - # Prepare notification object. - notif = notify.RequestOpenNotification( - request.user.ID, - pkgreq.ID, - type, - pkgreq.PackageBase.ID, - merge_into=merge_into or None, - ) - - # Send the notification now that we're out of the DB scope. - notif.send() - - auto_orphan_age = config.getint("options", "auto_orphan_age") - auto_delete_age = config.getint("options", "auto_delete_age") - - ood_ts = pkgbase.OutOfDateTS or 0 - flagged = ood_ts and (now - ood_ts) >= auto_orphan_age - is_maintainer = pkgbase.Maintainer == request.user - outdated = (now - pkgbase.SubmittedTS) <= auto_delete_age - - if type == "orphan" and flagged: - # This request should be auto-accepted. - with db.begin(): - pkgbase.Maintainer = None - pkgreq.Status = ACCEPTED_ID - notif = notify.RequestCloseNotification( - request.user.ID, pkgreq.ID, pkgreq.status_display() - ) - notif.send() - logger.debug(f"New request #{pkgreq.ID} is marked for auto-orphan.") - elif type == "deletion" and is_maintainer and outdated: - # This request should be auto-accepted. - notifs = actions.pkgbase_delete_instance(request, pkgbase, comments=comments) - util.apply_all(notifs, lambda n: n.send()) - logger.debug(f"New request #{pkgreq.ID} is marked for auto-deletion.") - - # Redirect the submitting user to /packages. - return RedirectResponse("/packages", status_code=HTTPStatus.SEE_OTHER) - - -@router.get("/pkgbase/{name}/delete") -@requires_auth -async def pkgbase_delete_get( - request: Request, name: str, next: str = Query(default=str()) -): - if not request.user.has_credential(creds.PKGBASE_DELETE): - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - context = templates.make_context(request, "Package Deletion") - context["pkgbase"] = get_pkg_or_base(name, PackageBase) - context["next"] = next or "/packages" - return render_template(request, "pkgbase/delete.html", context) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/delete") -@handle_form_exceptions -@requires_auth -async def pkgbase_delete_post( - request: Request, - name: str, - confirm: bool = Form(default=False), - comments: str = Form(default=str()), - next: str = Form(default="/packages"), -): - pkgbase = get_pkg_or_base(name, PackageBase) - - if not request.user.has_credential(creds.PKGBASE_DELETE): - return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) - - if not confirm: - context = templates.make_context(request, "Package Deletion") - context["pkgbase"] = pkgbase - context["errors"] = [ - ( - "The selected packages have not been deleted, " - "check the confirmation checkbox." - ) - ] - return render_template( - request, "pkgbase/delete.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - if comments: - validate.comment_raise_http_ex(comments) - # Update any existing deletion requests' ClosureComment. - with db.begin(): - requests = pkgbase.requests.filter( - and_( - PackageRequest.Status == PENDING_ID, - PackageRequest.ReqTypeID == DELETION_ID, - ) - ) - for pkgreq in requests: - pkgreq.ClosureComment = comments - - notifs = actions.pkgbase_delete_instance(request, pkgbase, comments=comments) - util.apply_all(notifs, lambda n: n.send()) - return RedirectResponse(next, status_code=HTTPStatus.SEE_OTHER) - - -@router.get("/pkgbase/{name}/merge") -@requires_auth -async def pkgbase_merge_get( - request: Request, - name: str, - into: str = Query(default=str()), - next: str = Query(default=str()), -): - pkgbase = get_pkg_or_base(name, PackageBase) - - context = templates.make_context(request, "Package Merging") - context.update({"pkgbase": pkgbase, "into": into, "next": next}) - - status_code = HTTPStatus.OK - # TODO: Lookup errors from credential instead of hardcoding them. - # Idea: Something like credential_errors(creds.PKGBASE_MERGE). - # Perhaps additionally: bad_credential_status_code(creds.PKGBASE_MERGE). - # Don't take these examples verbatim. We should find good naming. - if not request.user.has_credential(creds.PKGBASE_MERGE): - context["errors"] = [ - "Only Package Maintainers and Developers can merge packages." - ] - status_code = HTTPStatus.UNAUTHORIZED - - return render_template( - request, "pkgbase/merge.html", context, status_code=status_code - ) - - -@db.async_retry_deadlock -@router.post("/pkgbase/{name}/merge") -@handle_form_exceptions -@requires_auth -async def pkgbase_merge_post( - request: Request, - name: str, - into: str = Form(default=str()), - comments: str = Form(default=str()), - confirm: bool = Form(default=False), - next: str = Form(default=str()), -): - pkgbase = get_pkg_or_base(name, PackageBase) - context = await make_variable_context(request, "Package Merging") - context["pkgbase"] = pkgbase - - # TODO: Lookup errors from credential instead of hardcoding them. - if not request.user.has_credential(creds.PKGBASE_MERGE): - context["errors"] = [ - "Only Package Maintainers and Developers can merge packages." - ] - return render_template( - request, "pkgbase/merge.html", context, status_code=HTTPStatus.UNAUTHORIZED - ) - - if not confirm: - context["errors"] = [ - "The selected packages have not been deleted, " - "check the confirmation checkbox." - ] - return render_template( - request, "pkgbase/merge.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - try: - target = get_pkg_or_base(into, PackageBase) - except HTTPException: - context["errors"] = ["Cannot find package to merge votes and comments into."] - return render_template( - request, "pkgbase/merge.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - if pkgbase == target: - context["errors"] = ["Cannot merge a package base with itself."] - return render_template( - request, "pkgbase/merge.html", context, status_code=HTTPStatus.BAD_REQUEST - ) - - if comments: - validate.comment_raise_http_ex(comments) - - with db.begin(): - update_closure_comment(pkgbase, MERGE_ID, comments, target=target) - - # Merge pkgbase into target. - actions.pkgbase_merge_instance(request, pkgbase, target, comments=comments) - - if not next: - next = f"/pkgbase/{target.Name}" - - # Redirect to the newly merged into package. - return RedirectResponse(next, status_code=HTTPStatus.SEE_OTHER) diff --git a/aurweb/routers/requests.py b/aurweb/routers/requests.py deleted file mode 100644 index a67419fe..00000000 --- a/aurweb/routers/requests.py +++ /dev/null @@ -1,166 +0,0 @@ -from http import HTTPStatus - -from fastapi import APIRouter, Form, Query, Request -from fastapi.responses import RedirectResponse -from sqlalchemy import case, orm - -from aurweb import db, defaults, time, util -from aurweb.auth import creds, requires_auth -from aurweb.exceptions import handle_form_exceptions -from aurweb.models import PackageBase, PackageRequest, User -from aurweb.models.package_request import ( - ACCEPTED_ID, - CLOSED_ID, - PENDING_ID, - REJECTED_ID, -) -from aurweb.requests.util import get_pkgreq_by_id -from aurweb.scripts import notify -from aurweb.statistics import get_request_counts -from aurweb.templates import make_context, render_template - -FILTER_PARAMS = { - "filter_pending", - "filter_closed", - "filter_accepted", - "filter_rejected", - "filter_maintainers_requests", -} - -router = APIRouter() - - -@router.get("/requests") -@requires_auth -async def requests( # noqa: C901 - request: Request, - O: int = Query(default=defaults.O), - PP: int = Query(default=defaults.PP), - filter_pending: bool = False, - filter_closed: bool = False, - filter_accepted: bool = False, - filter_rejected: bool = False, - filter_maintainer_requests: bool = False, - filter_pkg_name: str = None, -): - context = make_context(request, "Requests") - - context["q"] = dict(request.query_params) - - # Set pending filter by default if no status filter was provided. - # In case we got a package name filter, but no status filter, - # we enable the other ones too. - if not dict(request.query_params).keys() & FILTER_PARAMS: - filter_pending = True - if filter_pkg_name: - filter_closed = True - filter_accepted = True - filter_rejected = True - - O, PP = util.sanitize_params(str(O), str(PP)) - context["O"] = O - context["PP"] = PP - context["filter_pending"] = filter_pending - context["filter_closed"] = filter_closed - context["filter_accepted"] = filter_accepted - context["filter_rejected"] = filter_rejected - context["filter_maintainer_requests"] = filter_maintainer_requests - context["filter_pkg_name"] = filter_pkg_name - - Maintainer = orm.aliased(User) - # A PackageRequest query - query = ( - db.query(PackageRequest) - .join(PackageBase) - .join(User, PackageRequest.UsersID == User.ID, isouter=True) - .join(Maintainer, PackageBase.MaintainerUID == Maintainer.ID, isouter=True) - ) - - # Requests statistics - counts = get_request_counts() - for k in counts: - context[k] = counts[k] - - # Apply status filters - in_filters = [] - if filter_pending: - in_filters.append(PENDING_ID) - if filter_closed: - in_filters.append(CLOSED_ID) - if filter_accepted: - in_filters.append(ACCEPTED_ID) - if filter_rejected: - in_filters.append(REJECTED_ID) - filtered = query.filter(PackageRequest.Status.in_(in_filters)) - - # Name filter (contains) - if filter_pkg_name: - filtered = filtered.filter(PackageBase.Name.like(f"%{filter_pkg_name}%")) - - # Additionally filter for requests made from package maintainer - if filter_maintainer_requests: - filtered = filtered.filter(PackageRequest.UsersID == PackageBase.MaintainerUID) - # If the request user is not elevated (TU or Dev), then - # filter PackageRequests which are owned by the request user. - if not request.user.is_elevated(): - filtered = filtered.filter(PackageRequest.UsersID == request.user.ID) - - context["total"] = filtered.count() - context["results"] = ( - filtered.order_by( - # Order primarily by the Status column being PENDING_ID, - # and secondarily by RequestTS; both in descending order. - case([(PackageRequest.Status == PENDING_ID, 1)], else_=0).desc(), - PackageRequest.RequestTS.desc(), - ) - .limit(PP) - .offset(O) - .all() - ) - return render_template(request, "requests.html", context) - - -@router.get("/requests/{id}/close") -@requires_auth -async def request_close(request: Request, id: int): - pkgreq = get_pkgreq_by_id(id) - if not request.user.is_elevated() and request.user != pkgreq.User: - # Request user doesn't have permission here: redirect to '/'. - return RedirectResponse("/", status_code=HTTPStatus.SEE_OTHER) - - context = make_context(request, "Close Request") - context["pkgreq"] = pkgreq - return render_template(request, "requests/close.html", context) - - -@db.async_retry_deadlock -@router.post("/requests/{id}/close") -@handle_form_exceptions -@requires_auth -async def request_close_post( - request: Request, id: int, comments: str = Form(default=str()) -): - pkgreq = get_pkgreq_by_id(id) - - # `pkgreq`.User can close their own request. - approved = [pkgreq.User] - if not request.user.has_credential(creds.PKGREQ_CLOSE, approved=approved): - # Request user doesn't have permission here: redirect to '/'. - return RedirectResponse("/", status_code=HTTPStatus.SEE_OTHER) - - context = make_context(request, "Close Request") - context["pkgreq"] = pkgreq - - now = time.utcnow() - with db.begin(): - pkgreq.Closer = request.user - pkgreq.ClosureComment = comments - pkgreq.ClosedTS = now - pkgreq.Status = REJECTED_ID - - notify_ = notify.RequestCloseNotification( - request.user.ID, pkgreq.ID, pkgreq.status_display() - ) - notify_.send() - - return RedirectResponse("/requests", status_code=HTTPStatus.SEE_OTHER) diff --git a/aurweb/routers/rpc.py b/aurweb/routers/rpc.py deleted file mode 100644 index 645e6b5a..00000000 --- a/aurweb/routers/rpc.py +++ /dev/null @@ -1,320 +0,0 @@ -""" -RPC API routing module - -For legacy route documentation, see https://aur.archlinux.org/rpc - -Legacy Routes: -- GET /rpc -- POST /rpc - -Legacy example (version 5): /rpc?v=5&type=info&arg=my-package - -For OpenAPI route documentation, see https://aur.archlinux.org/docs - -OpenAPI Routes: -- GET /rpc/v{version}/info/{arg} -- GET /rpc/v{version}/info -- POST /rpc/v{version}/info -- GET /rpc/v{version}/search/{arg} -- GET /rpc/v{version}/search -- POST /rpc/v{version}/search -- GET /rpc/v{version}/suggest/{arg} - -OpenAPI example (version 5): /rpc/v5/info/my-package - -""" - -import hashlib -import re -from http import HTTPStatus -from typing import Optional -from urllib.parse import unquote - -import orjson -from fastapi import APIRouter, Form, Query, Request, Response -from fastapi.responses import JSONResponse - -from aurweb import defaults -from aurweb.exceptions import handle_form_exceptions -from aurweb.ratelimit import check_ratelimit -from aurweb.rpc import RPC, documentation - -router = APIRouter() - - -def parse_args(request: Request): - """Handle legacy logic of 'arg' and 'arg[]' query parameter handling. - - When 'arg' appears as the last argument given to the query string, - that argument is used by itself as one single argument, regardless - of any more 'arg' or 'arg[]' parameters supplied before it. - - When 'arg[]' appears as the last argument given to the query string, - we iterate from last to first and build a list of arguments until - we hit an 'arg'. - - TODO: This handling should be addressed in v6 of the RPC API. This - was most likely a bi-product of legacy handling of versions 1-4 - which we no longer support. - - :param request: FastAPI request - :returns: List of deduced arguments - """ - # Create a list of (key, value) pairs of the given 'arg' and 'arg[]' - # query parameters from last to first. - query = list(reversed(unquote(request.url.query).split("&"))) - parts = [e.split("=", 1) for e in query if e.startswith(("arg=", "arg[]="))] - - args = [] - if parts: - # If we found 'arg' and/or 'arg[]' arguments, we begin processing - # the set of arguments depending on the last key found. - last = parts[0][0] - - if last == "arg": - # If the last key was 'arg', then it is our sole argument. - args.append(parts[0][1]) - else: - # Otherwise, it must be 'arg[]', so traverse backward - # until we reach a non-'arg[]' key. - for key, value in parts: - if key != last: - break - args.append(value) - - return args - - -JSONP_EXPR = re.compile(r"^[a-zA-Z0-9()_.]{1,128}$") - - -async def rpc_request( - request: Request, - v: Optional[int] = None, - type: Optional[str] = None, - by: Optional[str] = defaults.RPC_SEARCH_BY, - arg: Optional[str] = None, - args: Optional[list[str]] = [], - callback: Optional[str] = None, -): - # Create a handle to our RPC class. - rpc = RPC(version=v, type=type) - - # If ratelimit was exceeded, return a 429 Too Many Requests. - if check_ratelimit(request): - return JSONResponse( - rpc.error("Rate limit reached"), - status_code=int(HTTPStatus.TOO_MANY_REQUESTS), - ) - - # If `callback` was provided, produce a text/javascript response - # valid for the jsonp callback. Otherwise, by default, return - # application/json containing `output`. - content_type = "application/json" - if callback: - if not re.match(JSONP_EXPR, callback): - return rpc.error("Invalid callback name.") - - content_type = "text/javascript" - - # Prepare list of arguments for input. If 'arg' was given, it'll - # be a list with one element. - arguments = [] - if request.url.query: - arguments = parse_args(request) - else: - if arg: - arguments.append(arg) - arguments += args - - data = rpc.handle(by=by, args=arguments) - - # Serialize `data` into JSON in a sorted fashion. This way, our - # ETag header produced below will never end up changed. - content = orjson.dumps(data, option=orjson.OPT_SORT_KEYS) - - # Produce an md5 hash based on `output`. - md5 = hashlib.md5() - md5.update(content) - etag = md5.hexdigest() - - # The ETag header expects quotes to surround any identifier. - # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag - headers = {"Content-Type": content_type, "ETag": f'"{etag}"'} - - if_none_match = request.headers.get("If-None-Match", str()) - if if_none_match and if_none_match.strip('\t\n\r" ') == etag: - return Response(headers=headers, status_code=int(HTTPStatus.NOT_MODIFIED)) - - if callback: - content = f"/**/{callback}({content.decode()})" - - return Response(content, headers=headers) - - -@router.get("/rpc.php/") # Temporary! Remove on 03/04 -@router.get("/rpc.php") # Temporary! Remove on 03/04 -@router.get("/rpc/") -@router.get("/rpc") -async def rpc( - request: Request, - v: Optional[int] = Query(default=None), - type: Optional[str] = Query(default=None), - by: Optional[str] = Query(default=defaults.RPC_SEARCH_BY), - arg: Optional[str] = Query(default=None), - args: Optional[list[str]] = Query(default=[], alias="arg[]"), - callback: Optional[str] = Query(default=None), -): - if not request.url.query: - return documentation() - return await rpc_request(request, v, type, by, arg, args, callback) - - -@router.get("/rpc.php/") # Temporary! Remove on 03/04 -@router.get("/rpc.php") # Temporary! Remove on 03/04 -@router.post("/rpc/") -@router.post("/rpc") -@handle_form_exceptions -async def rpc_post( - request: Request, - v: Optional[int] = Form(default=None), - type: Optional[str] = Form(default=None), - by: Optional[str] = Form(default=defaults.RPC_SEARCH_BY), - arg: Optional[str] = Form(default=None), - args: list[str] = Form(default=[], alias="arg[]"), - callback: Optional[str] = Form(default=None), -): - return await rpc_request(request, v, type, by, arg, args, callback) - - -@router.get("/rpc/v{version}/info/{name}") -async def rpc_openapi_info(request: Request, version: int, name: str): - return await rpc_request( - request, - version, - "info", - defaults.RPC_SEARCH_BY, - name, - [], - ) - - -@router.get("/rpc/v{version}/info") -async def rpc_openapi_multiinfo( - request: Request, - version: int, - args: Optional[list[str]] = Query(default=[], alias="arg[]"), -): - arg = args.pop(0) if args else None - return await rpc_request( - request, - version, - "info", - defaults.RPC_SEARCH_BY, - arg, - args, - ) - - -@router.post("/rpc/v{version}/info") -async def rpc_openapi_multiinfo_post( - request: Request, - version: int, -): - data = await request.json() - - args = data.get("arg", []) - if not isinstance(args, list): - rpc = RPC(version, "info") - return JSONResponse( - rpc.error("the 'arg' parameter must be of array type"), - status_code=HTTPStatus.BAD_REQUEST, - ) - - arg = args.pop(0) if args else None - return await rpc_request( - request, - version, - "info", - defaults.RPC_SEARCH_BY, - arg, - args, - ) - - -@router.get("/rpc/v{version}/search/{arg}") -async def rpc_openapi_search_arg( - request: Request, - version: int, - arg: str, - by: Optional[str] = Query(default=defaults.RPC_SEARCH_BY), -): - return await rpc_request( - request, - version, - "search", - by, - arg, - [], - ) - - -@router.get("/rpc/v{version}/search") -async def rpc_openapi_search( - request: Request, - version: int, - arg: Optional[str] = Query(default=str()), - by: Optional[str] = Query(default=defaults.RPC_SEARCH_BY), -): - return await rpc_request( - request, - version, - "search", - by, - arg, - [], - ) - - -@router.post("/rpc/v{version}/search") -async def rpc_openapi_search_post( - request: Request, - version: int, -): - data = await request.json() - by = data.get("by", defaults.RPC_SEARCH_BY) - if not isinstance(by, str): - rpc = RPC(version, "search") - return JSONResponse( - rpc.error("the 'by' parameter must be of string type"), - status_code=HTTPStatus.BAD_REQUEST, - ) - - arg = data.get("arg", str()) - if not isinstance(arg, str): - rpc = RPC(version, "search") - return JSONResponse( - rpc.error("the 'arg' parameter must be of string type"), - status_code=HTTPStatus.BAD_REQUEST, - ) - - return await rpc_request( - request, - version, - "search", - by, - arg, - [], - ) - - -@router.get("/rpc/v{version}/suggest/{arg}") -async def rpc_openapi_suggest(request: Request, version: int, arg: str): - return await rpc_request( - request, - version, - "suggest", - defaults.RPC_SEARCH_BY, - arg, - [], - ) diff --git a/aurweb/routers/rss.py b/aurweb/routers/rss.py deleted file mode 100644 index 180cbb23..00000000 --- a/aurweb/routers/rss.py +++ /dev/null @@ -1,89 +0,0 @@ -from fastapi import APIRouter, Request -from fastapi.responses import Response -from feedgen.feed import FeedGenerator - -from aurweb import config, db, filters -from aurweb.cache import lambda_cache -from aurweb.models import Package, PackageBase - -router = APIRouter() - - -def make_rss_feed(request: Request, packages: list): - """Create an RSS Feed string for some packages. - - :param request: A FastAPI request - :param packages: A list of packages to add to the RSS feed - :return: RSS Feed string - """ - - feed = FeedGenerator() - feed.title("AUR Newest Packages") - feed.description("The latest and greatest packages in the AUR") - base = f"{request.url.scheme}://{request.url.netloc}" - feed.link(href=base, rel="alternate") - feed.link(href=f"{base}/rss", rel="self") - feed.image( - title="AUR Newest Packages", - url=f"{base}/static/css/archnavbar/aurlogo.png", - link=base, - description="AUR Newest Packages Feed", - ) - - for pkg in packages: - entry = feed.add_entry(order="append") - entry.title(pkg.Name) - entry.link(href=f"{base}/packages/{pkg.Name}", rel="alternate") - entry.description(pkg.Description or str()) - dt = filters.timestamp_to_datetime(pkg.Timestamp) - dt = filters.as_timezone(dt, request.user.Timezone) - entry.pubDate(dt.strftime("%Y-%m-%d %H:%M:%S%z")) - entry.guid(f"{pkg.Name}-{pkg.Timestamp}") - - return feed.rss_str() - - -@router.get("/rss/") -async def rss(request: Request): - packages = ( - db.query(Package) - .join(PackageBase) - .order_by(PackageBase.SubmittedTS.desc()) - .limit(100) - .with_entities( - Package.Name, - Package.Description, - PackageBase.SubmittedTS.label("Timestamp"), - ) - ) - - # we use redis for caching the results of the feedgen - cache_expire = config.getint("cache", "expiry_time_rss", 300) - feed = lambda_cache("rss", lambda: make_rss_feed(request, packages), cache_expire) - - response = Response(feed, media_type="application/rss+xml") - return response - - -@router.get("/rss/modified") -async def rss_modified(request: Request): - packages = ( - db.query(Package) - .join(PackageBase) - .order_by(PackageBase.ModifiedTS.desc()) - .limit(100) - .with_entities( - Package.Name, - Package.Description, - PackageBase.ModifiedTS.label("Timestamp"), - ) - ) - - # we use redis for caching the results of the feedgen - cache_expire = config.getint("cache", "expiry_time_rss", 300) - feed = lambda_cache( - "rss_modified", lambda: make_rss_feed(request, packages), cache_expire - ) - - response = Response(feed, media_type="application/rss+xml") - return response diff --git a/aurweb/routers/sso.py b/aurweb/routers/sso.py deleted file mode 100644 index fb99edd6..00000000 --- a/aurweb/routers/sso.py +++ /dev/null @@ -1,199 +0,0 @@ -import time -import uuid -from http import HTTPStatus -from urllib.parse import urlencode - -import fastapi -from authlib.integrations.starlette_client import OAuth, OAuthError -from fastapi import Depends, HTTPException -from fastapi.responses import RedirectResponse -from sqlalchemy.sql import select -from starlette.requests import Request - -import aurweb.config -import aurweb.db -from aurweb import util -from aurweb.l10n import get_translator_for_request -from aurweb.schema import Bans, Sessions, Users - -router = fastapi.APIRouter() - -oauth = OAuth() -oauth.register( - name="sso", - server_metadata_url=aurweb.config.get("sso", "openid_configuration"), - client_kwargs={"scope": "openid"}, - client_id=aurweb.config.get("sso", "client_id"), - client_secret=aurweb.config.get("sso", "client_secret"), -) - - -@router.get("/sso/login") -async def login(request: Request, redirect: str = None): - """ - Redirect the user to the SSO provider’s login page. - - We specify prompt=login to force the user to input their credentials even - if they’re already logged on the SSO. This is less practical, but given AUR - has the potential to impact many users, better safe than sorry. - - The `redirect` argument is a query parameter specifying the post-login - redirect URL. - """ - authenticate_url = ( - aurweb.config.get("options", "aur_location") + "/sso/authenticate" - ) - if redirect: - authenticate_url = authenticate_url + "?" + urlencode([("redirect", redirect)]) - return await oauth.sso.authorize_redirect(request, authenticate_url, prompt="login") - - -def is_account_suspended(conn, user_id): - row = conn.execute( - select([Users.c.Suspended]).where(Users.c.ID == user_id) - ).fetchone() - return row is not None and bool(row[0]) - - -def open_session(request, conn, user_id): - """ - Create a new user session into the database. Return its SID. - """ - if is_account_suspended(conn, user_id): - _ = get_translator_for_request(request) - raise HTTPException( - status_code=HTTPStatus.FORBIDDEN, detail=_("Account suspended") - ) - # TODO This is a terrible message because it could imply the attempt at - # logging in just caused the suspension. - - sid = uuid.uuid4().hex - conn.execute( - Sessions.insert().values( - UsersID=user_id, - SessionID=sid, - LastUpdateTS=time.time(), - ) - ) - - # Update user’s last login information. - conn.execute( - Users.update() - .where(Users.c.ID == user_id) - .values( - LastLogin=int(time.time()), LastLoginIPAddress=util.get_client_ip(request) - ) - ) - - return sid - - -def is_ip_banned(conn, ip): - """ - Check if an IP is banned. `ip` is a string and may be an IPv4 as well as an - IPv6, depending on the server’s configuration. - """ - result = conn.execute(Bans.select().where(Bans.c.IPAddress == ip)) - return result.fetchone() is not None - - -def is_aur_url(url): - aur_location = aurweb.config.get("options", "aur_location") - if not aur_location.endswith("/"): - aur_location = aur_location + "/" - return url.startswith(aur_location) - - -@router.get("/sso/authenticate") -async def authenticate( - request: Request, redirect: str = None, conn=Depends(aurweb.db.connect) -): - """ - Receive an OpenID Connect ID token, validate it, then process it to create - an new AUR session. - """ - if is_ip_banned(conn, util.get_client_ip(request)): - _ = get_translator_for_request(request) - raise HTTPException( - status_code=HTTPStatus.FORBIDDEN, - detail=_( - "The login form is currently disabled for your IP address, " - "probably due to sustained spam attacks. Sorry for the " - "inconvenience." - ), - ) - - try: - token = await oauth.sso.authorize_access_token(request) - user = await oauth.sso.parse_id_token(request, token) - except OAuthError: - # Here, most OAuth errors should be caused by forged or expired tokens. - # Let’s give attackers as little information as possible. - _ = get_translator_for_request(request) - raise HTTPException( - status_code=HTTPStatus.BAD_REQUEST, - detail=_("Bad OAuth token. Please retry logging in from the start."), - ) - - sub = user.get("sub") # this is the SSO account ID in JWT terminology - if not sub: - _ = get_translator_for_request(request) - raise HTTPException( - status_code=HTTPStatus.BAD_REQUEST, - detail=_("JWT is missing its `sub` field."), - ) - - aur_accounts = conn.execute( - select([Users.c.ID]).where(Users.c.SSOAccountID == sub) - ).fetchall() - if not aur_accounts: - return "Sorry, we don’t seem to know you Sir " + sub - elif len(aur_accounts) == 1: - sid = open_session(request, conn, aur_accounts[0][Users.c.ID]) - response = RedirectResponse( - redirect if redirect and is_aur_url(redirect) else "/" - ) - secure_cookies = aurweb.config.getboolean("options", "disable_http_login") - response.set_cookie( - key="AURSID", value=sid, httponly=True, secure=secure_cookies - ) - if "id_token" in token: - # We save the id_token for the SSO logout. It’s not too important - # though, so if we can’t find it, we can live without it. - response.set_cookie( - key="SSO_ID_TOKEN", - value=token["id_token"], - path="/sso/", - httponly=True, - secure=secure_cookies, - ) - return util.add_samesite_fields(response, "strict") - else: - # We’ve got a severe integrity violation. - raise Exception("Multiple accounts found for SSO account " + sub) - - -@router.get("/sso/logout") -async def logout(request: Request): - """ - Disconnect the user from the SSO provider, potentially affecting every - other Arch service. AUR logout is performed by `/logout`, before it - redirects to `/sso/logout`. - - Based on the OpenID Connect Session Management specification: - https://openid.net/specs/openid-connect-session-1_0.html#RPLogout - """ - id_token = request.cookies.get("SSO_ID_TOKEN") - if not id_token: - return RedirectResponse("/") - - metadata = await oauth.sso.load_server_metadata() - query = urlencode( - { - "post_logout_redirect_uri": aurweb.config.get("options", "aur_location"), - "id_token_hint": id_token, - } - ) - response = RedirectResponse(metadata["end_session_endpoint"] + "?" + query) - response.delete_cookie("SSO_ID_TOKEN", path="/sso/") - return response diff --git a/aurweb/rpc.py b/aurweb/rpc.py deleted file mode 100644 index 5fcbbb78..00000000 --- a/aurweb/rpc.py +++ /dev/null @@ -1,481 +0,0 @@ -import os -from collections import defaultdict -from typing import Any, Callable, NewType, Union - -from fastapi.responses import HTMLResponse -from sqlalchemy import and_, literal, orm - -import aurweb.config as config -from aurweb import db, defaults, models, time -from aurweb.exceptions import RPCError -from aurweb.filters import number_format -from aurweb.models.package_base import popularity -from aurweb.packages.search import RPCSearch - -TYPE_MAPPING = { - "depends": "Depends", - "makedepends": "MakeDepends", - "checkdepends": "CheckDepends", - "optdepends": "OptDepends", - "conflicts": "Conflicts", - "provides": "Provides", - "replaces": "Replaces", -} - -DataGenerator = NewType("DataGenerator", Callable[[models.Package], dict[str, Any]]) - - -def documentation(): - aurwebdir = config.get("options", "aurwebdir") - rpc_doc = os.path.join(aurwebdir, "doc", "rpc.html") - - if not os.path.exists(rpc_doc): - raise OSError("doc/rpc.html could not be read") - - with open(rpc_doc) as f: - data = f.read() - return HTMLResponse(data) - - -class RPC: - """RPC API handler class. - - There are various pieces to RPC's process, and encapsulating them - inside of a class means that external users do not abuse the - RPC implementation to achieve goals. We call type handlers - by taking a reference to the callback named "_handle_{type}_type(...)", - and if the handler does not exist, we return a not implemented - error to the API user. - - EXPOSED_VERSIONS holds the set of versions that the API - officially supports. - - EXPOSED_TYPES holds the set of types that the API officially - supports. - - ALIASES holds an alias mapping of type -> type strings. - - We should focus on privatizing implementation helpers and - focusing on performance in the code used. - """ - - # A set of RPC versions supported by this API. - EXPOSED_VERSIONS = {5} - - # A set of RPC types supported by this API. - EXPOSED_TYPES = { - "info", - "multiinfo", - "search", - "msearch", - "suggest", - "suggest-pkgbase", - } - - # A mapping of type aliases. - TYPE_ALIASES = {"info": "multiinfo"} - - EXPOSED_BYS = { - "name-desc", - "name", - "maintainer", - "depends", - "makedepends", - "optdepends", - "checkdepends", - "provides", - "conflicts", - "replaces", - "groups", - "submitter", - "keywords", - "comaintainers", - } - - # A mapping of by aliases. - BY_ALIASES = { - "name-desc": "nd", - "name": "n", - "maintainer": "m", - "submitter": "s", - "keywords": "k", - "comaintainers": "c", - } - - def __init__(self, version: int = 0, type: str = None) -> "RPC": - self.version = version - self.type = RPC.TYPE_ALIASES.get(type, type) - - def error(self, message: str) -> dict[str, Any]: - return { - "version": self.version, - "results": [], - "resultcount": 0, - "type": "error", - "error": message, - } - - def _verify_inputs(self, by: str = [], args: list[str] = []) -> None: - if self.version is None: - raise RPCError("Please specify an API version.") - - if self.version not in RPC.EXPOSED_VERSIONS: - raise RPCError("Invalid version specified.") - - if by not in RPC.EXPOSED_BYS: - raise RPCError("Incorrect by field specified.") - - if self.type is None: - raise RPCError("No request type/data specified.") - - if self.type not in RPC.EXPOSED_TYPES: - raise RPCError("Incorrect request type specified.") - - def _enforce_args(self, args: list[str]) -> None: - if not args: - raise RPCError("No request type/data specified.") - - def get_json_data(self, package: models.Package) -> dict[str, Any]: - """Produce dictionary data of one Package that can be JSON-serialized. - - :param package: Package instance - :returns: JSON-serializable dictionary - """ - - # Normalize Popularity for RPC output to 6 decimal precision - pop = popularity(package, time.utcnow()) - pop = 0 if not pop else float(number_format(pop, 6)) - - snapshot_uri = config.get("options", "snapshot_uri") - return { - "ID": package.ID, - "Name": package.Name, - "PackageBaseID": package.PackageBaseID, - "PackageBase": package.PackageBaseName, - # Maintainer should be set following this update if one exists. - "Maintainer": package.Maintainer, - "Submitter": package.Submitter, - "Version": package.Version, - "Description": package.Description, - "URL": package.URL, - "URLPath": snapshot_uri % package.PackageBaseName, - "NumVotes": package.NumVotes, - "Popularity": pop, - "OutOfDate": package.OutOfDateTS, - "FirstSubmitted": package.SubmittedTS, - "LastModified": package.ModifiedTS, - } - - def get_info_json_data(self, package: models.Package) -> dict[str, Any]: - data = self.get_json_data(package) - - # All info results have _at least_ an empty list of - # License and Keywords. - data.update({"License": [], "Keywords": []}) - - # If we actually got extra_info records, update data with - # them for this particular package. - if self.extra_info: - data.update(self.extra_info.get(package.ID, {})) - - return data - - def _assemble_json_data( - self, packages: list[models.Package], data_generator: DataGenerator - ) -> list[dict[str, Any]]: - """ - Assemble JSON data out of a list of packages. - - :param packages: A list of Package instances or a Package ORM query - :param data_generator: Generator callable of single-Package JSON data - """ - return [data_generator(pkg) for pkg in packages] - - def entities(self, query: orm.Query) -> orm.Query: - """Select specific RPC columns on `query`.""" - Submitter = orm.aliased(models.User) - - query = ( - query.join( - Submitter, - Submitter.ID == models.PackageBase.SubmitterUID, - isouter=True, - ) - .with_entities( - models.Package.ID, - models.Package.Name, - models.Package.Version, - models.Package.Description, - models.Package.URL, - models.Package.PackageBaseID, - models.PackageBase.Name.label("PackageBaseName"), - models.PackageBase.NumVotes, - models.PackageBase.Popularity, - models.PackageBase.PopularityUpdated, - models.PackageBase.OutOfDateTS, - models.PackageBase.SubmittedTS, - models.PackageBase.ModifiedTS, - models.User.Username.label("Maintainer"), - Submitter.Username.label("Submitter"), - ) - .group_by(models.Package.ID) - ) - - return query - - def subquery(self, ids: set[int]): - Package = models.Package - PackageKeyword = models.PackageKeyword - - subqueries = [ - # PackageDependency - db.query(models.PackageDependency) - .join(models.DependencyType) - .filter(models.PackageDependency.PackageID.in_(ids)) - .with_entities( - models.PackageDependency.PackageID.label("ID"), - models.DependencyType.Name.label("Type"), - models.PackageDependency.DepName.label("Name"), - models.PackageDependency.DepCondition.label("Cond"), - ) - .distinct() - .order_by("Name"), - # PackageRelation - db.query(models.PackageRelation) - .join(models.RelationType) - .filter(models.PackageRelation.PackageID.in_(ids)) - .with_entities( - models.PackageRelation.PackageID.label("ID"), - models.RelationType.Name.label("Type"), - models.PackageRelation.RelName.label("Name"), - models.PackageRelation.RelCondition.label("Cond"), - ) - .distinct() - .order_by("Name"), - # Groups - db.query(models.PackageGroup) - .join( - models.Group, - and_( - models.PackageGroup.GroupID == models.Group.ID, - models.PackageGroup.PackageID.in_(ids), - ), - ) - .with_entities( - models.PackageGroup.PackageID.label("ID"), - literal("Groups").label("Type"), - models.Group.Name.label("Name"), - literal(str()).label("Cond"), - ) - .distinct() - .order_by("Name"), - # Licenses - db.query(models.PackageLicense) - .join(models.License, models.PackageLicense.LicenseID == models.License.ID) - .filter(models.PackageLicense.PackageID.in_(ids)) - .with_entities( - models.PackageLicense.PackageID.label("ID"), - literal("License").label("Type"), - models.License.Name.label("Name"), - literal(str()).label("Cond"), - ) - .distinct() - .order_by("Name"), - # Keywords - db.query(models.PackageKeyword) - .join( - models.Package, - and_( - Package.PackageBaseID == PackageKeyword.PackageBaseID, - Package.ID.in_(ids), - ), - ) - .with_entities( - models.Package.ID.label("ID"), - literal("Keywords").label("Type"), - models.PackageKeyword.Keyword.label("Name"), - literal(str()).label("Cond"), - ) - .distinct() - .order_by("Name"), - # Co-Maintainer - db.query(models.PackageComaintainer) - .join(models.User, models.User.ID == models.PackageComaintainer.UsersID) - .join( - models.Package, - models.Package.PackageBaseID - == models.PackageComaintainer.PackageBaseID, - ) - .with_entities( - models.Package.ID, - literal("CoMaintainers").label("Type"), - models.User.Username.label("Name"), - literal(str()).label("Cond"), - ) - .distinct() # A package could have the same co-maintainer multiple times - .order_by("Name"), - ] - - # Union all subqueries together. - query = subqueries[0].union_all(*subqueries[1:]).all() - - # Store our extra information in a class-wise dictionary, - # which contains package id -> extra info dict mappings. - self.extra_info = defaultdict(lambda: defaultdict(list)) - for record in query: - type_ = TYPE_MAPPING.get(record.Type, record.Type) - - name = record.Name - if record.Cond: - name += record.Cond - - self.extra_info[record.ID][type_].append(name) - - def _handle_multiinfo_type( - self, args: list[str] = [], **kwargs - ) -> list[dict[str, Any]]: - self._enforce_args(args) - args = set(args) - - packages = ( - db.query(models.Package) - .join(models.PackageBase) - .join( - models.User, - models.User.ID == models.PackageBase.MaintainerUID, - isouter=True, - ) - .filter(models.Package.Name.in_(args)) - ) - - max_results = config.getint("options", "max_rpc_results") - packages = self.entities(packages).limit(max_results + 1) - - if packages.count() > max_results: - raise RPCError("Too many package results.") - - ids = {pkg.ID for pkg in packages} - self.subquery(ids) - - return self._assemble_json_data(packages, self.get_info_json_data) - - def _handle_search_type( - self, by: str = defaults.RPC_SEARCH_BY, args: list[str] = [] - ) -> list[dict[str, Any]]: - # If `by` isn't maintainer and we don't have any args, raise an error. - # In maintainer's case, return all orphans if there are no args, - # so we need args to pass through to the handler without errors. - if by != "m" and not len(args): - raise RPCError("No request type/data specified.") - - arg = args[0] if args else str() - if by != "m" and len(arg) < 2: - raise RPCError("Query arg too small.") - - search = RPCSearch() - search.search_by(by, arg) - - max_results = config.getint("options", "max_rpc_results") - - query = self.entities(search.results()).limit(max_results + 1) - - # For "provides", we need to union our relation search - # with an exact search since a package always provides itself. - # Turns out that doing this with an OR statement is extremely slow - if by == "provides": - search = RPCSearch() - search._search_by_exact_name(arg) - query = query.union(self.entities(search.results())) - - results = query.all() - if len(results) > max_results: - raise RPCError("Too many package results.") - - data = self._assemble_json_data(results, self.get_json_data) - - # remove Submitter for search results - for pkg in data: - pkg.pop("Submitter") - - return data - - def _handle_msearch_type( - self, args: list[str] = [], **kwargs - ) -> list[dict[str, Any]]: - return self._handle_search_type(by="m", args=args) - - def _handle_suggest_type(self, args: list[str] = [], **kwargs) -> list[str]: - if not args: - return [] - - arg = args[0] - packages = ( - db.query(models.Package.Name) - .join(models.PackageBase) - .filter(models.Package.Name.like(f"{arg}%")) - .order_by(models.Package.Name.asc()) - .limit(20) - ) - return [pkg.Name for pkg in packages] - - def _handle_suggest_pkgbase_type(self, args: list[str] = [], **kwargs) -> list[str]: - if not args: - return [] - - arg = args[0] - packages = ( - db.query(models.PackageBase.Name) - .filter(models.PackageBase.Name.like(f"{arg}%")) - .order_by(models.PackageBase.Name.asc()) - .limit(20) - ) - return [pkg.Name for pkg in packages] - - def _is_suggestion(self) -> bool: - return self.type.startswith("suggest") - - def _handle_callback( - self, by: str, args: list[str] - ) -> Union[list[dict[str, Any]], list[str]]: - # Get a handle to our callback and trap an RPCError with - # an empty list of results based on callback's execution. - callback = getattr(self, f"_handle_{self.type.replace('-', '_')}_type") - results = callback(by=by, args=args) - return results - - def handle( - self, by: str = defaults.RPC_SEARCH_BY, args: list[str] = [] - ) -> Union[list[dict[str, Any]], dict[str, Any]]: - """Request entrypoint. A router should pass v, type and args - to this function and expect an output dictionary to be returned. - - :param v: RPC version argument - :param type: RPC type argument - :param args: Deciphered list of arguments based on arg/arg[] inputs - """ - # Prepare our output data dictionary with some basic keys. - data = {"version": self.version, "type": self.type} - - # Run some verification on our given arguments. - try: - self._verify_inputs(by=by, args=args) - except RPCError as exc: - return self.error(str(exc)) - - # Convert by to its aliased value if it has one. - by = RPC.BY_ALIASES.get(by, by) - - # Process the requested handler. - try: - results = self._handle_callback(by, args) - except RPCError as exc: - return self.error(str(exc)) - - # These types are special: we produce a different kind of - # successful JSON output: a list of results. - if self._is_suggestion(): - return results - - # Return JSON output. - data.update({"resultcount": len(results), "results": results}) - return data diff --git a/aurweb/schema.py b/aurweb/schema.py deleted file mode 100644 index 76fd6556..00000000 --- a/aurweb/schema.py +++ /dev/null @@ -1,623 +0,0 @@ -""" -Schema of aurweb's database. - -Changes here should always be accompanied by an Alembic migration, which can be -usually be automatically generated. See `migrations/README` for details. -""" - -from sqlalchemy import ( - CHAR, - TIMESTAMP, - Column, - ForeignKey, - Index, - MetaData, - String, - Table, - Text, - text, -) -from sqlalchemy.dialects.mysql import BIGINT, DECIMAL, INTEGER, TINYINT -from sqlalchemy.ext.compiler import compiles - -import aurweb.config - -db_backend = aurweb.config.get("database", "backend") - - -@compiles(TINYINT, "sqlite") -def compile_tinyint_sqlite(type_, compiler, **kw): # pragma: no cover - """TINYINT is not supported on SQLite. Substitute it with INTEGER.""" - return "INTEGER" - - -@compiles(BIGINT, "sqlite") -def compile_bigint_sqlite(type_, compiler, **kw): # pragma: no cover - """ - For SQLite's AUTOINCREMENT to work on BIGINT columns, we need to map BIGINT - to INTEGER. Aside from that, BIGINT is the same as INTEGER for SQLite. - - See https://docs.sqlalchemy.org/en/13/dialects/sqlite.html#allowing-autoincrement-behavior-sqlalchemy-types-other-than-integer-integer - """ # noqa: E501 - return "INTEGER" - - -metadata = MetaData() - -# Define the Account Types for the AUR. -AccountTypes = Table( - "AccountTypes", - metadata, - Column("ID", TINYINT(unsigned=True), primary_key=True), - Column("AccountType", String(32), nullable=False, server_default=text("''")), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# User information for each user regardless of type. -Users = Table( - "Users", - metadata, - Column("ID", INTEGER(unsigned=True), primary_key=True), - Column( - "AccountTypeID", - ForeignKey("AccountTypes.ID", ondelete="NO ACTION"), - nullable=False, - server_default=text("1"), - ), - Column( - "Suspended", TINYINT(unsigned=True), nullable=False, server_default=text("0") - ), - Column("Username", String(32), nullable=False, unique=True), - Column("Email", String(254), nullable=False, unique=True), - Column("BackupEmail", String(254)), - Column( - "HideEmail", TINYINT(unsigned=True), nullable=False, server_default=text("0") - ), - Column("Passwd", String(255), nullable=False), - Column("Salt", CHAR(32), nullable=False, server_default=text("''")), - Column("ResetKey", CHAR(32), nullable=False, server_default=text("''")), - Column("RealName", String(64), nullable=False, server_default=text("''")), - Column("LangPreference", String(6), nullable=False, server_default=text("'en'")), - Column("Timezone", String(32), nullable=False, server_default=text("'UTC'")), - Column("Homepage", Text), - Column("IRCNick", String(32), nullable=False, server_default=text("''")), - Column("PGPKey", String(40)), - Column( - "LastLogin", BIGINT(unsigned=True), nullable=False, server_default=text("0") - ), - Column("LastLoginIPAddress", String(45)), - Column( - "LastSSHLogin", BIGINT(unsigned=True), nullable=False, server_default=text("0") - ), - Column("LastSSHLoginIPAddress", String(45)), - Column( - "InactivityTS", BIGINT(unsigned=True), nullable=False, server_default=text("0") - ), - Column( - "RegistrationTS", - TIMESTAMP, - nullable=False, - server_default=text("CURRENT_TIMESTAMP"), - ), - Column("CommentNotify", TINYINT(1), nullable=False, server_default=text("1")), - Column("UpdateNotify", TINYINT(1), nullable=False, server_default=text("0")), - Column("OwnershipNotify", TINYINT(1), nullable=False, server_default=text("1")), - Column("SSOAccountID", String(255), nullable=True, unique=True), - Index("UsersAccountTypeID", "AccountTypeID"), - Column( - "HideDeletedComments", - TINYINT(unsigned=True), - nullable=False, - server_default=text("0"), - ), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# SSH public keys used for the aurweb SSH/Git interface. -SSHPubKeys = Table( - "SSHPubKeys", - metadata, - Column("UserID", ForeignKey("Users.ID", ondelete="CASCADE"), nullable=False), - Column("Fingerprint", String(44), primary_key=True), - Column("PubKey", String(4096), nullable=False), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_bin", -) - - -# Track Users logging in/out of AUR web site. -Sessions = Table( - "Sessions", - metadata, - Column("UsersID", ForeignKey("Users.ID", ondelete="CASCADE"), nullable=False), - Column("SessionID", CHAR(32), nullable=False, unique=True), - Column("LastUpdateTS", BIGINT(unsigned=True), nullable=False), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_bin", -) - - -# Information on package bases -PackageBases = Table( - "PackageBases", - metadata, - Column("ID", INTEGER(unsigned=True), primary_key=True), - Column("Name", String(255), nullable=False, unique=True), - Column( - "NumVotes", INTEGER(unsigned=True), nullable=False, server_default=text("0") - ), - Column( - "Popularity", - DECIMAL(10, 6, unsigned=True) if db_backend == "mysql" else String(17), - nullable=False, - server_default=text("0"), - ), - Column( - "PopularityUpdated", - TIMESTAMP, - nullable=False, - server_default=text("'1970-01-01 00:00:01.000000'"), - ), - Column("OutOfDateTS", BIGINT(unsigned=True)), - Column("FlaggerComment", Text, nullable=False), - Column("SubmittedTS", BIGINT(unsigned=True), nullable=False), - Column("ModifiedTS", BIGINT(unsigned=True), nullable=False), - Column( - "FlaggerUID", ForeignKey("Users.ID", ondelete="SET NULL") - ), # who flagged the package out-of-date? - # deleting a user will cause packages to be orphaned, not deleted - Column( - "SubmitterUID", ForeignKey("Users.ID", ondelete="SET NULL") - ), # who submitted it? - Column("MaintainerUID", ForeignKey("Users.ID", ondelete="SET NULL")), # User - Column("PackagerUID", ForeignKey("Users.ID", ondelete="SET NULL")), # Last packager - Index("BasesMaintainerUID", "MaintainerUID"), - Index("BasesNumVotes", "NumVotes"), - Index("BasesPackagerUID", "PackagerUID"), - Index("BasesSubmitterUID", "SubmitterUID"), - Index("BasesSubmittedTS", "SubmittedTS"), - Index("BasesModifiedTS", "ModifiedTS"), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Keywords of package bases -PackageKeywords = Table( - "PackageKeywords", - metadata, - Column( - "PackageBaseID", - ForeignKey("PackageBases.ID", ondelete="CASCADE"), - primary_key=True, - nullable=True, - ), - Column( - "Keyword", - String(255), - primary_key=True, - nullable=False, - server_default=text("''"), - ), - Index("KeywordsPackageBaseID", "PackageBaseID"), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Information about the actual packages -Packages = Table( - "Packages", - metadata, - Column("ID", INTEGER(unsigned=True), primary_key=True), - Column( - "PackageBaseID", - ForeignKey("PackageBases.ID", ondelete="CASCADE"), - nullable=False, - ), - Column("Name", String(255), nullable=False, unique=True), - Column("Version", String(255), nullable=False, server_default=text("''")), - Column("Description", String(255)), - Column("URL", String(8000)), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Information about licenses -Licenses = Table( - "Licenses", - metadata, - Column("ID", INTEGER(unsigned=True), primary_key=True), - Column("Name", String(255), nullable=False, unique=True), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Information about package-license-relations -PackageLicenses = Table( - "PackageLicenses", - metadata, - Column( - "PackageID", - ForeignKey("Packages.ID", ondelete="CASCADE"), - primary_key=True, - nullable=True, - ), - Column( - "LicenseID", - ForeignKey("Licenses.ID", ondelete="CASCADE"), - primary_key=True, - nullable=True, - ), - mysql_engine="InnoDB", -) - - -# Information about groups -Groups = Table( - "Groups", - metadata, - Column("ID", INTEGER(unsigned=True), primary_key=True), - Column("Name", String(255), nullable=False, unique=True), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Information about package-group-relations -PackageGroups = Table( - "PackageGroups", - metadata, - Column( - "PackageID", - ForeignKey("Packages.ID", ondelete="CASCADE"), - primary_key=True, - nullable=True, - ), - Column( - "GroupID", - ForeignKey("Groups.ID", ondelete="CASCADE"), - primary_key=True, - nullable=True, - ), - mysql_engine="InnoDB", -) - - -# Define the package dependency types -DependencyTypes = Table( - "DependencyTypes", - metadata, - Column("ID", TINYINT(unsigned=True), primary_key=True), - Column("Name", String(32), nullable=False, server_default=text("''")), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Track which dependencies a package has -PackageDepends = Table( - "PackageDepends", - metadata, - Column("PackageID", ForeignKey("Packages.ID", ondelete="CASCADE"), nullable=False), - Column( - "DepTypeID", - ForeignKey("DependencyTypes.ID", ondelete="NO ACTION"), - nullable=False, - ), - Column("DepName", String(255), nullable=False), - Column("DepDesc", String(255)), - Column("DepCondition", String(255)), - Column("DepArch", String(255)), - Index("DependsDepName", "DepName"), - Index("DependsPackageID", "PackageID"), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Define the package relation types -RelationTypes = Table( - "RelationTypes", - metadata, - Column("ID", TINYINT(unsigned=True), primary_key=True), - Column("Name", String(32), nullable=False, server_default=text("''")), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Track which conflicts, provides and replaces a package has -PackageRelations = Table( - "PackageRelations", - metadata, - Column("PackageID", ForeignKey("Packages.ID", ondelete="CASCADE"), nullable=False), - Column( - "RelTypeID", - ForeignKey("RelationTypes.ID", ondelete="NO ACTION"), - nullable=False, - ), - Column("RelName", String(255), nullable=False), - Column("RelCondition", String(255)), - Column("RelArch", String(255)), - Index("RelationsPackageID", "PackageID"), - Index("RelationsRelName", "RelName"), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Track which sources a package has -PackageSources = Table( - "PackageSources", - metadata, - Column("PackageID", ForeignKey("Packages.ID", ondelete="CASCADE"), nullable=False), - Column("Source", String(8000), nullable=False, server_default=text("'/dev/null'")), - Column("SourceArch", String(255)), - Index("SourcesPackageID", "PackageID"), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Track votes for packages -PackageVotes = Table( - "PackageVotes", - metadata, - Column("UsersID", ForeignKey("Users.ID", ondelete="CASCADE"), nullable=False), - Column( - "PackageBaseID", - ForeignKey("PackageBases.ID", ondelete="CASCADE"), - nullable=False, - ), - Column("VoteTS", BIGINT(unsigned=True), nullable=False), - Index("VoteUsersIDPackageID", "UsersID", "PackageBaseID", unique=True), - Index("VotesPackageBaseID", "PackageBaseID"), - Index("VotesUsersID", "UsersID"), - mysql_engine="InnoDB", -) - - -# Record comments for packages -PackageComments = Table( - "PackageComments", - metadata, - Column("ID", BIGINT(unsigned=True), primary_key=True), - Column( - "PackageBaseID", - ForeignKey("PackageBases.ID", ondelete="CASCADE"), - nullable=False, - ), - Column("UsersID", ForeignKey("Users.ID", ondelete="SET NULL")), - Column("Comments", Text, nullable=False), - Column("RenderedComment", Text, nullable=False), - Column( - "CommentTS", BIGINT(unsigned=True), nullable=False, server_default=text("0") - ), - Column("EditedTS", BIGINT(unsigned=True)), - Column("EditedUsersID", ForeignKey("Users.ID", ondelete="SET NULL")), - Column("DelTS", BIGINT(unsigned=True)), - Column("DelUsersID", ForeignKey("Users.ID", ondelete="CASCADE")), - Column("PinnedTS", BIGINT(unsigned=True), nullable=False, server_default=text("0")), - Index("CommentsPackageBaseID", "PackageBaseID"), - Index("CommentsUsersID", "UsersID"), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Package base co-maintainers -PackageComaintainers = Table( - "PackageComaintainers", - metadata, - Column("UsersID", ForeignKey("Users.ID", ondelete="CASCADE"), nullable=False), - Column( - "PackageBaseID", - ForeignKey("PackageBases.ID", ondelete="CASCADE"), - nullable=False, - ), - Column("Priority", INTEGER(unsigned=True), nullable=False), - Index("ComaintainersPackageBaseID", "PackageBaseID"), - Index("ComaintainersUsersID", "UsersID"), - mysql_engine="InnoDB", -) - - -# Package base notifications -PackageNotifications = Table( - "PackageNotifications", - metadata, - Column( - "PackageBaseID", - ForeignKey("PackageBases.ID", ondelete="CASCADE"), - nullable=False, - ), - Column("UserID", ForeignKey("Users.ID", ondelete="CASCADE"), nullable=False), - Index("NotifyUserIDPkgID", "UserID", "PackageBaseID", unique=True), - mysql_engine="InnoDB", -) - - -# Package name blacklist -PackageBlacklist = Table( - "PackageBlacklist", - metadata, - Column("ID", INTEGER(unsigned=True), primary_key=True), - Column("Name", String(64), nullable=False, unique=True), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Providers in the official repositories -OfficialProviders = Table( - "OfficialProviders", - metadata, - Column("ID", INTEGER(unsigned=True), primary_key=True), - Column("Name", String(64), nullable=False), - Column("Repo", String(64), nullable=False), - Column("Provides", String(64), nullable=False), - Index("ProviderNameProvides", "Name", "Provides", unique=True), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_bin", -) - - -# Define package request types -RequestTypes = Table( - "RequestTypes", - metadata, - Column("ID", TINYINT(unsigned=True), primary_key=True), - Column("Name", String(32), nullable=False, server_default=text("''")), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Package requests -PackageRequests = Table( - "PackageRequests", - metadata, - Column("ID", BIGINT(unsigned=True), primary_key=True), - Column( - "ReqTypeID", ForeignKey("RequestTypes.ID", ondelete="NO ACTION"), nullable=False - ), - Column("PackageBaseID", ForeignKey("PackageBases.ID", ondelete="SET NULL")), - Column("PackageBaseName", String(255), nullable=False), - Column("MergeBaseName", String(255)), - Column("UsersID", ForeignKey("Users.ID", ondelete="SET NULL")), - Column("Comments", Text, nullable=False), - Column("ClosureComment", Text, nullable=False), - Column( - "RequestTS", BIGINT(unsigned=True), nullable=False, server_default=text("0") - ), - Column("ClosedTS", BIGINT(unsigned=True)), - Column("ClosedUID", ForeignKey("Users.ID", ondelete="SET NULL")), - Column("Status", TINYINT(unsigned=True), nullable=False, server_default=text("0")), - Index("RequestsPackageBaseID", "PackageBaseID"), - Index("RequestsUsersID", "UsersID"), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Vote information -VoteInfo = Table( - "VoteInfo", - metadata, - Column("ID", INTEGER(unsigned=True), primary_key=True), - Column("Agenda", Text, nullable=False), - Column("User", String(32), nullable=False), - Column("Submitted", BIGINT(unsigned=True), nullable=False), - Column("End", BIGINT(unsigned=True), nullable=False), - Column( - "Quorum", - DECIMAL(2, 2, unsigned=True) if db_backend == "mysql" else String(5), - nullable=False, - ), - Column("SubmitterID", ForeignKey("Users.ID", ondelete="CASCADE"), nullable=False), - Column("Yes", INTEGER(unsigned=True), nullable=False, server_default=text("'0'")), - Column("No", INTEGER(unsigned=True), nullable=False, server_default=text("'0'")), - Column( - "Abstain", INTEGER(unsigned=True), nullable=False, server_default=text("'0'") - ), - Column( - "ActiveUsers", - INTEGER(unsigned=True), - nullable=False, - server_default=text("'0'"), - ), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Individual vote records -Votes = Table( - "Votes", - metadata, - Column("VoteID", ForeignKey("VoteInfo.ID", ondelete="CASCADE"), nullable=False), - Column("UserID", ForeignKey("Users.ID", ondelete="CASCADE"), nullable=False), - mysql_engine="InnoDB", -) - - -# Malicious user banning -Bans = Table( - "Bans", - metadata, - Column("IPAddress", String(45), primary_key=True), - Column("BanTS", TIMESTAMP, nullable=False), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Terms and Conditions -Terms = Table( - "Terms", - metadata, - Column("ID", INTEGER(unsigned=True), primary_key=True), - Column("Description", String(255), nullable=False), - Column("URL", String(8000), nullable=False), - Column( - "Revision", INTEGER(unsigned=True), nullable=False, server_default=text("1") - ), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) - - -# Terms and Conditions accepted by users -AcceptedTerms = Table( - "AcceptedTerms", - metadata, - Column("UsersID", ForeignKey("Users.ID", ondelete="CASCADE"), nullable=False), - Column("TermsID", ForeignKey("Terms.ID", ondelete="CASCADE"), nullable=False), - Column( - "Revision", INTEGER(unsigned=True), nullable=False, server_default=text("0") - ), - mysql_engine="InnoDB", -) - - -# Rate limits for API -ApiRateLimit = Table( - "ApiRateLimit", - metadata, - Column("IP", String(45), primary_key=True, unique=True, default=str()), - Column("Requests", INTEGER(11), nullable=False), - Column("WindowStart", BIGINT(20), nullable=False), - Index("ApiRateLimitWindowStart", "WindowStart"), - mysql_engine="InnoDB", - mysql_charset="utf8mb4", - mysql_collate="utf8mb4_general_ci", -) diff --git a/aurweb/scripts/__init__.py b/aurweb/scripts/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aurweb/scripts/adduser.py b/aurweb/scripts/adduser.py deleted file mode 100644 index dc928b1f..00000000 --- a/aurweb/scripts/adduser.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -Add a user to the configured aurweb database. - -See `aurweb-adduser --help` for documentation. - -Copyright (C) 2022 aurweb Development Team -All Rights Reserved -""" - -import argparse -import sys -import traceback - -import aurweb.models.account_type as at -from aurweb import db -from aurweb.models.account_type import AccountType -from aurweb.models.ssh_pub_key import SSHPubKey, get_fingerprint -from aurweb.models.user import User - - -def parse_args(): - parser = argparse.ArgumentParser(description="aurweb-adduser options") - - parser.add_argument("-u", "--username", help="Username", required=True) - parser.add_argument("-e", "--email", help="Email", required=True) - parser.add_argument("-p", "--password", help="Password", required=True) - parser.add_argument("-r", "--realname", help="Real Name") - parser.add_argument("-i", "--ircnick", help="IRC Nick") - parser.add_argument("--pgp-key", help="PGP Key Fingerprint") - parser.add_argument("--ssh-pubkey", help="SSH PubKey") - - choices = at.ACCOUNT_TYPE_NAME.values() - parser.add_argument( - "-t", "--type", help="Account Type", choices=choices, default=at.USER - ) - - return parser.parse_args() - - -def main(): - args = parse_args() - - db.get_engine() - type = db.query(AccountType, AccountType.AccountType == args.type).first() - with db.begin(): - user = db.create( - User, - Username=args.username, - Email=args.email, - Passwd=args.password, - RealName=args.realname, - IRCNick=args.ircnick, - PGPKey=args.pgp_key, - AccountType=type, - ) - - if args.ssh_pubkey: - pubkey = args.ssh_pubkey.strip() - - # Remove host from the pubkey if it's there. - pubkey = " ".join(pubkey.split(" ")[:2]) - - with db.begin(): - db.create( - SSHPubKey, User=user, PubKey=pubkey, Fingerprint=get_fingerprint(pubkey) - ) - - print(user.json()) - return 0 - - -if __name__ == "__main__": - e = 1 - try: - e = main() - except Exception: - traceback.print_exc() - e = 1 - sys.exit(e) diff --git a/aurweb/scripts/aurblup.py b/aurweb/scripts/aurblup.py deleted file mode 100755 index 10da1d98..00000000 --- a/aurweb/scripts/aurblup.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python3 - -import re - -import pyalpm -from sqlalchemy import and_ - -import aurweb.config -from aurweb import db, util -from aurweb.models import OfficialProvider - - -def _main(force: bool = False): - blacklist = set() - providers = set() - repomap = dict() - - db_path = aurweb.config.get("aurblup", "db-path") - sync_dbs = aurweb.config.get("aurblup", "sync-dbs").split(" ") - server = aurweb.config.get("aurblup", "server") - - h = pyalpm.Handle("/", db_path) - for sync_db in sync_dbs: - repo = h.register_syncdb(sync_db, pyalpm.SIG_DATABASE_OPTIONAL) - repo.servers = [server.replace("%s", sync_db)] - t = h.init_transaction() - repo.update(force) - t.release() - - for pkg in repo.pkgcache: - blacklist.add(pkg.name) - util.apply_all(pkg.replaces, blacklist.add) - providers.add((pkg.name, pkg.name)) - repomap[(pkg.name, pkg.name)] = repo.name - for provision in pkg.provides: - provisionname = re.sub(r"(<|=|>).*", "", provision) - providers.add((pkg.name, provisionname)) - repomap[(pkg.name, provisionname)] = repo.name - - with db.begin(): - old_providers = set( - db.query(OfficialProvider) - .with_entities( - OfficialProvider.Name.label("Name"), - OfficialProvider.Provides.label("Provides"), - ) - .distinct() - .order_by("Name") - .all() - ) - - # delete providers not existing in any of our alpm repos - for name, provides in old_providers.difference(providers): - db.delete_all( - db.query(OfficialProvider).filter( - and_( - OfficialProvider.Name == name, - OfficialProvider.Provides == provides, - ) - ) - ) - - # add new providers that do not yet exist in our DB - for name, provides in providers.difference(old_providers): - repo = repomap.get((name, provides)) - db.create(OfficialProvider, Name=name, Repo=repo, Provides=provides) - - # update providers where a pkg was moved from one repo to another - all_providers = db.query(OfficialProvider) - - for op in all_providers: - new_repo = repomap.get((op.Name, op.Provides)) - - if op.Repo != new_repo: - op.Repo = new_repo - - -def main(force: bool = False): - db.get_engine() - _main(force) - - -if __name__ == "__main__": - main() diff --git a/aurweb/scripts/config.py b/aurweb/scripts/config.py deleted file mode 100644 index 4da3296e..00000000 --- a/aurweb/scripts/config.py +++ /dev/null @@ -1,70 +0,0 @@ -""" -Perform an action on the aurweb config. - -When AUR_CONFIG_IMMUTABLE is set, the `set` action is noop. -""" - -import argparse -import configparser -import os -import sys - -import aurweb.config - - -def do_action(func, *args, save: bool = True): - # If AUR_CONFIG_IMMUTABLE is defined, skip out on config setting. - if int(os.environ.get("AUR_CONFIG_IMMUTABLE", 0)): - return - - value = None - try: - value = func(*args) - if save: - aurweb.config.save() - except configparser.NoSectionError: - print("error: no section found", file=sys.stderr) - except configparser.NoOptionError: - print("error: no option found", file=sys.stderr) - - return value - - -def action_set(args): - if not args.value: - print("error: no value provided", file=sys.stderr) - return - do_action(aurweb.config.set_option, args.section, args.option, args.value) - - -def action_unset(args): - do_action(aurweb.config.unset_option, args.section, args.option) - - -def action_get(args): - val = do_action(aurweb.config.get, args.section, args.option, save=False) - print(val) - - -def parse_args(): - fmt_cls = argparse.RawDescriptionHelpFormatter - actions = ["get", "set", "unset"] - parser = argparse.ArgumentParser( - description="aurweb configuration tool", - formatter_class=lambda prog: fmt_cls(prog=prog, max_help_position=80), - ) - parser.add_argument("action", choices=actions, help="script action") - parser.add_argument("section", help="config section") - parser.add_argument("option", help="config option") - parser.add_argument("value", nargs="?", default=0, help="config option value") - return parser.parse_args() - - -def main(): - args = parse_args() - action = getattr(sys.modules[__name__], f"action_{args.action}") - return action(args) - - -if __name__ == "__main__": - main() diff --git a/aurweb/scripts/git_archive.py b/aurweb/scripts/git_archive.py deleted file mode 100644 index 8e47cb77..00000000 --- a/aurweb/scripts/git_archive.py +++ /dev/null @@ -1,125 +0,0 @@ -import argparse -import importlib -import os -import sys -import traceback -from datetime import UTC, datetime - -import orjson -import pygit2 - -from aurweb import config - -# Constants -REF = "refs/heads/master" -ORJSON_OPTS = orjson.OPT_SORT_KEYS | orjson.OPT_INDENT_2 - - -def init_repository(git_info) -> None: - pygit2.init_repository(git_info.path) - repo = pygit2.Repository(git_info.path) - for k, v in git_info.config.items(): - repo.config[k] = v - - -def parse_args(): - parser = argparse.ArgumentParser() - parser.add_argument( - "--spec", - type=str, - required=True, - help="name of spec module in the aurweb.archives.spec package", - ) - return parser.parse_args() - - -def update_repository(repo: pygit2.Repository): - # Use git status to determine file changes - has_changes = False - changes = repo.status() - for filepath, flags in changes.items(): - if flags != pygit2.GIT_STATUS_CURRENT: - has_changes = True - break - - if has_changes: - print("diff detected, committing") - # Add everything in the tree. - print("adding files to git tree") - - # Add the tree to staging - repo.index.read() - repo.index.add_all() - repo.index.write() - tree = repo.index.write_tree() - - # Determine base commit; if repo.head.target raises GitError, - # we have no current commits - try: - base = [repo.head.target] - except pygit2.GitError: - base = [] - - utcnow = datetime.now(UTC) - author = pygit2.Signature( - config.get("git-archive", "author"), - config.get("git-archive", "author-email"), - int(utcnow.timestamp()), - 0, - ) - - # Commit the changes - timestamp = utcnow.strftime("%Y-%m-%d %H:%M:%S") - title = f"update - {timestamp}" - repo.create_commit(REF, author, author, title, tree, base) - - print("committed changes") - else: - print("no diff detected") - - -def main() -> int: - args = parse_args() - - print(f"loading '{args.spec}' spec") - spec_package = "aurweb.archives.spec" - module_path = f"{spec_package}.{args.spec}" - spec_module = importlib.import_module(module_path) - print(f"loaded '{args.spec}'") - - # Track repositories that the spec modifies. After we run - # through specs, we want to make a single commit for all - # repositories that contain changes. - repos = dict() - - print(f"running '{args.spec}' spec...") - spec = spec_module.Spec() - for output in spec.generate(): - if not os.path.exists(output.git_info.path / ".git"): - init_repository(output.git_info) - - path = output.git_info.path / output.filename - with open(path, "wb") as f: - f.write(output.data) - - if output.git_info.path not in repos: - repos[output.git_info.path] = pygit2.Repository(output.git_info.path) - - print(f"done running '{args.spec}' spec") - - print("processing repositories") - for path in spec.repos: - print(f"processing repository: {path}") - update_repository(pygit2.Repository(path)) - - return 0 - - -if __name__ == "__main__": - try: - sys.exit(main()) - except KeyboardInterrupt: - sys.exit(0) - except Exception: - traceback.print_exc() - sys.exit(1) diff --git a/aurweb/scripts/mkpkglists.py b/aurweb/scripts/mkpkglists.py deleted file mode 100755 index d85a79b9..00000000 --- a/aurweb/scripts/mkpkglists.py +++ /dev/null @@ -1,343 +0,0 @@ -#!/usr/bin/env python3 -""" -Produces package, package base and user archives for the AUR -database. - -Archives: - - packages.gz | A line-separated list of package names - packages-meta-v1.json | A type=search RPC-formatted JSON dataset - packages-meta-ext-v1.json | An --extended archive - pkgbase.gz | A line-separated list of package base names - users.gz | A line-separated list of user names - -This script takes an optional argument: --extended. Based -on the following, right-hand side fields are added to each item. - - --extended | License, Keywords, Groups, relations and dependencies - -""" - -import gzip -import hashlib -import io -import os -import shutil -import sys -from collections import defaultdict -from typing import Any - -import orjson -from sqlalchemy import literal, orm - -import aurweb.config -from aurweb import aur_logging, db, filters, models, util -from aurweb.benchmark import Benchmark -from aurweb.models import Package, PackageBase, User - -logger = aur_logging.get_logger("aurweb.scripts.mkpkglists") - - -TYPE_MAP = { - "depends": "Depends", - "makedepends": "MakeDepends", - "checkdepends": "CheckDepends", - "optdepends": "OptDepends", - "conflicts": "Conflicts", - "provides": "Provides", - "replaces": "Replaces", -} - - -def get_extended_dict(query: orm.Query): - """ - Produce data in the form in a single bulk SQL query: - - { - : { - "Depends": [...], - "Conflicts": [...], - "License": [...] - } - } - - The caller can then use this data to populate a dataset of packages. - - output = produce_base_output_data() - data = get_extended_dict(query) - for i in range(len(output)): - package_id = output[i].get("ID") - output[i].update(data.get(package_id)) - """ - - data = defaultdict(lambda: defaultdict(list)) - - for result in query: - pkgid = result[0] - key = TYPE_MAP.get(result[1], result[1]) - output = result[2] - if result[3]: - output += result[3] - data[pkgid][key].append(output) - - return data - - -def get_extended_fields(): - subqueries = [ - # PackageDependency - db.query(models.PackageDependency) - .join(models.DependencyType) - .with_entities( - models.PackageDependency.PackageID.label("ID"), - models.DependencyType.Name.label("Type"), - models.PackageDependency.DepName.label("Name"), - models.PackageDependency.DepCondition.label("Cond"), - ) - .distinct() # A package could have the same dependency multiple times - .order_by("Name"), - # PackageRelation - db.query(models.PackageRelation) - .join(models.RelationType) - .with_entities( - models.PackageRelation.PackageID.label("ID"), - models.RelationType.Name.label("Type"), - models.PackageRelation.RelName.label("Name"), - models.PackageRelation.RelCondition.label("Cond"), - ) - .distinct() # A package could have the same relation multiple times - .order_by("Name"), - # Groups - db.query(models.PackageGroup) - .join(models.Group, models.PackageGroup.GroupID == models.Group.ID) - .with_entities( - models.PackageGroup.PackageID.label("ID"), - literal("Groups").label("Type"), - models.Group.Name.label("Name"), - literal(str()).label("Cond"), - ) - .order_by("Name"), - # Licenses - db.query(models.PackageLicense) - .join(models.License, models.PackageLicense.LicenseID == models.License.ID) - .with_entities( - models.PackageLicense.PackageID.label("ID"), - literal("License").label("Type"), - models.License.Name.label("Name"), - literal(str()).label("Cond"), - ) - .order_by("Name"), - # Keywords - db.query(models.PackageKeyword) - .join( - models.Package, Package.PackageBaseID == models.PackageKeyword.PackageBaseID - ) - .with_entities( - models.Package.ID.label("ID"), - literal("Keywords").label("Type"), - models.PackageKeyword.Keyword.label("Name"), - literal(str()).label("Cond"), - ) - .order_by("Name"), - # Co-Maintainer - db.query(models.PackageComaintainer) - .join(models.User, models.User.ID == models.PackageComaintainer.UsersID) - .join( - models.Package, - models.Package.PackageBaseID == models.PackageComaintainer.PackageBaseID, - ) - .with_entities( - models.Package.ID, - literal("CoMaintainers").label("Type"), - models.User.Username.label("Name"), - literal(str()).label("Cond"), - ) - .distinct() # A package could have the same co-maintainer multiple times - .order_by("Name"), - ] - query = subqueries[0].union_all(*subqueries[1:]) - return get_extended_dict(query) - - -EXTENDED_FIELD_HANDLERS = {"--extended": get_extended_fields} - - -def as_dict(package: Package) -> dict[str, Any]: - return { - "ID": package.ID, - "Name": package.Name, - "PackageBaseID": package.PackageBaseID, - "PackageBase": package.PackageBase, - "Version": package.Version, - "Description": package.Description, - "URL": package.URL, - "NumVotes": package.NumVotes, - "Popularity": float(package.Popularity), - "OutOfDate": package.OutOfDate, - "Maintainer": package.Maintainer, - "Submitter": package.Submitter, - "FirstSubmitted": package.FirstSubmitted, - "LastModified": package.LastModified, - } - - -def sha256sum(file_path: str) -> str: - hash = hashlib.sha256() - with open(file_path, "rb") as f: - while chunk := f.read(io.DEFAULT_BUFFER_SIZE): - hash.update(chunk) - return hash.hexdigest() - - -def _main(): - archivedir = aurweb.config.get("mkpkglists", "archivedir") - os.makedirs(archivedir, exist_ok=True) - - PACKAGES = aurweb.config.get("mkpkglists", "packagesfile") - META = aurweb.config.get("mkpkglists", "packagesmetafile") - META_EXT = aurweb.config.get("mkpkglists", "packagesmetaextfile") - PKGBASE = aurweb.config.get("mkpkglists", "pkgbasefile") - USERS = aurweb.config.get("mkpkglists", "userfile") - - bench = Benchmark() - logger.warning(f"{sys.argv[0]} is deprecated and will be soon be removed") - logger.info("Started re-creating archives, wait a while...") - - Submitter = orm.aliased(User) - - query = ( - db.query(Package) - .join(PackageBase, PackageBase.ID == Package.PackageBaseID) - .join(User, PackageBase.MaintainerUID == User.ID, isouter=True) - .join(Submitter, PackageBase.SubmitterUID == Submitter.ID, isouter=True) - .with_entities( - Package.ID, - Package.Name, - PackageBase.ID.label("PackageBaseID"), - PackageBase.Name.label("PackageBase"), - Package.Version, - Package.Description, - Package.URL, - PackageBase.NumVotes, - PackageBase.Popularity, - PackageBase.OutOfDateTS.label("OutOfDate"), - User.Username.label("Maintainer"), - Submitter.Username.label("Submitter"), - PackageBase.SubmittedTS.label("FirstSubmitted"), - PackageBase.ModifiedTS.label("LastModified"), - ) - .order_by("Name") - ) - - # Produce packages-meta-v1.json.gz - output = list() - snapshot_uri = aurweb.config.get("options", "snapshot_uri") - - tmp_packages = f"{PACKAGES}.tmp" - tmp_meta = f"{META}.tmp" - tmp_metaext = f"{META_EXT}.tmp" - gzips = { - "packages": gzip.GzipFile( - filename=PACKAGES, mode="wb", fileobj=open(tmp_packages, "wb") - ), - "meta": gzip.GzipFile(filename=META, mode="wb", fileobj=open(tmp_meta, "wb")), - } - - # Append list opening to the metafile. - gzips["meta"].write(b"[\n") - - # Produce packages.gz + packages-meta-ext-v1.json.gz - extended = False - if len(sys.argv) > 1 and sys.argv[1] in EXTENDED_FIELD_HANDLERS: - gzips["meta_ext"] = gzip.GzipFile( - filename=META_EXT, mode="wb", fileobj=open(tmp_metaext, "wb") - ) - # Append list opening to the meta_ext file. - gzips.get("meta_ext").write(b"[\n") - f = EXTENDED_FIELD_HANDLERS.get(sys.argv[1]) - data = f() - extended = True - - results = query.all() - n = len(results) - 1 - with io.TextIOWrapper(gzips.get("packages")) as p: - for i, result in enumerate(results): - # Append to packages.gz. - p.write(f"{result.Name}\n") - - # Construct our result JSON dictionary. - item = as_dict(result) - item["URLPath"] = snapshot_uri % result.Name - - # We stream out package json objects line per line, so - # we also need to include the ',' character at the end - # of package lines (excluding the last package). - suffix = b",\n" if i < n else b"\n" - - # Write out to packagesmetafile - output.append(item) - gzips.get("meta").write(orjson.dumps(output[-1]) + suffix) - - if extended: - # Write out to packagesmetaextfile. - data_ = data.get(result.ID, {}) - output[-1].update(data_) - gzips.get("meta_ext").write(orjson.dumps(output[-1]) + suffix) - - # Append the list closing to meta/meta_ext. - gzips.get("meta").write(b"]") - if extended: - gzips.get("meta_ext").write(b"]") - - # Close gzip files. - util.apply_all(gzips.values(), lambda gz: gz.close()) - - # Produce pkgbase.gz - query = db.query(PackageBase.Name).all() - tmp_pkgbase = f"{PKGBASE}.tmp" - pkgbase_gzip = gzip.GzipFile( - filename=PKGBASE, mode="wb", fileobj=open(tmp_pkgbase, "wb") - ) - with io.TextIOWrapper(pkgbase_gzip) as f: - f.writelines([f"{base.Name}\n" for i, base in enumerate(query)]) - - # Produce users.gz - query = db.query(User.Username).all() - tmp_users = f"{USERS}.tmp" - users_gzip = gzip.GzipFile(filename=USERS, mode="wb", fileobj=open(tmp_users, "wb")) - with io.TextIOWrapper(users_gzip) as f: - f.writelines([f"{user.Username}\n" for i, user in enumerate(query)]) - - files = [ - (tmp_packages, PACKAGES), - (tmp_meta, META), - (tmp_pkgbase, PKGBASE), - (tmp_users, USERS), - ] - if len(sys.argv) > 1 and sys.argv[1] in EXTENDED_FIELD_HANDLERS: - files.append((tmp_metaext, META_EXT)) - - for src, dst in files: - checksum = sha256sum(src) - base = os.path.basename(dst) - checksum_formatted = f"SHA256 ({base}) = {checksum}" - - checksum_file = f"{dst}.sha256" - with open(checksum_file, "w") as f: - f.write(checksum_formatted) - - # Move the new archive into its rightful place. - shutil.move(src, dst) - - seconds = filters.number_format(bench.end(), 4) - logger.info(f"Completed in {seconds} seconds.") - - -def main(): - db.get_engine() - with db.begin(): - _main() - - -if __name__ == "__main__": - main() diff --git a/aurweb/scripts/notify.py b/aurweb/scripts/notify.py deleted file mode 100755 index 0e548be4..00000000 --- a/aurweb/scripts/notify.py +++ /dev/null @@ -1,811 +0,0 @@ -#!/usr/bin/env python3 - -import email.mime.text -import email.utils -import smtplib -import subprocess -import sys -import textwrap - -from sqlalchemy import and_, or_ - -import aurweb.config -import aurweb.db -import aurweb.filters -import aurweb.l10n -from aurweb import aur_logging, db -from aurweb.models import PackageBase, User -from aurweb.models.package_comaintainer import PackageComaintainer -from aurweb.models.package_comment import PackageComment -from aurweb.models.package_notification import PackageNotification -from aurweb.models.package_request import PackageRequest -from aurweb.models.request_type import RequestType -from aurweb.models.vote import Vote - -logger = aur_logging.get_logger(__name__) - -aur_location = aurweb.config.get("options", "aur_location") - - -def headers_msgid(thread_id): - return {"Message-ID": thread_id} - - -def headers_reply(thread_id): - return {"In-Reply-To": thread_id, "References": thread_id} - - -class Notification: - def get_refs(self): - return () - - def get_headers(self): - return {} - - def get_cc(self): - return [] - - def get_bcc(self): - return [] - - def get_body_fmt(self, lang): - body = "" - for line in self.get_body(lang).splitlines(): - if line == "--": - body += "--\n" - continue - body += textwrap.fill(line, break_long_words=False) + "\n" - for i, ref in enumerate(self.get_refs()): - body += "\n" + "[%d] %s" % (i + 1, ref) - return body.rstrip() - - def _send(self) -> None: - sendmail = aurweb.config.get("notifications", "sendmail") - sender = aurweb.config.get("notifications", "sender") - reply_to = aurweb.config.get("notifications", "reply-to") - reason = self.__class__.__name__ - if reason.endswith("Notification"): - reason = reason[: -len("Notification")] - - for recipient in self.get_recipients(): - to, lang = recipient - msg = email.mime.text.MIMEText(self.get_body_fmt(lang), "plain", "utf-8") - msg["Subject"] = self.get_subject(lang) - msg["From"] = sender - msg["Reply-to"] = reply_to - msg["To"] = to - if self.get_cc(): - msg["Cc"] = str.join(", ", self.get_cc()) - msg["X-AUR-Reason"] = reason - msg["Date"] = email.utils.formatdate(localtime=True) - - for key, value in self.get_headers().items(): - msg[key] = value - - sendmail = aurweb.config.get("notifications", "sendmail") - if sendmail: - # send email using the sendmail binary specified in the - # configuration file - p = subprocess.Popen([sendmail, "-t", "-oi"], stdin=subprocess.PIPE) - p.communicate(msg.as_bytes()) - else: - # send email using smtplib; no local MTA required - server_addr = aurweb.config.get("notifications", "smtp-server") - server_port = aurweb.config.getint("notifications", "smtp-port") - use_ssl = aurweb.config.getboolean("notifications", "smtp-use-ssl") - use_starttls = aurweb.config.getboolean( - "notifications", "smtp-use-starttls" - ) - user = aurweb.config.get("notifications", "smtp-user") - passwd = aurweb.config.get("notifications", "smtp-password") - - classes = { - False: smtplib.SMTP, - True: smtplib.SMTP_SSL, - } - smtp_timeout = aurweb.config.getint("notifications", "smtp-timeout") - server = classes[use_ssl]( - server_addr, server_port, timeout=smtp_timeout - ) - - if use_starttls: - server.ehlo() - server.starttls() - server.ehlo() - - if user and passwd: - server.login(user, passwd) - - server.set_debuglevel(0) - deliver_to = [to] + self.get_cc() + self.get_bcc() - server.sendmail(sender, deliver_to, msg.as_bytes()) - server.quit() - - def send(self) -> None: - try: - self._send() - except OSError as exc: - logger.error( - "Unable to emit notification due to an " - "OSError (precise exception following)." - ) - logger.error(str(exc)) - - -class ResetKeyNotification(Notification): - def __init__(self, uid): - user = ( - db.query(User) - .filter(and_(User.ID == uid, User.Suspended == 0)) - .with_entities( - User.Username, - User.Email, - User.BackupEmail, - User.LangPreference, - User.ResetKey, - ) - .order_by(User.Username.asc()) - .first() - ) - - self._username = user.Username - self._to = user.Email - self._backup = user.BackupEmail - self._lang = user.LangPreference - self._resetkey = user.ResetKey - - super().__init__() - - def get_recipients(self): - if self._backup: - return [(self._to, self._lang), (self._backup, self._lang)] - else: - return [(self._to, self._lang)] - - def get_subject(self, lang): - return aurweb.l10n.translator.translate("AUR Password Reset", lang) - - def get_body(self, lang): - return aurweb.l10n.translator.translate( - "A password reset request was submitted for the account " - "{user} associated with your email address. If you wish to " - "reset your password follow the link [1] below, otherwise " - "ignore this message and nothing will happen.", - lang, - ).format(user=self._username) - - def get_refs(self): - return (aur_location + "/passreset/?resetkey=" + self._resetkey,) - - -class WelcomeNotification(ResetKeyNotification): - def get_subject(self, lang): - return aurweb.l10n.translator.translate( - "Welcome to the Arch User Repository", lang - ) - - def get_body(self, lang): - return aurweb.l10n.translator.translate( - "Welcome to the Arch User Repository! In order to set an " - "initial password for your new account, please click the " - "link [1] below. If the link does not work, try copying and " - "pasting it into your browser.", - lang, - ) - - -class CommentNotification(Notification): - def __init__(self, uid, pkgbase_id, comment_id): - self._user = db.query(User.Username).filter(User.ID == uid).first().Username - self._pkgbase = ( - db.query(PackageBase.Name).filter(PackageBase.ID == pkgbase_id).first().Name - ) - - query = ( - db.query(User) - .join(PackageNotification) - .filter( - and_( - User.CommentNotify == 1, - PackageNotification.UserID != uid, - PackageNotification.PackageBaseID == pkgbase_id, - User.Suspended == 0, - ) - ) - .with_entities(User.Email, User.LangPreference) - .distinct() - ) - self._recipients = [(u.Email, u.LangPreference) for u in query] - - pkgcomment = ( - db.query(PackageComment.Comments) - .filter(PackageComment.ID == comment_id) - .first() - ) - self._text = pkgcomment.Comments - - super().__init__() - - def get_recipients(self): - return self._recipients - - def get_subject(self, lang): - return aurweb.l10n.translator.translate( - "AUR Comment for {pkgbase}", lang - ).format(pkgbase=self._pkgbase) - - def get_body(self, lang): - body = aurweb.l10n.translator.translate( - "{user} [1] added the following comment to {pkgbase} [2]:", lang - ).format(user=self._user, pkgbase=self._pkgbase) - body += "\n\n" + self._text + "\n\n--\n" - dnlabel = aurweb.l10n.translator.translate("Disable notifications", lang) - body += aurweb.l10n.translator.translate( - "If you no longer wish to receive notifications about this " - "package, please go to the package page [2] and select " - '"{label}".', - lang, - ).format(label=dnlabel) - return body - - def get_refs(self): - return ( - aur_location + "/account/" + self._user + "/", - aur_location + "/pkgbase/" + self._pkgbase + "/", - ) - - def get_headers(self): - thread_id = "" - return headers_reply(thread_id) - - -class UpdateNotification(Notification): - def __init__(self, uid, pkgbase_id): - self._user = db.query(User.Username).filter(User.ID == uid).first().Username - self._pkgbase = ( - db.query(PackageBase.Name).filter(PackageBase.ID == pkgbase_id).first().Name - ) - - query = ( - db.query(User) - .join(PackageNotification) - .filter( - and_( - User.UpdateNotify == 1, - PackageNotification.UserID != uid, - PackageNotification.PackageBaseID == pkgbase_id, - User.Suspended == 0, - ) - ) - .with_entities(User.Email, User.LangPreference) - .distinct() - ) - self._recipients = [(u.Email, u.LangPreference) for u in query] - - super().__init__() - - def get_recipients(self): - return self._recipients - - def get_subject(self, lang): - return aurweb.l10n.translator.translate( - "AUR Package Update: {pkgbase}", lang - ).format(pkgbase=self._pkgbase) - - def get_body(self, lang): - body = aurweb.l10n.translator.translate( - "{user} [1] pushed a new commit to {pkgbase} [2].", lang - ).format(user=self._user, pkgbase=self._pkgbase) - body += "\n\n--\n" - dnlabel = aurweb.l10n.translator.translate("Disable notifications", lang) - body += aurweb.l10n.translator.translate( - "If you no longer wish to receive notifications about this " - "package, please go to the package page [2] and select " - '"{label}".', - lang, - ).format(label=dnlabel) - return body - - def get_refs(self): - return ( - aur_location + "/account/" + self._user + "/", - aur_location + "/pkgbase/" + self._pkgbase + "/", - ) - - def get_headers(self): - thread_id = "" - return headers_reply(thread_id) - - -class FlagNotification(Notification): - def __init__(self, uid, pkgbase_id): - self._user = db.query(User.Username).filter(User.ID == uid).first().Username - self._pkgbase = ( - db.query(PackageBase.Name).filter(PackageBase.ID == pkgbase_id).first().Name - ) - - query = ( - db.query(User) - .join(PackageComaintainer, isouter=True) - .join( - PackageBase, - or_( - PackageBase.MaintainerUID == User.ID, - PackageBase.ID == PackageComaintainer.PackageBaseID, - ), - ) - .filter(and_(PackageBase.ID == pkgbase_id, User.Suspended == 0)) - .with_entities(User.Email, User.LangPreference) - .distinct() - .order_by(User.Email) - ) - self._recipients = [(u.Email, u.LangPreference) for u in query] - - pkgbase = ( - db.query(PackageBase.FlaggerComment) - .filter(PackageBase.ID == pkgbase_id) - .first() - ) - self._text = pkgbase.FlaggerComment - - super().__init__() - - def get_recipients(self): - return self._recipients - - def get_subject(self, lang): - return aurweb.l10n.translator.translate( - "AUR Out-of-date Notification for {pkgbase}", lang - ).format(pkgbase=self._pkgbase) - - def get_body(self, lang): - body = aurweb.l10n.translator.translate( - "Your package {pkgbase} [1] has been flagged out-of-date by " "{user} [2]:", - lang, - ).format(pkgbase=self._pkgbase, user=self._user) - body += "\n\n" + self._text - return body - - def get_refs(self): - return ( - aur_location + "/pkgbase/" + self._pkgbase + "/", - aur_location + "/account/" + self._user + "/", - ) - - -class OwnershipEventNotification(Notification): - def __init__(self, uid, pkgbase_id): - self._user = db.query(User.Username).filter(User.ID == uid).first().Username - self._pkgbase = ( - db.query(PackageBase.Name).filter(PackageBase.ID == pkgbase_id).first().Name - ) - - query = ( - db.query(User) - .join(PackageNotification) - .filter( - and_( - User.OwnershipNotify == 1, - PackageNotification.UserID != uid, - PackageNotification.PackageBaseID == pkgbase_id, - User.Suspended == 0, - ) - ) - .with_entities(User.Email, User.LangPreference) - .distinct() - ) - self._recipients = [(u.Email, u.LangPreference) for u in query] - - pkgbase = ( - db.query(PackageBase.FlaggerComment) - .filter(PackageBase.ID == pkgbase_id) - .first() - ) - self._text = pkgbase.FlaggerComment - - super().__init__() - - def get_recipients(self): - return self._recipients - - def get_subject(self, lang): - return aurweb.l10n.translator.translate( - "AUR Ownership Notification for {pkgbase}", lang - ).format(pkgbase=self._pkgbase) - - def get_refs(self): - return ( - aur_location + "/pkgbase/" + self._pkgbase + "/", - aur_location + "/account/" + self._user + "/", - ) - - -class AdoptNotification(OwnershipEventNotification): - def get_body(self, lang): - return aurweb.l10n.translator.translate( - "The package {pkgbase} [1] was adopted by {user} [2].", lang - ).format(pkgbase=self._pkgbase, user=self._user) - - -class DisownNotification(OwnershipEventNotification): - def get_body(self, lang): - return aurweb.l10n.translator.translate( - "The package {pkgbase} [1] was disowned by {user} " "[2].", lang - ).format(pkgbase=self._pkgbase, user=self._user) - - -class ComaintainershipEventNotification(Notification): - def __init__(self, uid, pkgbase_id): - self._pkgbase = ( - db.query(PackageBase.Name).filter(PackageBase.ID == pkgbase_id).first().Name - ) - - user = ( - db.query(User) - .filter(User.ID == uid) - .with_entities(User.Email, User.LangPreference) - .first() - ) - - self._to = user.Email - self._lang = user.LangPreference - - super().__init__() - - def get_recipients(self): - return [(self._to, self._lang)] - - def get_subject(self, lang): - return aurweb.l10n.translator.translate( - "AUR Co-Maintainer Notification for {pkgbase}", lang - ).format(pkgbase=self._pkgbase) - - def get_refs(self): - return (aur_location + "/pkgbase/" + self._pkgbase + "/",) - - -class ComaintainerAddNotification(ComaintainershipEventNotification): - def get_body(self, lang): - return aurweb.l10n.translator.translate( - "You were added to the co-maintainer list of {pkgbase} [1].", lang - ).format(pkgbase=self._pkgbase) - - -class ComaintainerRemoveNotification(ComaintainershipEventNotification): - def get_body(self, lang): - return aurweb.l10n.translator.translate( - "You were removed from the co-maintainer list of {pkgbase} " "[1].", lang - ).format(pkgbase=self._pkgbase) - - -class DeleteNotification(Notification): - def __init__(self, uid, old_pkgbase_id, new_pkgbase_id=None): - self._user = db.query(User.Username).filter(User.ID == uid).first().Username - self._old_pkgbase = ( - db.query(PackageBase.Name) - .filter(PackageBase.ID == old_pkgbase_id) - .first() - .Name - ) - - self._new_pkgbase = None - if new_pkgbase_id: - self._new_pkgbase = ( - db.query(PackageBase.Name) - .filter(PackageBase.ID == new_pkgbase_id) - .first() - .Name - ) - - query = ( - db.query(User) - .join(PackageNotification) - .filter( - and_( - PackageNotification.UserID != uid, - PackageNotification.PackageBaseID == old_pkgbase_id, - User.Suspended == 0, - ) - ) - .with_entities(User.Email, User.LangPreference) - .distinct() - ) - self._recipients = [(u.Email, u.LangPreference) for u in query] - - super().__init__() - - def get_recipients(self): - return self._recipients - - def get_subject(self, lang): - return aurweb.l10n.translator.translate( - "AUR Package deleted: {pkgbase}", lang - ).format(pkgbase=self._old_pkgbase) - - def get_body(self, lang): - if self._new_pkgbase: - dnlabel = aurweb.l10n.translator.translate("Disable notifications", lang) - return aurweb.l10n.translator.translate( - "{user} [1] merged {old} [2] into {new} [3].\n\n" - "--\n" - "If you no longer wish receive notifications about the " - 'new package, please go to [3] and click "{label}".', - lang, - ).format( - user=self._user, - old=self._old_pkgbase, - new=self._new_pkgbase, - label=dnlabel, - ) - else: - return aurweb.l10n.translator.translate( - "{user} [1] deleted {pkgbase} [2].\n\n" - "You will no longer receive notifications about this " - "package.", - lang, - ).format(user=self._user, pkgbase=self._old_pkgbase) - - def get_refs(self): - refs = ( - aur_location + "/account/" + self._user + "/", - aur_location + "/pkgbase/" + self._old_pkgbase + "/", - ) - if self._new_pkgbase: - refs += (aur_location + "/pkgbase/" + self._new_pkgbase + "/",) - return refs - - -class RequestOpenNotification(Notification): - def __init__(self, uid, reqid, reqtype, pkgbase_id, merge_into=None): - self._user = db.query(User.Username).filter(User.ID == uid).first().Username - self._pkgbase = ( - db.query(PackageBase.Name).filter(PackageBase.ID == pkgbase_id).first().Name - ) - - self._to = aurweb.config.get("options", "aur_request_ml") - - query = ( - db.query(PackageRequest) - .join(PackageBase) - .join( - PackageComaintainer, - PackageComaintainer.PackageBaseID == PackageRequest.PackageBaseID, - isouter=True, - ) - .join( - User, - or_( - User.ID == PackageRequest.UsersID, - User.ID == PackageBase.MaintainerUID, - User.ID == PackageComaintainer.UsersID, - ), - ) - .filter(and_(PackageRequest.ID == reqid, User.Suspended == 0)) - .with_entities(User.Email, User.HideEmail) - .distinct() - ) - self._cc = [u.Email for u in query if u.HideEmail == 0] - self._bcc = [u.Email for u in query if u.HideEmail == 1] - - pkgreq = ( - db.query(PackageRequest.Comments).filter(PackageRequest.ID == reqid).first() - ) - - self._text = pkgreq.Comments - self._reqid = int(reqid) - self._reqtype = reqtype - self._merge_into = merge_into - - def get_recipients(self): - return [(self._to, "en")] - - def get_cc(self): - return self._cc - - def get_bcc(self): - return self._bcc - - def get_subject(self, lang): - return "[PRQ#%d] %s Request for %s" % ( - self._reqid, - self._reqtype.title(), - self._pkgbase, - ) - - def get_body(self, lang): - if self._merge_into: - body = "%s [1] filed a request to merge %s [2] into %s [3]:" % ( - self._user, - self._pkgbase, - self._merge_into, - ) - body += "\n\n" + self._text - else: - an = "an" if self._reqtype[0] in "aeiou" else "a" - body = "%s [1] filed %s %s request for %s [2]:" % ( - self._user, - an, - self._reqtype, - self._pkgbase, - ) - body += "\n\n" + self._text - return body - - def get_refs(self): - refs = ( - aur_location + "/account/" + self._user + "/", - aur_location + "/pkgbase/" + self._pkgbase + "/", - ) - if self._merge_into: - refs += (aur_location + "/pkgbase/" + self._merge_into + "/",) - return refs - - def get_headers(self): - thread_id = "" - # Use a deterministic Message-ID for the first email referencing a - # request. - headers = headers_msgid(thread_id) - return headers - - -class RequestCloseNotification(Notification): - def __init__(self, uid, reqid, reason): - user = db.query(User.Username).filter(User.ID == uid).first() - self._user = user.Username if user else None - - self._to = aurweb.config.get("options", "aur_request_ml") - - query = ( - db.query(PackageRequest) - .join(PackageBase) - .join( - PackageComaintainer, - PackageComaintainer.PackageBaseID == PackageRequest.PackageBaseID, - isouter=True, - ) - .join( - User, - or_( - User.ID == PackageRequest.UsersID, - User.ID == PackageBase.MaintainerUID, - User.ID == PackageComaintainer.UsersID, - ), - ) - .filter(and_(PackageRequest.ID == reqid, User.Suspended == 0)) - .with_entities(User.Email, User.HideEmail) - .distinct() - ) - self._cc = [u.Email for u in query if u.HideEmail == 0] - self._bcc = [u.Email for u in query if u.HideEmail == 1] - - pkgreq = ( - db.query(PackageRequest) - .join(RequestType) - .filter(PackageRequest.ID == reqid) - .with_entities( - PackageRequest.ClosureComment, - RequestType.Name, - PackageRequest.PackageBaseName, - ) - .first() - ) - - self._text = pkgreq.ClosureComment - self._reqtype = pkgreq.Name - self._pkgbase = pkgreq.PackageBaseName - - self._reqid = int(reqid) - self._reason = reason - - def get_recipients(self): - return [(self._to, "en")] - - def get_cc(self): - return self._cc - - def get_bcc(self): - return self._bcc - - def get_subject(self, lang): - return "[PRQ#%d] %s Request for %s %s" % ( - self._reqid, - self._reqtype.title(), - self._pkgbase, - self._reason.title(), - ) - - def get_body(self, lang): - if self._user: - body = "Request #%d has been %s by %s [1]" % ( - self._reqid, - self._reason, - self._user, - ) - else: - body = ( - "Request #%d has been %s automatically by the Arch User " - "Repository package request system" % (self._reqid, self._reason) - ) - if self._text.strip() == "": - body += "." - else: - body += ":\n\n" + self._text - return body - - def get_refs(self): - if self._user: - return (aur_location + "/account/" + self._user + "/",) - else: - return () - - def get_headers(self): - thread_id = "" - headers = headers_reply(thread_id) - return headers - - -class VoteReminderNotification(Notification): - def __init__(self, vote_id): - self._vote_id = int(vote_id) - - subquery = db.query(Vote.UserID).filter(Vote.VoteID == vote_id) - query = ( - db.query(User) - .filter( - and_( - User.AccountTypeID.in_((2, 4)), - ~User.ID.in_(subquery), - User.Suspended == 0, - ) - ) - .with_entities(User.Email, User.LangPreference) - ) - self._recipients = [(u.Email, u.LangPreference) for u in query] - - super().__init__() - - def get_recipients(self): - return self._recipients - - def get_subject(self, lang): - return aurweb.l10n.translator.translate( - "Package Maintainer Vote Reminder: Proposal {id}", lang - ).format(id=self._vote_id) - - def get_body(self, lang): - return aurweb.l10n.translator.translate( - "Please remember to cast your vote on proposal {id} [1]. " - "The voting period ends in less than 48 hours.", - lang, - ).format(id=self._vote_id) - - def get_refs(self): - return (aur_location + "/package-maintainer/?id=" + str(self._vote_id),) - - -def main(): - db.get_engine() - action = sys.argv[1] - action_map = { - "send-resetkey": ResetKeyNotification, - "welcome": WelcomeNotification, - "comment": CommentNotification, - "update": UpdateNotification, - "flag": FlagNotification, - "adopt": AdoptNotification, - "disown": DisownNotification, - "comaintainer-add": ComaintainerAddNotification, - "comaintainer-remove": ComaintainerRemoveNotification, - "delete": DeleteNotification, - "request-open": RequestOpenNotification, - "request-close": RequestCloseNotification, - "vote-reminder": VoteReminderNotification, - } - - with db.begin(): - notification = action_map[action](*sys.argv[2:]) - notification.send() - - -if __name__ == "__main__": - main() diff --git a/aurweb/scripts/pkgmaint.py b/aurweb/scripts/pkgmaint.py deleted file mode 100755 index 3d695f8f..00000000 --- a/aurweb/scripts/pkgmaint.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python3 - -from sqlalchemy import and_ - -from aurweb import db, time -from aurweb.models import PackageBase - - -def _main(): - # One day behind. - limit_to = time.utcnow() - 86400 - - query = db.query(PackageBase).filter( - and_(PackageBase.SubmittedTS < limit_to, PackageBase.PackagerUID.is_(None)) - ) - db.delete_all(query) - - -def main(): - # Previously used to clean up "reserved" packages which never got pushed. - # Let's deactivate this for now since "setup-repo" is gone and we see - # other issue where deletion of a user account might cause unintended - # removal of a package (where PackagerUID account was deleted) - return - - db.get_engine() - with db.begin(): - _main() - - -if __name__ == "__main__": - main() diff --git a/aurweb/scripts/popupdate.py b/aurweb/scripts/popupdate.py deleted file mode 100755 index 83506e22..00000000 --- a/aurweb/scripts/popupdate.py +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env python3 -from datetime import datetime - -from sqlalchemy import and_, func -from sqlalchemy.sql.functions import coalesce, sum as _sum - -from aurweb import config, db, time -from aurweb.models import PackageBase, PackageVote - - -def run_variable(pkgbases: list[PackageBase] = []) -> None: - """ - Update popularity on a list of PackageBases. - - If no PackageBase is included, we update the popularity - of every PackageBase in the database. - - :param pkgbases: List of PackageBase instances - """ - now = time.utcnow() - - # NumVotes subquery. - votes_subq = ( - db.get_session() - .query(func.count("*")) - .select_from(PackageVote) - .filter(PackageVote.PackageBaseID == PackageBase.ID) - ) - - # Popularity subquery. - pop_subq = ( - db.get_session() - .query( - coalesce(_sum(func.pow(0.98, (now - PackageVote.VoteTS) / 86400)), 0.0), - ) - .select_from(PackageVote) - .filter( - and_( - PackageVote.PackageBaseID == PackageBase.ID, - PackageVote.VoteTS.isnot(None), - ) - ) - ) - - with db.begin(): - query = db.query(PackageBase) - - ids = set() - if pkgbases: - # If `pkgbases` were given, we should forcefully update the given - # package base records' popularities. - ids = {pkgbase.ID for pkgbase in pkgbases} - query = query.filter(PackageBase.ID.in_(ids)) - else: - # Otherwise, we should only update popularities which have exceeded - # the popularity interval length. - interval = config.getint("git-archive", "popularity-interval") - query = query.filter( - PackageBase.PopularityUpdated - <= datetime.fromtimestamp((now - interval)) - ) - - query.update( - { - "NumVotes": votes_subq.scalar_subquery(), - "Popularity": pop_subq.scalar_subquery(), - "PopularityUpdated": datetime.fromtimestamp(now), - } - ) - - -def run_single(pkgbase: PackageBase) -> None: - """A single popupdate. The given pkgbase instance will be - refreshed after the database update is done. - - NOTE: This function is compatible only with aurweb FastAPI. - - :param pkgbase: Instance of db.PackageBase - """ - run_variable([pkgbase]) - db.refresh(pkgbase) - - -def main(): - db.get_engine() - run_variable() - - -if __name__ == "__main__": - main() diff --git a/aurweb/scripts/rendercomment.py b/aurweb/scripts/rendercomment.py deleted file mode 100755 index 7ff477b7..00000000 --- a/aurweb/scripts/rendercomment.py +++ /dev/null @@ -1,189 +0,0 @@ -#!/usr/bin/env python3 - -import sys -from urllib.parse import quote_plus -from xml.etree.ElementTree import Element - -import bleach -import markdown -import pygit2 - -import aurweb.config -from aurweb import aur_logging, db, util -from aurweb.models import PackageComment - -logger = aur_logging.get_logger(__name__) - - -class LinkifyExtension(markdown.extensions.Extension): - """ - Turn URLs into links, even without explicit markdown. - Do not linkify URLs in code blocks. - """ - - # Captures http(s) and ftp URLs until the first non URL-ish character. - # Excludes trailing punctuation. - _urlre = ( - r"(\b(?:https?|ftp):\/\/[\w\/\#~:.?+=&%@!\-;,]+?" - r"(?=[.:?\-;,]*(?:[^\w\/\#~:.?+=&%@!\-;,]|$)))" - ) - - def extendMarkdown(self, md): - processor = markdown.inlinepatterns.AutolinkInlineProcessor(self._urlre, md) - # Register it right after the default <>-link processor (priority 120). - md.inlinePatterns.register(processor, "linkify", 119) - - -class FlysprayLinksInlineProcessor(markdown.inlinepatterns.InlineProcessor): - """ - Turn Flyspray task references like FS#1234 into links to bugs.archlinux.org. - - The pattern's capture group 0 is the text of the link and group 1 is the - Flyspray task ID. - """ - - def handleMatch(self, m, data): - el = Element("a") - el.set("href", f"https://bugs.archlinux.org/task/{m.group(1)}") - el.text = markdown.util.AtomicString(m.group(0)) - return el, m.start(0), m.end(0) - - -class FlysprayLinksExtension(markdown.extensions.Extension): - def extendMarkdown(self, md): - processor = FlysprayLinksInlineProcessor(r"\bFS#(\d+)\b", md) - md.inlinePatterns.register(processor, "flyspray-links", 118) - - -class GitCommitsInlineProcessor(markdown.inlinepatterns.InlineProcessor): - """ - Turn Git hashes like f7f5152be5ab into links to AUR's cgit. - - Only commit references that do exist are linkified. Hashes are shortened to - shorter non-ambiguous prefixes. Only hashes with at least 7 digits are - considered. - """ - - def __init__(self, md, head): - repo_path = aurweb.config.get("serve", "repo-path") - self._repo = pygit2.Repository(repo_path) - self._head = head - super().__init__(r"\b([0-9a-f]{7,40})\b", md) - - def handleMatch(self, m, data): - oid = m.group(1) - # Lookup might raise ValueError in case multiple object ID's were found - try: - if oid not in self._repo: - # Unknown OID; preserve the orginal text. - return None, None, None - except ValueError: - # Multiple OID's found; preserve the orginal text. - return None, None, None - - el = Element("a") - commit_uri = aurweb.config.get("options", "commit_uri") - prefixlen = util.git_search(self._repo, oid) - el.set( - "href", commit_uri % (quote_plus(self._head), quote_plus(oid[:prefixlen])) - ) - el.text = markdown.util.AtomicString(oid[:prefixlen]) - return el, m.start(0), m.end(0) - - -class GitCommitsExtension(markdown.extensions.Extension): - _head = None - - def __init__(self, head): - self._head = head - super(markdown.extensions.Extension, self).__init__() - - def extendMarkdown(self, md): - try: - processor = GitCommitsInlineProcessor(md, self._head) - md.inlinePatterns.register(processor, "git-commits", 117) - except pygit2.GitError: - logger.error(f"No git repository found for '{self._head}'.") - - -class HeadingTreeprocessor(markdown.treeprocessors.Treeprocessor): - def run(self, doc): - for elem in doc: - if elem.tag == "h1": - elem.tag = "h5" - elif elem.tag in ["h2", "h3", "h4", "h5"]: - elem.tag = "h6" - - -class HeadingExtension(markdown.extensions.Extension): - def extendMarkdown(self, md): - # Priority doesn't matter since we don't conflict with other processors. - md.treeprocessors.register(HeadingTreeprocessor(md), "heading", 30) - - -class StrikethroughInlineProcessor(markdown.inlinepatterns.InlineProcessor): - def handleMatch(self, m, data): - el = Element("del") - el.text = m.group(1) - return el, m.start(0), m.end(0) - - -class StrikethroughExtension(markdown.extensions.Extension): - def extendMarkdown(self, md): - pattern = r"~~(.*?)~~" - processor = StrikethroughInlineProcessor(pattern, md) - md.inlinePatterns.register(processor, "del", 40) - - -def save_rendered_comment(comment: PackageComment, html: str): - with db.begin(): - comment.RenderedComment = html - - -def update_comment_render_fastapi(comment: PackageComment) -> None: - update_comment_render(comment) - - -def update_comment_render(comment: PackageComment) -> None: - text = comment.Comments - pkgbasename = comment.PackageBase.Name - - html = markdown.markdown( - text, - extensions=[ - "md_in_html", - "fenced_code", - LinkifyExtension(), - FlysprayLinksExtension(), - GitCommitsExtension(pkgbasename), - HeadingExtension(), - StrikethroughExtension(), - ], - ) - - allowed_tags = list(bleach.sanitizer.ALLOWED_TAGS) + [ - "p", - "pre", - "h4", - "h5", - "h6", - "br", - "hr", - "del", - "details", - "summary", - ] - html = bleach.clean(html, tags=allowed_tags) - save_rendered_comment(comment, html) - db.refresh(comment) - - -def main(): - db.get_engine() - comment_id = int(sys.argv[1]) - comment = db.query(PackageComment).filter(PackageComment.ID == comment_id).first() - update_comment_render(comment) - - -if __name__ == "__main__": - main() diff --git a/aurweb/scripts/usermaint.py b/aurweb/scripts/usermaint.py deleted file mode 100755 index fb79aeaf..00000000 --- a/aurweb/scripts/usermaint.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python3 - -from sqlalchemy import update - -from aurweb import db, time -from aurweb.models import User - - -def _main(): - limit_to = time.utcnow() - 86400 * 7 - - update_ = ( - update(User).where(User.LastLogin < limit_to).values(LastLoginIPAddress=None) - ) - db.get_session().execute(update_) - - update_ = ( - update(User) - .where(User.LastSSHLogin < limit_to) - .values(LastSSHLoginIPAddress=None) - ) - db.get_session().execute(update_) - - -def main(): - db.get_engine() - with db.begin(): - _main() - - -if __name__ == "__main__": - main() diff --git a/aurweb/scripts/votereminder.py b/aurweb/scripts/votereminder.py deleted file mode 100755 index 7d5c0c3b..00000000 --- a/aurweb/scripts/votereminder.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python3 - -from sqlalchemy import and_ - -import aurweb.config -from aurweb import db, time -from aurweb.models import VoteInfo -from aurweb.scripts import notify - -notify_cmd = aurweb.config.get("notifications", "notify-cmd") - - -def main(): - db.get_engine() - - now = time.utcnow() - - start = aurweb.config.getint("votereminder", "range_start") - filter_from = now + start - - end = aurweb.config.getint("votereminder", "range_end") - filter_to = now + end - - query = db.query(VoteInfo.ID).filter( - and_(VoteInfo.End >= filter_from, VoteInfo.End <= filter_to) - ) - for voteinfo in query: - notif = notify.VoteReminderNotification(voteinfo.ID) - notif.send() - - -if __name__ == "__main__": - main() diff --git a/aurweb/spawn.py b/aurweb/spawn.py deleted file mode 100644 index cfad54e1..00000000 --- a/aurweb/spawn.py +++ /dev/null @@ -1,270 +0,0 @@ -""" -Provide an automatic way of spawing an HTTP test server running aurweb. - -It can be called from the command-line or from another Python module. - -This module uses a global state, since you can’t open two servers with the same -configuration anyway. -""" - -import argparse -import atexit -import os -import os.path -import subprocess -import sys -import tempfile -import time -from typing import Iterable - -import aurweb.config -import aurweb.schema - -children = [] -temporary_dir = None -verbosity = 0 -asgi_backend = "" -workers = 1 - -FASTAPI_NGINX_PORT = int(os.environ.get("FASTAPI_NGINX_PORT", 8002)) - - -class ProcessExceptions(Exception): - """ - Compound exception used by stop() to list all the errors that happened when - terminating child processes. - """ - - def __init__(self, message, exceptions): - self.message = message - self.exceptions = exceptions - messages = [message] + [str(e) for e in exceptions] - super().__init__("\n- ".join(messages)) - - -def generate_nginx_config(): - """ - Generate an nginx configuration based on aurweb's configuration. - The file is generated under `temporary_dir`. - Returns the path to the created configuration file. - """ - fastapi_bind = aurweb.config.get("fastapi", "bind_address") - fastapi_host = fastapi_bind.split(":")[0] - config_path = os.path.join(temporary_dir, "nginx.conf") - with open(config_path, "w") as config: - # We double nginx's braces because they conflict with Python's f-strings. - config.write( - f""" - events {{}} - daemon off; - error_log /dev/stderr info; - pid {os.path.join(temporary_dir, "nginx.pid")}; - http {{ - access_log /dev/stdout; - client_body_temp_path {os.path.join(temporary_dir, "client_body")}; - proxy_temp_path {os.path.join(temporary_dir, "proxy")}; - fastcgi_temp_path {os.path.join(temporary_dir, "fastcgi")}1 2; - uwsgi_temp_path {os.path.join(temporary_dir, "uwsgi")}; - scgi_temp_path {os.path.join(temporary_dir, "scgi")}; - server {{ - listen {fastapi_host}:{FASTAPI_NGINX_PORT}; - location / {{ - try_files $uri @proxy_to_app; - }} - location @proxy_to_app {{ - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_redirect off; - proxy_buffering off; - proxy_pass http://{fastapi_bind}; - }} - }} - }} - """ - ) - return config_path - - -def spawn_child(_args): - """Open a subprocess and add it to the global state.""" - if verbosity >= 1: - print(f":: Spawning {_args}", file=sys.stderr) - children.append(subprocess.Popen(_args)) - - -def start(): - """ - Spawn the test server. If it is already running, do nothing. - - The server can be stopped with stop(), or is automatically stopped when the - Python process ends using atexit. - """ - if children: - return - atexit.register(stop) - - if "AUR_CONFIG" in os.environ: - os.environ["AUR_CONFIG"] = os.path.realpath(os.environ["AUR_CONFIG"]) - - try: - terminal_width = os.get_terminal_size().columns - except OSError: - terminal_width = 80 - print( - "{ruler}\n" - "Spawing FastAPI, then nginx as a reverse proxy.\n" - "Check out {aur_location}\n" - "Hit ^C to terminate everything.\n" - "{ruler}".format( - ruler=("-" * terminal_width), - aur_location=aurweb.config.get("options", "aur_location"), - ) - ) - - # FastAPI - fastapi_host, fastapi_port = aurweb.config.get("fastapi", "bind_address").rsplit( - ":", 1 - ) - - # Logging config. - aurwebdir = aurweb.config.get("options", "aurwebdir") - fastapi_log_config = os.path.join(aurwebdir, "logging.conf") - - backend_args = { - "hypercorn": ["-b", f"{fastapi_host}:{fastapi_port}"], - "uvicorn": ["--host", fastapi_host, "--port", fastapi_port], - "gunicorn": [ - "--bind", - f"{fastapi_host}:{fastapi_port}", - "-k", - "uvicorn.workers.UvicornWorker", - "-w", - str(workers), - ], - } - backend_args = backend_args.get(asgi_backend) - spawn_child( - [ - "python", - "-m", - asgi_backend, - "--log-config", - fastapi_log_config, - ] - + backend_args - + ["aurweb.asgi:app"] - ) - - # nginx - spawn_child(["nginx", "-p", temporary_dir, "-c", generate_nginx_config()]) - - print( - f""" - > Started nginx. - > - > FastAPI backend: http://{fastapi_host}:{fastapi_port} - > FastAPI frontend: http://{fastapi_host}:{FASTAPI_NGINX_PORT} - > - > Frontends are hosted via nginx and should be preferred. -""" - ) - - -def _kill_children(_children: Iterable, exceptions=None) -> list[Exception]: - """ - Kill each process found in `children`. - - :param _children: Iterable of child processes - :param exceptions: Exception memo - :return: `exceptions` - """ - if exceptions is None: - exceptions = [] - for p in _children: - try: - p.terminate() - if verbosity >= 1: - print(f":: Sent SIGTERM to {p.args}", file=sys.stderr) - except Exception as e: - exceptions.append(e) - return exceptions - - -def _wait_for_children(_children: Iterable, exceptions=None) -> list[Exception]: - """ - Wait for each process to end found in `children`. - - :param _children: Iterable of child processes - :param exceptions: Exception memo - :return: `exceptions` - """ - if exceptions is None: - exceptions = [] - for p in _children: - try: - rc = p.wait() - if rc != 0 and rc != -15: - # rc = -15 indicates the process was terminated with SIGTERM, - # which is to be expected since we called terminate on them. - raise Exception(f"Process {p.args} exited with {rc}") - except Exception as e: - exceptions.append(e) - return exceptions - - -def stop() -> None: - """ - Stop all the child processes. - - If an exception occurs during the process, the process continues anyway - because we don’t want to leave runaway processes around, and all the - exceptions are finally raised as a single ProcessExceptions. - - :raises: ProcessException - :return: None - """ - global children - atexit.unregister(stop) - exceptions = _kill_children(children) - exceptions = _wait_for_children(children, exceptions) - children = [] - if exceptions: - raise ProcessExceptions("Errors terminating the child processes:", exceptions) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - prog="python -m aurweb.spawn", description="Start aurweb's test server." - ) - parser.add_argument( - "-v", "--verbose", action="count", default=0, help="increase verbosity" - ) - choices = ["hypercorn", "gunicorn", "uvicorn"] - parser.add_argument( - "-b", - "--backend", - choices=choices, - default="uvicorn", - help="asgi backend used to launch the python server", - ) - parser.add_argument( - "-w", - "--workers", - default=1, - type=int, - help="number of workers to use in gunicorn", - ) - args = parser.parse_args() - - verbosity = args.verbose - asgi_backend = args.backend - workers = args.workers - with tempfile.TemporaryDirectory(prefix="aurweb-") as tmpdirname: - temporary_dir = tmpdirname - start() - try: - while True: - time.sleep(60) - except KeyboardInterrupt: - stop() diff --git a/aurweb/statistics.py b/aurweb/statistics.py deleted file mode 100644 index 00a5c151..00000000 --- a/aurweb/statistics.py +++ /dev/null @@ -1,169 +0,0 @@ -from sqlalchemy import func - -from aurweb import config, db, time -from aurweb.cache import db_count_cache, db_query_cache -from aurweb.models import PackageBase, PackageRequest, RequestType, User -from aurweb.models.account_type import ( - PACKAGE_MAINTAINER_AND_DEV_ID, - PACKAGE_MAINTAINER_ID, - USER_ID, -) -from aurweb.models.package_request import ( - ACCEPTED_ID, - CLOSED_ID, - PENDING_ID, - REJECTED_ID, -) -from aurweb.prometheus import PACKAGES, REQUESTS, USERS - -cache_expire = config.getint("cache", "expiry_time_statistics", 300) - -HOMEPAGE_COUNTERS = [ - "package_count", - "orphan_count", - "seven_days_old_added", - "seven_days_old_updated", - "year_old_updated", - "never_updated", - "user_count", - "package_maintainer_count", -] -REQUEST_COUNTERS = [ - "total_requests", - "pending_requests", - "closed_requests", - "accepted_requests", - "rejected_requests", -] -PROMETHEUS_USER_COUNTERS = [ - ("package_maintainer_count", "package_maintainer"), - ("regular_user_count", "user"), -] -PROMETHEUS_PACKAGE_COUNTERS = [ - ("orphan_count", "orphan"), - ("never_updated", "not_updated"), - ("updated_packages", "updated"), -] - - -class Statistics: - seven_days = 86400 * 7 - one_hour = 3600 - year = seven_days * 52 - - def __init__(self, cache_expire: int = None) -> "Statistics": - self.expiry_time = cache_expire - self.now = time.utcnow() - self.seven_days_ago = self.now - self.seven_days - self.year_ago = self.now - self.year - - self.user_query = db.query(User) - self.bases_query = db.query(PackageBase) - self.updated_query = db.query(PackageBase).filter( - PackageBase.ModifiedTS - PackageBase.SubmittedTS >= self.one_hour - ) - self.request_query = db.query(PackageRequest) - - def get_count(self, counter: str) -> int: - query = None - match counter: - # Packages - case "package_count": - query = self.bases_query - case "orphan_count": - query = self.bases_query.filter(PackageBase.MaintainerUID.is_(None)) - case "seven_days_old_added": - query = self.bases_query.filter( - PackageBase.SubmittedTS >= self.seven_days_ago - ) - case "seven_days_old_updated": - query = self.updated_query.filter( - PackageBase.ModifiedTS >= self.seven_days_ago - ) - case "year_old_updated": - query = self.updated_query.filter( - PackageBase.ModifiedTS >= self.year_ago - ) - case "never_updated": - query = self.bases_query.filter( - PackageBase.ModifiedTS - PackageBase.SubmittedTS < self.one_hour - ) - case "updated_packages": - query = self.bases_query.filter( - PackageBase.ModifiedTS - PackageBase.SubmittedTS > self.one_hour, - ~PackageBase.MaintainerUID.is_(None), - ) - # Users - case "user_count": - query = self.user_query - case "package_maintainer_count": - query = self.user_query.filter( - User.AccountTypeID.in_( - ( - PACKAGE_MAINTAINER_ID, - PACKAGE_MAINTAINER_AND_DEV_ID, - ) - ) - ) - case "regular_user_count": - query = self.user_query.filter(User.AccountTypeID == USER_ID) - - # Requests - case "total_requests": - query = self.request_query - case "pending_requests": - query = self.request_query.filter(PackageRequest.Status == PENDING_ID) - case "closed_requests": - query = self.request_query.filter(PackageRequest.Status == CLOSED_ID) - case "accepted_requests": - query = self.request_query.filter(PackageRequest.Status == ACCEPTED_ID) - case "rejected_requests": - query = self.request_query.filter(PackageRequest.Status == REJECTED_ID) - case _: - return -1 - - return db_count_cache(counter, query, expire=self.expiry_time) - - -def update_prometheus_metrics(): - stats = Statistics(cache_expire) - # Users gauge - for counter, utype in PROMETHEUS_USER_COUNTERS: - count = stats.get_count(counter) - USERS.labels(utype).set(count) - - # Packages gauge - for counter, state in PROMETHEUS_PACKAGE_COUNTERS: - count = stats.get_count(counter) - PACKAGES.labels(state).set(count) - - # Requests gauge - query = ( - db.get_session() - .query(PackageRequest, func.count(PackageRequest.ID), RequestType.Name) - .join(RequestType) - .group_by(RequestType.Name, PackageRequest.Status) - ) - results = db_query_cache("request_metrics", query, cache_expire) - for record in results: - status = record[0].status_display() - count = record[1] - rtype = record[2] - REQUESTS.labels(type=rtype, status=status).set(count) - - -def _get_counts(counters: list[str]) -> dict[str, int]: - stats = Statistics(cache_expire) - result = dict() - for counter in counters: - result[counter] = stats.get_count(counter) - - return result - - -def get_homepage_counts() -> dict[str, int]: - return _get_counts(HOMEPAGE_COUNTERS) - - -def get_request_counts() -> dict[str, int]: - return _get_counts(REQUEST_COUNTERS) diff --git a/aurweb/templates.py b/aurweb/templates.py deleted file mode 100644 index 51b9d342..00000000 --- a/aurweb/templates.py +++ /dev/null @@ -1,144 +0,0 @@ -import copy -import functools -import os -from http import HTTPStatus -from typing import Callable - -import jinja2 -from fastapi import Request -from fastapi.responses import HTMLResponse - -import aurweb.config -from aurweb import l10n, time - -# Prepare jinja2 objects. -_loader = jinja2.FileSystemLoader( - os.path.join(aurweb.config.get("options", "aurwebdir"), "templates") -) -_env = jinja2.Environment( - loader=_loader, autoescape=True, extensions=["jinja2.ext.i18n"] -) - -DEFAULT_TIMEZONE = aurweb.config.get("options", "default_timezone") - - -def register_filter(name: str) -> Callable: - """A decorator that can be used to register a filter. - - Example - @register_filter("some_filter") - def some_filter(some_value: str) -> str: - return some_value.replace("-", "_") - - Jinja2 - {{ 'blah-blah' | some_filter }} - - :param name: Filter name - :return: Callable used for filter - """ - - def decorator(func): - @functools.wraps(func) - def wrapper(*args, **kwargs): - return func(*args, **kwargs) - - _env.filters[name] = wrapper - return wrapper - - return decorator - - -def register_function(name: str) -> Callable: - """A decorator that can be used to register a function.""" - - def decorator(func): - @functools.wraps(func) - def wrapper(*args, **kwargs): - return func(*args, **kwargs) - - if name in _env.globals: - raise KeyError(f"Jinja already has a function named '{name}'") - _env.globals[name] = wrapper - return wrapper - - return decorator - - -def make_context(request: Request, title: str, next: str = None): - """Create a context for a jinja2 TemplateResponse.""" - import aurweb.auth.creds - - commit_url = aurweb.config.get_with_fallback("devel", "commit_url", None) - commit_hash = aurweb.config.get_with_fallback("devel", "commit_hash", None) - max_chars_comment = aurweb.config.getint("options", "max_chars_comment", 5000) - if commit_hash: - # Shorten commit_hash to a short Git hash. - commit_hash = commit_hash[:7] - - timezone = time.get_request_timezone(request) - language = l10n.get_request_language(request) - return { - "request": request, - "commit_url": commit_url, - "commit_hash": commit_hash, - "language": language, - "languages": l10n.SUPPORTED_LANGUAGES, - "rtl": language in l10n.RIGHT_TO_LEFT_LANGUAGES, - "timezone": timezone, - "timezones": time.SUPPORTED_TIMEZONES, - "title": title, - "now": time.now(timezone), - "utcnow": time.utcnow(), - "config": aurweb.config, - "creds": aurweb.auth.creds, - "next": next if next else request.url.path, - "version": os.environ.get("COMMIT_HASH", aurweb.config.AURWEB_VERSION), - "max_chars_comment": max_chars_comment, - } - - -async def make_variable_context(request: Request, title: str, next: str = None): - """Make a context with variables provided by the user - (query params via GET or form data via POST).""" - context = make_context(request, title, next) - to_copy = ( - dict(request.query_params) - if request.method.lower() == "get" - else dict(await request.form()) - ) - - for k, v in to_copy.items(): - if k not in context: - context[k] = v - context["q"] = dict(request.query_params) - - return context - - -def base_template(path: str): - templates = copy.copy(_env) - return templates.get_template(path) - - -def render_raw_template(request: Request, path: str, context: dict): - """Render a Jinja2 multi-lingual template with some context.""" - # Create a deep copy of our jinja2 _environment. The _environment in - # total by itself is 48 bytes large (according to sys.getsizeof). - # This is done so we can install gettext translations on the template - # _environment being rendered without installing them into a global - # which is reused in this function. - templates = copy.copy(_env) - - translator = l10n.get_raw_translator_for_request(context.get("request")) - templates.install_gettext_translations(translator) - - template = templates.get_template(path) - return template.render(context) - - -def render_template( - request: Request, path: str, context: dict, status_code: HTTPStatus = HTTPStatus.OK -): - """Render a template as an HTMLResponse.""" - rendered = render_raw_template(request, path, context) - return HTMLResponse(rendered, status_code=int(status_code)) diff --git a/aurweb/testing/__init__.py b/aurweb/testing/__init__.py deleted file mode 100644 index b9b1d263..00000000 --- a/aurweb/testing/__init__.py +++ /dev/null @@ -1,63 +0,0 @@ -import aurweb.db -from aurweb import models - - -def setup_test_db(*args): - """This function is to be used to setup a test database before - using it. It takes a variable number of table strings, and for - each table in that set of table strings, it deletes all records. - - The primary goal of this method is to configure empty tables - that tests can use from scratch. This means that tests using - this function should make sure they do not depend on external - records and keep their logic self-contained. - - Generally used inside of pytest fixtures, this function - can be used anywhere, but keep in mind its functionality when - doing so. - - Examples: - setup_test_db("Users", "Sessions") - - test_tables = ["Users", "Sessions"]; - setup_test_db(*test_tables) - """ - # Make sure that we've grabbed the engine before using the session. - aurweb.db.get_engine() - - tables = list(args) - if not tables: - tables = [ - models.AcceptedTerm.__tablename__, - models.ApiRateLimit.__tablename__, - models.Ban.__tablename__, - models.Group.__tablename__, - models.License.__tablename__, - models.OfficialProvider.__tablename__, - models.Package.__tablename__, - models.PackageBase.__tablename__, - models.PackageBlacklist.__tablename__, - models.PackageComaintainer.__tablename__, - models.PackageComment.__tablename__, - models.PackageDependency.__tablename__, - models.PackageGroup.__tablename__, - models.PackageKeyword.__tablename__, - models.PackageLicense.__tablename__, - models.PackageNotification.__tablename__, - models.PackageRelation.__tablename__, - models.PackageRequest.__tablename__, - models.PackageSource.__tablename__, - models.PackageVote.__tablename__, - models.Session.__tablename__, - models.SSHPubKey.__tablename__, - models.Term.__tablename__, - models.Vote.__tablename__, - models.VoteInfo.__tablename__, - models.User.__tablename__, - ] - - aurweb.db.get_session().execute("SET FOREIGN_KEY_CHECKS = 0") - for table in tables: - aurweb.db.get_session().execute(f"DELETE FROM {table}") - aurweb.db.get_session().execute("SET FOREIGN_KEY_CHECKS = 1") - aurweb.db.get_session().expunge_all() diff --git a/aurweb/testing/alpm.py b/aurweb/testing/alpm.py deleted file mode 100644 index 61a9315f..00000000 --- a/aurweb/testing/alpm.py +++ /dev/null @@ -1,88 +0,0 @@ -import hashlib -import os -import re -import shutil -import subprocess - -from aurweb import aur_logging, util -from aurweb.templates import base_template - -logger = aur_logging.get_logger(__name__) - - -class AlpmDatabase: - """ - Fake libalpm database management class. - - This class can be used to add or remove packages from a - test repository. - """ - - repo = "test" - - def __init__(self, database_root: str): - self.root = database_root - self.local = os.path.join(self.root, "local") - self.remote = os.path.join(self.root, "remote") - self.repopath = os.path.join(self.remote, self.repo) - - # Make directories. - os.makedirs(self.local) - os.makedirs(self.remote) - - def _get_pkgdir(self, pkgname: str, pkgver: str, repo: str) -> str: - pkgfile = f"{pkgname}-{pkgver}-1" - pkgdir = os.path.join(self.remote, repo, pkgfile) - os.makedirs(pkgdir) - return pkgdir - - def add( - self, pkgname: str, pkgver: str, arch: str, provides: list[str] = [] - ) -> None: - context = { - "pkgname": pkgname, - "pkgver": pkgver, - "arch": arch, - "provides": provides, - } - template = base_template("testing/alpm_package.j2") - pkgdir = self._get_pkgdir(pkgname, pkgver, self.repo) - desc = os.path.join(pkgdir, "desc") - with open(desc, "w") as f: - f.write(template.render(context)) - - self.compile() - - def remove(self, pkgname: str): - files = os.listdir(self.repopath) - logger.info(f"Files: {files}") - expr = "^" + pkgname + r"-[0-9.]+-1$" - logger.info(f"Expression: {expr}") - to_delete = filter(lambda e: re.match(expr, e), files) - - for target in to_delete: - logger.info(f"Deleting {target}") - path = os.path.join(self.repopath, target) - shutil.rmtree(path) - - self.compile() - - def clean(self) -> None: - db_file = os.path.join(self.remote, "test.db") - try: - os.remove(db_file) - except Exception: - pass - - def compile(self) -> None: - self.clean() - cmdline = ["bash", "-c", "bsdtar -czvf ../test.db *"] - proc = subprocess.run(cmdline, cwd=self.repopath) - assert ( - proc.returncode == 0 - ), f"Bad return code while creating alpm database: {proc.returncode}" - - # Print out the md5 hash value of the new test.db. - test_db = os.path.join(self.remote, "test.db") - db_hash = util.file_hash(test_db, hashlib.md5) - logger.debug(f"{test_db}: {db_hash}") diff --git a/aurweb/testing/email.py b/aurweb/testing/email.py deleted file mode 100644 index 057ff792..00000000 --- a/aurweb/testing/email.py +++ /dev/null @@ -1,164 +0,0 @@ -import base64 -import binascii -import copy -import email -import os -import re -import sys -from typing import TextIO - - -class Email: - """ - An email class used for testing. - - This class targets a specific serial of emails for PYTEST_CURRENT_TEST. - As emails are sent out with util/sendmail, the serial number increases, - starting at 1. - - Email content sent out by aurweb is always base64-encoded. Email.parse() - decodes that for us and puts it into Email.body. - - Example: - - # Get the {test_suite}_{test_function}.1.txt email. - email = Email(1).parse() - print(email.body) - print(email.headers) - - """ - - TEST_DIR = "test-emails" - - def __init__(self, serial: int = 1, autoparse: bool = True): - self.serial = serial - self.content = self._get() - - if autoparse: - self._parse() - - @staticmethod - def reset() -> None: - # Cleanup all email files for this test suite. - prefix = Email.email_prefix(suite=True) - files = os.listdir(Email.TEST_DIR) - for file in files: - if file.startswith(prefix): - os.remove(os.path.join(Email.TEST_DIR, file)) - - @staticmethod - def email_prefix(suite: bool = False) -> str: - """ - Get the email prefix. - - We find the email prefix by reducing PYTEST_CURRENT_TEST to - either {test_suite}_{test_function}. If `suite` is set, we - reduce it to {test_suite} only. - - :param suite: Reduce PYTEST_CURRENT_TEST to {test_suite} - :return: Email prefix with '/', '.', ',', and ':' chars replaced by '_' - """ - value = os.environ.get("PYTEST_CURRENT_TEST", "email").split(" ")[0] - if suite: - value = value.split(":")[0] - return re.sub(r"(\/|\.|,|:)", "_", value) - - @staticmethod - def count() -> int: - """ - Count the current number of emails sent from the test. - - This function is **only** supported inside of pytest functions. - Do not use it elsewhere as data races will occur. - - :return: Number of emails sent by the current test - """ - files = os.listdir(Email.TEST_DIR) - prefix = Email.email_prefix() - expr = "^" + prefix + r"\.\d+\.txt$" - subset = filter(lambda e: re.match(expr, e), files) - return len(list(subset)) - - def _email_path(self) -> str: - filename = self.email_prefix() + f".{self.serial}.txt" - return os.path.join(Email.TEST_DIR, filename) - - def _get(self) -> str: - """ - Get this email's content by reading its file. - - :return: Email content - """ - path = self._email_path() - with open(path) as f: - return f.read() - - def _parse(self) -> "Email": - """ - Parse this email and base64-decode the body. - - This function populates Email.message, Email.headers and Email.body. - - Additionally, after parsing, we write over our email file with - self.glue()'d content (base64-decoded). This is done for ease - of inspection by users. - - :return: self - """ - self.message = email.message_from_string(self.content) - self.headers = dict(self.message) - - # aurweb email notifications always have base64 encoded content. - # Decode it here so self.body is human readable. - try: - self.body = base64.b64decode(self.message.get_payload()).decode() - except (binascii.Error, UnicodeDecodeError): - self.body = self.message.get_payload() - - path = self._email_path() - with open(path, "w") as f: - f.write(self.glue()) - - return self - - def parse(self) -> "Email": - return self - - def glue(self) -> str: - """ - Glue parsed content back into a complete email document, but - base64-decoded this time. - - :return: Email document as a string - """ - headers = copy.copy(self.headers) - - if "Content-Transfer-Encoding" in headers: - headers.pop("Content-Transfer-Encoding") - - output = [] - for k, v in headers.items(): - output.append(f"{k}: {v}") - output.append("") - output.append(self.body) - return "\n".join(output) - - @staticmethod - def dump(file: TextIO = sys.stdout) -> None: - """ - Dump emails content to `file`. - - This function is intended to be used to debug email issues - while testing something relevent to email. - - :param file: Writable file object - """ - lines = [] - for i in range(Email.count()): - email = Email(i + 1) - lines += [ - f"== Email #{i + 1} ==", - email.glue(), - f"== End of Email #{i + 1}", - ] - print("\n".join(lines), file=file) diff --git a/aurweb/testing/filelock.py b/aurweb/testing/filelock.py deleted file mode 100644 index d582f0bf..00000000 --- a/aurweb/testing/filelock.py +++ /dev/null @@ -1,31 +0,0 @@ -import hashlib -import os -from typing import Callable - -from posix_ipc import O_CREAT, Semaphore - -from aurweb import aur_logging - -logger = aur_logging.get_logger(__name__) - - -def default_on_create(path): - logger.info(f"Filelock at {path} acquired.") - - -class FileLock: - def __init__(self, tmpdir, name: str): - self.root = tmpdir - self.path = str(self.root / name) - self._file = str(self.root / (f"{name}.1")) - - def lock(self, on_create: Callable = default_on_create): - hash = hashlib.sha1(self.path.encode()).hexdigest() - with Semaphore(f"/{hash}-lock", flags=O_CREAT, initial_value=1): - retval = os.path.exists(self._file) - if not retval: - with open(self._file, "w") as f: - f.write("1") - on_create(self.path) - - return retval diff --git a/aurweb/testing/git.py b/aurweb/testing/git.py deleted file mode 100644 index 39af87de..00000000 --- a/aurweb/testing/git.py +++ /dev/null @@ -1,105 +0,0 @@ -import os -from typing import Tuple - -import py - -from aurweb.models import Package -from aurweb.templates import base_template -from aurweb.testing.filelock import FileLock -from aurweb.util import shell_exec - - -class GitRepository: - """ - A Git repository class to be used for testing. - - Expects a `tmpdir` fixture on construction, which an 'aur.git' - git repository will be created in. After this class is constructed, - users can call GitRepository.exec for git repository operations. - """ - - def __init__(self, tmpdir: py.path.local): - self.file_lock = FileLock(tmpdir, "aur.git") - self.file_lock.lock(on_create=self._setup) - - def _exec(self, cmdline: str, cwd: str) -> Tuple[int, str, str]: - return shell_exec(cmdline, cwd) - - def _exec_repository(self, cmdline: str) -> Tuple[int, str, str]: - return self._exec(cmdline, cwd=str(self.file_lock.path)) - - def exec(self, cmdline: str) -> Tuple[int, str, str]: - return self._exec_repository(cmdline) - - def _setup(self, path: str) -> None: - """ - Setup the git repository from scratch. - - Create the `path` directory and run the INSTALL recommended - git initialization commands inside of it. Additionally, install - aurweb.git.update to {path}/hooks/update. - - :param path: Repository path not yet created - """ - - os.makedirs(path) - - commands = [ - "git init -q", - "git config --local transfer.hideRefs '^refs/'", - "git config --local --add transfer.hideRefs '!refs/'", - "git config --local --add transfer.hideRefs '!HEAD'", - "git config --local commit.gpgsign false", - "git config --local user.name 'Test User'", - "git config --local user.email 'test@example.org'", - ] - for cmdline in commands: - return_code, out, err = self.exec(cmdline) - assert return_code == 0 - - # This is also done in the INSTALL script to give the `aur` - # ssh user permissions on the repository. We don't need it - # during testing, since our testing user will be controlling - # the repository. It is left here as a note. - # self.exec("chown -R aur .") - - def commit(self, pkg: Package, message: str): - """ - Commit a Package record to the git repository. - - This function generates a PKGBUILD and .SRCINFO based on - `pkg`, then commits them to the repository with the - `message` commit message. - - :param pkg: Package instance - :param message: Commit message - :return: Output of `git rev-parse HEAD` after committing - """ - ref = f"refs/namespaces/{pkg.Name}/refs/heads/master" - rc, out, err = self.exec(f"git checkout -q --orphan {ref}") - assert rc == 0, f"{(rc, out, err)}" - - # Path to aur.git repository. - repo = os.path.join(self.file_lock.path) - - licenses = [f"'{p.License.Name}'" for p in pkg.package_licenses] - depends = [f"'{p.DepName}'" for p in pkg.package_dependencies] - pkgbuild = base_template("testing/PKGBUILD.j2") - pkgbuild_path = os.path.join(repo, "PKGBUILD") - with open(pkgbuild_path, "w") as f: - data = pkgbuild.render(pkg=pkg, licenses=licenses, depends=depends) - f.write(data) - - srcinfo = base_template("testing/SRCINFO.j2") - srcinfo_path = os.path.join(repo, ".SRCINFO") - with open(srcinfo_path, "w") as f: - f.write(srcinfo.render(pkg=pkg)) - - rc, out, err = self.exec("git add PKGBUILD .SRCINFO") - assert rc == 0, f"{(rc, out, err)}" - - rc, out, err = self.exec(f"git commit -q -m '{message}'") - assert rc == 0, f"{(rc, out, err)}" - - # Return stdout of `git rev-parse HEAD`, which is the new commit hash. - return self.exec("git rev-parse HEAD")[1] diff --git a/aurweb/testing/html.py b/aurweb/testing/html.py deleted file mode 100644 index 16b7322b..00000000 --- a/aurweb/testing/html.py +++ /dev/null @@ -1,24 +0,0 @@ -from io import StringIO - -from lxml import etree - -parser = etree.HTMLParser() - - -def parse_root(html: str) -> etree.Element: - """Parse an lxml.etree.ElementTree root from html content. - - :param html: HTML markup - :return: etree.Element - """ - return etree.parse(StringIO(html), parser) - - -def get_errors(content: str) -> list[etree._Element]: - root = parse_root(content) - return root.xpath('//ul[@class="errorlist"]/li') - - -def get_successes(content: str) -> list[etree._Element]: - root = parse_root(content) - return root.xpath('//ul[@class="success"]/li') diff --git a/aurweb/testing/prometheus.py b/aurweb/testing/prometheus.py deleted file mode 100644 index d04190f6..00000000 --- a/aurweb/testing/prometheus.py +++ /dev/null @@ -1,8 +0,0 @@ -from aurweb import prometheus - - -def clear_metrics(): - prometheus.PACKAGES.clear() - prometheus.REQUESTS.clear() - prometheus.SEARCH_REQUESTS.clear() - prometheus.USERS.clear() diff --git a/aurweb/testing/requests.py b/aurweb/testing/requests.py deleted file mode 100644 index da463928..00000000 --- a/aurweb/testing/requests.py +++ /dev/null @@ -1,55 +0,0 @@ -import aurweb.config - - -class User: - """A fake User model.""" - - # Fake columns. - LangPreference = aurweb.config.get("options", "default_lang") - Timezone = aurweb.config.get("options", "default_timezone") - - # A fake authenticated flag. - authenticated = False - - def is_authenticated(self): - return self.authenticated - - -class Client: - """A fake FastAPI Request.client object.""" - - # A fake host. - host = "127.0.0.1" - - -class URL: - path: str - - def __init__(self, path: str = "/"): - self.path = path - - -class Request: - """A fake Request object which mimics a FastAPI Request for tests.""" - - client = Client() - url = URL() - - def __init__( - self, - user: User = User(), - authenticated: bool = False, - method: str = "GET", - headers: dict[str, str] = dict(), - cookies: dict[str, str] = dict(), - url: str = "/", - query_params: dict[str, str] = dict(), - ) -> "Request": - self.user = user - self.user.authenticated = authenticated - - self.method = method.upper() - self.headers = headers - self.cookies = cookies - self.url = URL(path=url) - self.query_params = query_params diff --git a/aurweb/testing/smtp.py b/aurweb/testing/smtp.py deleted file mode 100644 index 7596fbe9..00000000 --- a/aurweb/testing/smtp.py +++ /dev/null @@ -1,46 +0,0 @@ -""" Fake SMTP clients that can be used for testing. """ - - -class FakeSMTP: - """A fake version of smtplib.SMTP used for testing.""" - - starttls_enabled = False - use_ssl = False - - def __init__(self): - self.emails = [] - self.count = 0 - self.ehlo_count = 0 - self.quit_count = 0 - self.set_debuglevel_count = 0 - self.user = None - self.passwd = None - - def ehlo(self) -> None: - self.ehlo_count += 1 - - def starttls(self) -> None: - self.starttls_enabled = True - - def set_debuglevel(self, level: int = 0) -> None: - self.set_debuglevel_count += 1 - - def login(self, user: str, passwd: str) -> None: - self.user = user - self.passwd = passwd - - def sendmail(self, sender: str, to: str, msg: bytes) -> None: - self.emails.append((sender, to, msg.decode())) - self.count += 1 - - def quit(self) -> None: - self.quit_count += 1 - - def __call__(self, *args, **kwargs) -> "FakeSMTP": - return self - - -class FakeSMTP_SSL(FakeSMTP): - """A fake version of smtplib.SMTP_SSL used for testing.""" - - use_ssl = True diff --git a/aurweb/time.py b/aurweb/time.py deleted file mode 100644 index 2d5ddcc1..00000000 --- a/aurweb/time.py +++ /dev/null @@ -1,92 +0,0 @@ -import zoneinfo -from collections import OrderedDict -from datetime import UTC, datetime -from zoneinfo import ZoneInfo - -from fastapi import Request - -import aurweb.config - - -def tz_offset(name: str): - """Get a timezone offset in the form "+00:00" by its name. - - Example: tz_offset('America/Los_Angeles') - - :param name: Timezone name - :return: UTC offset in the form "+00:00" - """ - dt = datetime.now(tz=zoneinfo.ZoneInfo(name)) - - # Our offset in hours. - offset = dt.utcoffset().total_seconds() / 60 / 60 - - # Prefix the offset string with a - or +. - offset_string = "-" if offset < 0 else "+" - - # Remove any negativity from the offset. We want a good offset. :) - offset = abs(offset) - - # Truncate the floating point digits, giving the hours. - hours = int(offset) - - # Subtract hours from the offset, and multiply the remaining fraction - # (0 - 0.99[repeated]) with 60 minutes to get the number of minutes - # remaining in the hour. - minutes = int((offset - hours) * 60) - - # Pad the hours and minutes by two places. - offset_string += "{:0>2}:{:0>2}".format(hours, minutes) - return offset_string - - -SUPPORTED_TIMEZONES = OrderedDict( - { - # Flatten out the list of tuples into an OrderedDict. - timezone: offset - for timezone, offset in sorted( - [ - # Comprehend a list of tuples (timezone, offset display string) - # and sort them by (offset, timezone). - (tz, "(UTC%s) %s" % (tz_offset(tz), tz)) - for tz in zoneinfo.available_timezones() - ], - key=lambda element: (tz_offset(element[0]), element[0]), - ) - } -) - - -def get_request_timezone(request: Request) -> str: - """Get a request's timezone from either query param or user settings. - We use the configuration's [options] default_timezone otherwise. - - @param request FastAPI request - """ - request_tz = request.query_params.get("timezone") - if request_tz and request_tz in SUPPORTED_TIMEZONES: - return request_tz - elif ( - request.user.is_authenticated() and request.user.Timezone in SUPPORTED_TIMEZONES - ): - return request.user.Timezone - return aurweb.config.get_with_fallback("options", "default_timezone", "UTC") - - -def now(timezone: str) -> datetime: - """ - Get the current timezone-localized timestamp. - - :param timezone: Valid timezone supported by ZoneInfo - :return: Current localized datetime - """ - return datetime.now(tz=ZoneInfo(timezone)) - - -def utcnow() -> int: - """ - Get the current UTC timestamp. - - :return: Current UTC timestamp - """ - return int(datetime.now(UTC).timestamp()) diff --git a/aurweb/users/__init__.py b/aurweb/users/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aurweb/users/update.py b/aurweb/users/update.py deleted file mode 100644 index 759088cd..00000000 --- a/aurweb/users/update.py +++ /dev/null @@ -1,152 +0,0 @@ -from typing import Any - -from fastapi import Request - -from aurweb import db, models, time, util -from aurweb.models import SSHPubKey -from aurweb.models.ssh_pub_key import get_fingerprint -from aurweb.util import strtobool - - -@db.retry_deadlock -def simple( - U: str = str(), - E: str = str(), - H: bool = False, - BE: str = str(), - R: str = str(), - HP: str = str(), - I: str = str(), - K: str = str(), - J: bool = False, - CN: bool = False, - UN: bool = False, - ON: bool = False, - HDC: bool = False, - S: bool = False, - user: models.User = None, - **kwargs, -) -> None: - now = time.utcnow() - with db.begin(): - user.Username = U or user.Username - user.Email = E or user.Email - user.HideEmail = strtobool(H) - user.BackupEmail = user.BackupEmail if BE is None else BE - user.RealName = user.RealName if R is None else R - user.Homepage = user.Homepage if HP is None else HP - user.IRCNick = user.IRCNick if I is None else I - user.PGPKey = user.PGPKey if K is None else K - user.Suspended = strtobool(S) - user.InactivityTS = now * int(strtobool(J)) - user.CommentNotify = strtobool(CN) - user.UpdateNotify = strtobool(UN) - user.OwnershipNotify = strtobool(ON) - user.HideDeletedComments = strtobool(HDC) - - -@db.retry_deadlock -def language( - L: str = str(), - request: Request = None, - user: models.User = None, - context: dict[str, Any] = {}, - **kwargs, -) -> None: - if L and L != user.LangPreference: - with db.begin(): - user.LangPreference = L - context["language"] = L - - -@db.retry_deadlock -def timezone( - TZ: str = str(), - request: Request = None, - user: models.User = None, - context: dict[str, Any] = {}, - **kwargs, -) -> None: - if TZ and TZ != user.Timezone: - with db.begin(): - user.Timezone = TZ - context["language"] = TZ - - -@db.retry_deadlock -def ssh_pubkey(PK: str = str(), user: models.User = None, **kwargs) -> None: - if not PK: - # If no pubkey is provided, wipe out any pubkeys the user - # has and return out early. - with db.begin(): - db.delete_all(user.ssh_pub_keys) - return - - # Otherwise, parse ssh keys and their fprints out of PK. - keys = util.parse_ssh_keys(PK.strip()) - fprints = [get_fingerprint(" ".join(k)) for k in keys] - - with db.begin(): - # Delete any existing keys we can't find. - to_remove = user.ssh_pub_keys.filter(~SSHPubKey.Fingerprint.in_(fprints)) - db.delete_all(to_remove) - - # For each key, if it does not yet exist, create it. - for i, full_key in enumerate(keys): - prefix, key = full_key - exists = user.ssh_pub_keys.filter( - SSHPubKey.Fingerprint == fprints[i] - ).exists() - if not db.query(exists).scalar(): - # No public key exists, create one. - db.create( - models.SSHPubKey, - UserID=user.ID, - PubKey=" ".join([prefix, key]), - Fingerprint=fprints[i], - ) - - -@db.retry_deadlock -def account_type(T: int = None, user: models.User = None, **kwargs) -> None: - if T is not None and (T := int(T)) != user.AccountTypeID: - with db.begin(): - user.AccountTypeID = T - - -@db.retry_deadlock -def password( - P: str = str(), - request: Request = None, - user: models.User = None, - context: dict[str, Any] = {}, - **kwargs, -) -> None: - if P and not user.valid_password(P): - # Remove the fields we consumed for passwords. - context["P"] = context["C"] = str() - - # If a password was given and it doesn't match the user's, update it. - with db.begin(): - user.update_password(P) - - if user == request.user: - # If the target user is the request user, login with - # the updated password to update the Session record. - user.login(request, P) - - -@db.retry_deadlock -def suspend( - S: bool = False, - request: Request = None, - user: models.User = None, - context: dict[str, Any] = {}, - **kwargs, -) -> None: - if S and user.session: - context["S"] = None - with db.begin(): - db.delete_all( - db.query(models.Session).filter(models.Session.UsersID == user.ID) - ) diff --git a/aurweb/users/util.py b/aurweb/users/util.py deleted file mode 100644 index e9635f08..00000000 --- a/aurweb/users/util.py +++ /dev/null @@ -1,19 +0,0 @@ -from http import HTTPStatus - -from fastapi import HTTPException - -from aurweb import db -from aurweb.models import User - - -def get_user_by_name(username: str) -> User: - """ - Query a user by its username. - - :param username: User.Username - :return: User instance - """ - user = db.query(User).filter(User.Username == username).first() - if not user: - raise HTTPException(status_code=int(HTTPStatus.NOT_FOUND)) - return db.refresh(user) diff --git a/aurweb/users/validate.py b/aurweb/users/validate.py deleted file mode 100644 index 81484e90..00000000 --- a/aurweb/users/validate.py +++ /dev/null @@ -1,234 +0,0 @@ -""" -Validation functions for account registration and edit fields. -Each of these functions extracts a subset of keyword arguments -out of form data from /account/register or /account/{username}/edit. - -All functions in this module raise aurweb.exceptions.ValidationError -when encountering invalid criteria and return silently otherwise. -""" - -from fastapi import Request -from sqlalchemy import and_ - -from aurweb import aur_logging, config, db, l10n, models, time, util -from aurweb.auth import creds -from aurweb.captcha import get_captcha_answer, get_captcha_salts, get_captcha_token -from aurweb.exceptions import ValidationError -from aurweb.models.account_type import ACCOUNT_TYPE_NAME -from aurweb.models.ssh_pub_key import get_fingerprint -from aurweb.util import strtobool - -logger = aur_logging.get_logger(__name__) - - -def invalid_fields(E: str = str(), U: str = str(), **kwargs) -> None: - if not E or not U: - raise ValidationError(["Missing a required field."]) - - -def invalid_suspend_permission( - request: Request = None, user: models.User = None, S: str = "False", **kwargs -) -> None: - if not request.user.is_elevated() and strtobool(S) != bool(user.Suspended): - raise ValidationError(["You do not have permission to suspend accounts."]) - - -def invalid_username( - request: Request = None, U: str = str(), _: l10n.Translator = None, **kwargs -) -> None: - if not util.valid_username(U): - username_min_len = config.getint("options", "username_min_len") - username_max_len = config.getint("options", "username_max_len") - raise ValidationError( - [ - "The username is invalid.", - [ - _("It must be between %s and %s characters long") - % (username_min_len, username_max_len), - "Start and end with a letter or number", - "Can contain only one period, underscore or hyphen.", - ], - ] - ) - - -def invalid_password( - P: str = str(), C: str = str(), _: l10n.Translator = None, **kwargs -) -> None: - if P: - if not util.valid_password(P): - passwd_min_len = config.getint("options", "passwd_min_len") - raise ValidationError( - [_("Your password must be at least %s characters.") % (passwd_min_len)] - ) - elif not C: - raise ValidationError(["Please confirm your new password."]) - elif P != C: - raise ValidationError(["Password fields do not match."]) - - -def is_banned(request: Request = None, **kwargs) -> None: - host = util.get_client_ip(request) - exists = db.query(models.Ban, models.Ban.IPAddress == host).exists() - if db.query(exists).scalar(): - raise ValidationError( - [ - "Account registration has been disabled for your " - "IP address, probably due to sustained spam attacks. " - "Sorry for the inconvenience." - ] - ) - - -def invalid_user_password( - request: Request = None, passwd: str = str(), **kwargs -) -> None: - if request.user.is_authenticated(): - if not request.user.valid_password(passwd): - raise ValidationError(["Invalid password."]) - - -def invalid_email(E: str = str(), **kwargs) -> None: - if not util.valid_email(E): - raise ValidationError(["The email address is invalid."]) - - -def invalid_backup_email(BE: str = str(), **kwargs) -> None: - if BE and not util.valid_email(BE): - raise ValidationError(["The backup email address is invalid."]) - - -def invalid_homepage(HP: str = str(), **kwargs) -> None: - if HP and not util.valid_homepage(HP): - raise ValidationError( - ["The home page is invalid, please specify the full HTTP(s) URL."] - ) - - -def invalid_pgp_key(K: str = str(), **kwargs) -> None: - if K and not util.valid_pgp_fingerprint(K): - raise ValidationError(["The PGP key fingerprint is invalid."]) - - -def invalid_ssh_pubkey( - PK: str = str(), user: models.User = None, _: l10n.Translator = None, **kwargs -) -> None: - if not PK: - return - - try: - keys = util.parse_ssh_keys(PK.strip()) - except ValueError as exc: - raise ValidationError([str(exc)]) - - for prefix, key in keys: - fingerprint = get_fingerprint(f"{prefix} {key}") - - exists = ( - db.query(models.SSHPubKey) - .filter( - and_( - models.SSHPubKey.UserID != user.ID, - models.SSHPubKey.Fingerprint == fingerprint, - ) - ) - .exists() - ) - if db.query(exists).scalar(): - raise ValidationError( - [ - _("The SSH public key, %s%s%s, is already in use.") - % ("", fingerprint, "") - ] - ) - - -def invalid_language(L: str = str(), **kwargs) -> None: - if L and L not in l10n.SUPPORTED_LANGUAGES: - raise ValidationError(["Language is not currently supported."]) - - -def invalid_timezone(TZ: str = str(), **kwargs) -> None: - if TZ and TZ not in time.SUPPORTED_TIMEZONES: - raise ValidationError(["Timezone is not currently supported."]) - - -def username_in_use( - U: str = str(), user: models.User = None, _: l10n.Translator = None, **kwargs -) -> None: - exists = ( - db.query(models.User) - .filter(and_(models.User.ID != user.ID, models.User.Username == U)) - .exists() - ) - if db.query(exists).scalar(): - # If the username already exists... - raise ValidationError( - [ - _("The username, %s%s%s, is already in use.") - % ("", U, "") - ] - ) - - -def email_in_use( - E: str = str(), user: models.User = None, _: l10n.Translator = None, **kwargs -) -> None: - exists = ( - db.query(models.User) - .filter(and_(models.User.ID != user.ID, models.User.Email == E)) - .exists() - ) - if db.query(exists).scalar(): - # If the email already exists... - raise ValidationError( - [ - _("The address, %s%s%s, is already in use.") - % ("", E, "") - ] - ) - - -def invalid_account_type( - T: int = None, - request: Request = None, - user: models.User = None, - _: l10n.Translator = None, - **kwargs, -) -> None: - if T is not None and (T := int(T)) != user.AccountTypeID: - name = ACCOUNT_TYPE_NAME.get(T, None) - has_cred = request.user.has_credential(creds.ACCOUNT_CHANGE_TYPE) - if name is None: - raise ValidationError(["Invalid account type provided."]) - elif not has_cred: - raise ValidationError( - ["You do not have permission to change account types."] - ) - elif T > request.user.AccountTypeID: - # If the chosen account type is higher than the editor's account - # type, the editor doesn't have permission to set the new type. - error = ( - _( - "You do not have permission to change " - "this user's account type to %s." - ) - % name - ) - raise ValidationError([error]) - - logger.debug( - f"Package Maintainer '{request.user.Username}' has " - f"modified '{user.Username}' account's type to" - f" {name}." - ) - - -def invalid_captcha(captcha_salt: str = None, captcha: str = None, **kwargs) -> None: - if captcha_salt and captcha_salt not in get_captcha_salts(): - raise ValidationError(["This CAPTCHA has expired. Please try again."]) - - if captcha: - answer = get_captcha_answer(get_captcha_token(captcha_salt)) - if captcha != answer: - raise ValidationError(["The entered CAPTCHA answer is invalid."]) diff --git a/aurweb/util.py b/aurweb/util.py deleted file mode 100644 index 89efd852..00000000 --- a/aurweb/util.py +++ /dev/null @@ -1,218 +0,0 @@ -import math -import re -import secrets -import shlex -import string -from datetime import datetime -from hashlib import sha1 -from http import HTTPStatus -from subprocess import PIPE, Popen -from typing import Callable, Iterable, Tuple, Union -from urllib.parse import urlparse - -import fastapi -import pygit2 -from email_validator import EmailSyntaxError, validate_email -from fastapi.responses import JSONResponse -from sqlalchemy.orm import Query - -import aurweb.config -from aurweb import aur_logging, defaults - -logger = aur_logging.get_logger(__name__) - - -def make_random_string(length: int) -> str: - alphanumerics = string.ascii_lowercase + string.digits - return "".join([secrets.choice(alphanumerics) for i in range(length)]) - - -def make_nonce(length: int = 8): - """Generate a single random nonce. Here, token_hex generates a hex - string of 2 hex characters per byte, where the length give is - nbytes. This means that to get our proper string length, we need to - cut it in half and truncate off any remaining (in the case that - length was uneven).""" - return secrets.token_hex(math.ceil(length / 2))[:length] - - -def valid_username(username): - min_len = aurweb.config.getint("options", "username_min_len") - max_len = aurweb.config.getint("options", "username_max_len") - if not (min_len <= len(username) <= max_len): - return False - - # Check that username contains: one or more alphanumeric - # characters, an optional separator of '.', '-' or '_', followed - # by alphanumeric characters. - return re.match(r"^[a-zA-Z0-9]+[.\-_]?[a-zA-Z0-9]+$", username) - - -def valid_email(email): - try: - validate_email(email, check_deliverability=False) - except EmailSyntaxError: - return False - return True - - -def valid_homepage(homepage): - try: - parts = urlparse(homepage) - except ValueError: - return False - return parts.scheme in ("http", "https") and bool(parts.netloc) - - -def valid_password(password): - min_len = aurweb.config.getint("options", "passwd_min_len") - return len(password) >= min_len - - -def valid_pgp_fingerprint(fp): - try: - # Attempt to convert the fingerprint to an int via base16. - # If it can't, it's not a hex string. - int(fp, 16) - except ValueError: - return False - - # Check the length; must be 40 hexadecimal digits. - return len(fp) == 40 - - -def jsonify(obj): - """Perform a conversion on obj if it's needed.""" - if isinstance(obj, datetime): - obj = int(obj.timestamp()) - return obj - - -def get_ssh_fingerprints(): - return aurweb.config.get_section("fingerprints") or {} - - -def apply_all(iterable: Iterable, fn: Callable): - for item in iterable: - fn(item) - return iterable - - -def sanitize_params(offset_str: str, per_page_str: str) -> Tuple[int, int]: - try: - offset = defaults.O if int(offset_str) < 0 else int(offset_str) - except ValueError: - offset = defaults.O - - try: - per_page = defaults.PP if int(per_page_str) <= 0 else int(per_page_str) - except ValueError: - per_page = defaults.PP - - return offset, per_page - - -def strtobool(value: Union[str, bool]) -> bool: - if not value: - return False - return str(value).lower() in ("y", "yes", "t", "true", "on", "1") - - -def file_hash(filepath: str, hash_function: Callable) -> str: - """ - Return a hash of filepath contents using `hash_function`. - - `hash_function` can be any one of the hashlib module's hash - functions which implement the `hexdigest()` method -- e.g. - hashlib.sha1, hashlib.md5, etc. - - :param filepath: Path to file you want to hash - :param hash_function: hashlib hash function - :return: hash_function(filepath_content).hexdigest() - """ - with open(filepath, "rb") as f: - hash_ = hash_function(f.read()) - return hash_.hexdigest() - - -def git_search(repo: pygit2.Repository, commit_hash: str) -> int: - """ - Return the shortest prefix length matching `commit_hash` found. - - :param repo: pygit2.Repository instance - :param commit_hash: Full length commit hash - :return: Shortest unique prefix length found - """ - prefixlen = 12 - while prefixlen < len(commit_hash): - if commit_hash[:prefixlen] in repo: - break - prefixlen += 1 - return prefixlen - - -async def error_or_result(next: Callable, *args, **kwargs) -> fastapi.Response: - """ - Try to return a response from `next`. - - If RuntimeError is raised during next(...) execution, return a - 500 with the exception's error as a JSONResponse. - - :param next: Callable of the next fastapi route callback - :param *args: Variable number of arguments passed to the endpoint - :param **kwargs: Optional kwargs to pass to the endpoint - :return: next(...) retval; if an exc is raised: a 500 response - """ - try: - response = await next(*args, **kwargs) - except RuntimeError as exc: - logger.error(f"RuntimeError: {exc}") - status_code = HTTPStatus.INTERNAL_SERVER_ERROR - return JSONResponse({"error": str(exc)}, status_code=status_code) - return response - - -def parse_ssh_key(string: str) -> Tuple[str, str]: - """Parse an SSH public key.""" - invalid_exc = ValueError("The SSH public key is invalid.") - parts = re.sub(r"\s\s+", " ", string.strip()).split() - if len(parts) < 2: - raise invalid_exc - - prefix, key = parts[:2] - prefixes = set(aurweb.config.get("auth", "valid-keytypes").split(" ")) - if prefix not in prefixes: - raise invalid_exc - - proc = Popen(["ssh-keygen", "-l", "-f", "-"], stdin=PIPE, stdout=PIPE, stderr=PIPE) - out, _ = proc.communicate(f"{prefix} {key}".encode()) - if proc.returncode: - raise invalid_exc - - return prefix, key - - -def parse_ssh_keys(string: str) -> set[Tuple[str, str]]: - """Parse a list of SSH public keys.""" - return set([parse_ssh_key(e) for e in string.strip().splitlines(True) if e.strip()]) - - -def shell_exec(cmdline: str, cwd: str) -> Tuple[int, str, str]: - args = shlex.split(cmdline) - proc = Popen(args, cwd=cwd, stdout=PIPE, stderr=PIPE) - out, err = proc.communicate() - return proc.returncode, out.decode().strip(), err.decode().strip() - - -def hash_query(query: Query): - return sha1( - str(query.statement.compile(compile_kwargs={"literal_binds": True})).encode() - ).hexdigest() - - -def get_client_ip(request: fastapi.Request) -> str: - """ - Returns the client's IP address for a Request. - Falls back to 'testclient' if request.client is None - """ - return request.client.host if request.client else "testclient" diff --git a/cache/.gitkeep b/cache/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/ci/tf/.terraform.lock.hcl b/ci/tf/.terraform.lock.hcl deleted file mode 100644 index aa5501c4..00000000 --- a/ci/tf/.terraform.lock.hcl +++ /dev/null @@ -1,61 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/hashicorp/dns" { - version = "3.3.2" - hashes = [ - "h1:HjskPLRqmCw8Q/kiSuzti3iJBSpcAvcBFdlwFFQuoDE=", - "zh:05d2d50e301318362a4a82e6b7a9734ace07bc01abaaa649c566baf98814755f", - "zh:1e9fd1c3bfdda777e83e42831dd45b7b9e794250a0f351e5fd39762e8a0fe15b", - "zh:40e715fc7a2ede21f919567249b613844692c2f8a64f93ee64e5b68bae7ac2a2", - "zh:454d7aa83000a6e2ba7a7bfde4bcf5d7ed36298b22d760995ca5738ab02ee468", - "zh:46124ded51b4153ad90f12b0305fdbe0c23261b9669aa58a94a31c9cca2f4b19", - "zh:55a4f13d20f73534515a6b05701abdbfc54f4e375ba25b2dffa12afdad20e49d", - "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:7903b1ceb8211e2b8c79290e2e70906a4b88f4fba71c900eb3a425ce12f1716a", - "zh:b79fc4f444ef7a2fd7111a80428c070ad824f43a681699e99ab7f83074dfedbd", - "zh:ca9f45e0c4cb94e7d62536c226024afef3018b1de84f1ea4608b51bcd497a2a0", - "zh:ddc8bd894559d7d176e0ceb0bb1ae266519b01b315362ebfee8327bb7e7e5fa8", - "zh:e77334c0794ef8f9354b10e606040f6b0b67b373f5ff1db65bddcdd4569b428b", - ] -} - -provider "registry.terraform.io/hashicorp/tls" { - version = "4.0.4" - hashes = [ - "h1:pe9vq86dZZKCm+8k1RhzARwENslF3SXb9ErHbQfgjXU=", - "zh:23671ed83e1fcf79745534841e10291bbf34046b27d6e68a5d0aab77206f4a55", - "zh:45292421211ffd9e8e3eb3655677700e3c5047f71d8f7650d2ce30242335f848", - "zh:59fedb519f4433c0fdb1d58b27c210b27415fddd0cd73c5312530b4309c088be", - "zh:5a8eec2409a9ff7cd0758a9d818c74bcba92a240e6c5e54b99df68fff312bbd5", - "zh:5e6a4b39f3171f53292ab88058a59e64825f2b842760a4869e64dc1dc093d1fe", - "zh:810547d0bf9311d21c81cc306126d3547e7bd3f194fc295836acf164b9f8424e", - "zh:824a5f3617624243bed0259d7dd37d76017097dc3193dac669be342b90b2ab48", - "zh:9361ccc7048be5dcbc2fafe2d8216939765b3160bd52734f7a9fd917a39ecbd8", - "zh:aa02ea625aaf672e649296bce7580f62d724268189fe9ad7c1b36bb0fa12fa60", - "zh:c71b4cd40d6ec7815dfeefd57d88bc592c0c42f5e5858dcc88245d371b4b8b1e", - "zh:dabcd52f36b43d250a3d71ad7abfa07b5622c69068d989e60b79b2bb4f220316", - "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - ] -} - -provider "registry.terraform.io/hetznercloud/hcloud" { - version = "1.42.0" - hashes = [ - "h1:cr9lh26H3YbWSHb7OUnCoYw169cYO3Cjpt3yPnRhXS0=", - "zh:153b5f39d780e9a18bc1ea377d872647d328d943813cbd25d3d20863f8a37782", - "zh:35b9e95760c58cca756e34ad5f4138ac6126aa3e8c41b4a0f1d5dc9ee5666c73", - "zh:47a3cdbce982f2b4e17f73d4934bdb3e905a849b36fb59b80f87d852496ed049", - "zh:6a718c244c2ba300fbd43791661a061ad1ab16225ef3e8aeaa3db8c9eff12c85", - "zh:a2cbfc95c5e2c9422ed0a7b6292192c38241220d5b7813c678f937ab3ef962ae", - "zh:b837e118e08fd36aa8be48af7e9d0d3d112d2680c79cfc71cfe2501fb40dbefa", - "zh:bf66db8c680e18b77e16dc1f20ed1cdcc7876bfb7848c320ccb86f0fb80661ed", - "zh:c1ad80bbe48dc8a272a02dcdb4b12f019606f445606651c01e561b9d72d816b1", - "zh:d4e616701128ad14a6b5a427b0e9145ece4cad02aa3b5f9945c6d0b9ada8ab70", - "zh:d9d01f727037d028720100a5bc9fd213cb01e63e4b439a16f2f482c147976530", - "zh:dea047ee4d679370d4376fb746c4b959bf51dd06047c1c2656b32789c2433643", - "zh:e5ad7a3c556894bd40b28a874e7d2f6924876fa75fa443136a7d6ab9a00abbaa", - "zh:edf6e7e129157bd45e3da4a330d1ace17a336d417c3b77c620f302d440c368e8", - "zh:f610bc729866d58da9cffa4deae34dbfdba96655e855a87c6bb2cb7b35a8961c", - ] -} diff --git a/ci/tf/main.tf b/ci/tf/main.tf deleted file mode 100644 index b149a621..00000000 --- a/ci/tf/main.tf +++ /dev/null @@ -1,67 +0,0 @@ -terraform { - backend "http" { - } -} - -provider "hcloud" { - token = var.hcloud_token -} - -provider "dns" { - update { - server = var.dns_server - key_name = var.dns_tsig_key - key_algorithm = var.dns_tsig_algorithm - key_secret = var.dns_tsig_secret - } -} - -resource "tls_private_key" "this" { - algorithm = "ED25519" -} - -resource "hcloud_ssh_key" "this" { - name = var.name - public_key = tls_private_key.this.public_key_openssh -} - -data "hcloud_image" "this" { - with_selector = "custom_image=archlinux" - most_recent = true - with_status = ["available"] -} - -resource "hcloud_server" "this" { - name = var.name - image = data.hcloud_image.this.id - server_type = var.server_type - datacenter = var.datacenter - ssh_keys = [hcloud_ssh_key.this.name] - - public_net { - ipv4_enabled = true - ipv6_enabled = true - } -} - -resource "hcloud_rdns" "this" { - for_each = { ipv4 : hcloud_server.this.ipv4_address, ipv6 : hcloud_server.this.ipv6_address } - - server_id = hcloud_server.this.id - ip_address = each.value - dns_ptr = "${var.name}.${var.dns_zone}" -} - -resource "dns_a_record_set" "this" { - zone = "${var.dns_zone}." - name = var.name - addresses = [hcloud_server.this.ipv4_address] - ttl = 300 -} - -resource "dns_aaaa_record_set" "this" { - zone = "${var.dns_zone}." - name = var.name - addresses = [hcloud_server.this.ipv6_address] - ttl = 300 -} diff --git a/ci/tf/terraform.tfvars b/ci/tf/terraform.tfvars deleted file mode 100644 index 14818592..00000000 --- a/ci/tf/terraform.tfvars +++ /dev/null @@ -1,4 +0,0 @@ -server_type = "cpx11" -datacenter = "fsn1-dc14" -dns_server = "redirect.archlinux.org" -dns_zone = "sandbox.archlinux.page" diff --git a/ci/tf/variables.tf b/ci/tf/variables.tf deleted file mode 100644 index a4e710ee..00000000 --- a/ci/tf/variables.tf +++ /dev/null @@ -1,36 +0,0 @@ -variable "hcloud_token" { - type = string - sensitive = true -} - -variable "dns_server" { - type = string -} - -variable "dns_tsig_key" { - type = string -} - -variable "dns_tsig_algorithm" { - type = string -} - -variable "dns_tsig_secret" { - type = string -} - -variable "dns_zone" { - type = string -} - -variable "name" { - type = string -} - -variable "server_type" { - type = string -} - -variable "datacenter" { - type = string -} diff --git a/ci/tf/versions.tf b/ci/tf/versions.tf deleted file mode 100644 index 2c72215a..00000000 --- a/ci/tf/versions.tf +++ /dev/null @@ -1,13 +0,0 @@ -terraform { - required_providers { - tls = { - source = "hashicorp/tls" - } - hcloud = { - source = "hetznercloud/hcloud" - } - dns = { - source = "hashicorp/dns" - } - } -} diff --git a/cliff.toml b/cliff.toml deleted file mode 100644 index 3d3cb1c7..00000000 --- a/cliff.toml +++ /dev/null @@ -1,52 +0,0 @@ -# configuration file for git-cliff (0.1.0) - -[changelog] -# changelog header -header = "" -# template for the changelog body -# https://tera.netlify.app/docs/#introduction -body = """ -{% if version %}\ -Release {{ version }} - {{ timestamp | date(format="%Y-%m-%d") }} ---------------------------- -{% else %}\ -Changelog (untagged) ---------------------------- -{% endif %}\ -{% for group, commits in commits | group_by(attribute="group") %} -{{ group | lower }}:\ -{% for commit in commits %} -- {{ commit.id | truncate(length=8, end="") }}: {% if commit.scope %}({{ commit.scope }}) {% endif %}{{ commit.message }}\ -{% endfor %} -{% endfor %}\n -""" -# remove the leading and trailing whitespaces from the template -trim = true -# changelog footer -footer = "" - -[git] -# allow only conventional commits -# https://www.conventionalcommits.org -conventional_commits = true -# regex for parsing and grouping commits -commit_parsers = [ - { message = "^feat", group = "Features"}, - { message = "^fix", group = "Bugfixes"}, - { message = "^doc", group = "Documentation"}, - { message = "^perf", group = "Performance"}, - { message = "^change", group = "Changes" }, - { message = "^refactor", group = "Refactor"}, - { message = "^style", group = "Styling"}, - { message = "^test", group = "Testing"}, - { message = "^housekeep", group = "Housekeeping"}, - { message = "^chore\\(release\\): prepare for", skip = true}, - { message = "^chore", group = "Miscellaneous Tasks"}, - { body = ".*security", group = "Security"}, -] -# filter out the commits that are not matched by commit parsers -filter_commits = false -# glob pattern for matching git tags -tag_pattern = "v[0-9]." -# regex for skipping tags -skip_tags = "v0.1.0-beta.1" diff --git a/conf/cgitrc.proto b/conf/cgitrc.proto index ed53c51c..cb773672 100644 --- a/conf/cgitrc.proto +++ b/conf/cgitrc.proto @@ -1,7 +1,6 @@ virtual-root=/cgit/ clone-prefix=https://aur.archlinux.org noheader=0 -favicon=/images/favicon.ico logo= css=/css/cgit.css snapshots=tar.gz @@ -20,8 +19,8 @@ cache-static-ttl=60 root-title=AUR Package Repositories root-desc=Web interface to the AUR Package Repositories -header=/srv/http/aurweb/static/html/cgit/header.html -footer=/srv/http/aurweb/static/html/cgit/footer.html +header=/srv/http/aurweb/web/template/cgit/header.html +footer=/srv/http/aurweb/web/template/cgit/footer.html max-repodesc-length=50 max-blob-size=2048 max-stats=year diff --git a/conf/config.defaults b/conf/config.defaults deleted file mode 100644 index c9a6899f..00000000 --- a/conf/config.defaults +++ /dev/null @@ -1,182 +0,0 @@ -[database] -backend = mysql -host = localhost -socket = /var/run/mysqld/mysqld.sock -;port = 3306 -name = AUR -user = aur -;password = aur - -[options] -username_min_len = 3 -username_max_len = 16 -passwd_min_len = 8 -default_lang = en -default_timezone = UTC -sql_debug = 0 -; 4 hours - default login_timeout -login_timeout = 14400 -; 30 days - default persistent_cookie_timeout -persistent_cookie_timeout = 2592000 -; 400 days - default permanent_cookie_timeout -permanent_cookie_timeout = 34560000 -max_filesize_uncompressed = 8388608 -disable_http_login = 1 -aur_location = https://aur.archlinux.org -git_clone_uri_anon = https://aur.archlinux.org/%s.git -git_clone_uri_priv = ssh://aur@aur.archlinux.org/%s.git -max_rpc_results = 5000 -max_search_results = 2500 -max_depends = 1000 -aur_request_ml = aur-requests@lists.archlinux.org -ml_thread_url = https://lists.archlinux.org/archives/list/aur-requests@lists.archlinux.org/thread/%s -request_idle_time = 1209600 -request_archive_time = 15552000 -auto_orphan_age = 15552000 -auto_delete_age = 86400 -source_file_uri = /cgit/aur.git/tree/%s?h=%s -log_uri = /cgit/aur.git/log/?h=%s -commit_uri = /cgit/aur.git/commit/?h=%s&id=%s -snapshot_uri = /cgit/aur.git/snapshot/%s.tar.gz -enable-maintenance = 1 -maintenance-exceptions = 127.0.0.1 -render-comment-cmd = /usr/bin/aurweb-rendercomment -localedir = /srv/http/aurweb/web/locale/ -; cache: redis is supported in Python. -cache = none -cache_pkginfo_ttl = 86400 -salt_rounds = 12 -redis_address = redis://localhost -; Toggles traceback display in templates/errors/500.html. -traceback = 0 -; Maximum number of characters for a comment -max_chars_comment = 5000 - -[ratelimit] -request_limit = 4000 -window_length = 86400 -; Force-utilize cache for ratelimiting. In FastAPI, forced cache (1) -; will cause the ratelimit path to use a real or fake Redis instance -; depending on the configured options.cache setting. Otherwise, -; cache will be ignored and the database will be used. -cache = 1 - -[notifications] -notify-cmd = /usr/bin/aurweb-notify -sendmail = -smtp-server = localhost -smtp-port = 25 -smtp-use-ssl = 0 -smtp-use-starttls = 0 -smtp-user = -smtp-password = -smtp-timeout = 60 -sender = notify@aur.archlinux.org -reply-to = noreply@aur.archlinux.org - -; Gitlab instance base URL. We use this instance to report -; server errors in the form of confidential issues (see error-project). -gitlab-instance = https://gitlab.archlinux.org - -; Project URI which will received confidential issues about -; various server details like uncaught exceptions. -; Errors reported will be filed using the 'triage' label, and so -; the 'triage' label must exist in any project URI given. -; -; - must be a valid project URI on notifications.error-repository -; - must contain a 'triage' label -; -error-project = set-me - -; Gitlab access token with API privileges to post -; notifications.error-project issues. -error-token = set-me - -[fingerprints] -Ed25519 = SHA256:HQ03dn6EasJHNDlt51KpQpFkT3yBX83x7BoIkA1iv2k -ECDSA = SHA256:L71Q91yHwmHPYYkJMDgj0xmUuw16qFOhJbBr1mzsiOI -RSA = SHA256:Ju+yWiMb/2O+gKQ9RJCDqvRg7l+Q95KFAeqM5sr6l2s - -[auth] -; For U2F key prefixes, see the following documentation from openssh: -; https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.u2f -valid-keytypes = ssh-rsa ssh-dss ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-ed25519 sk-ecdsa-sha2-nistp256@openssh.com sk-ecdsa-sha2-nistp256-cert-v01@openssh.com sk-ssh-ed25519@openssh.com sk-ssh-ed25519-cert-v01@openssh.com -username-regex = [a-zA-Z0-9]+[.\-_]?[a-zA-Z0-9]+$ -git-serve-cmd = /usr/bin/aurweb-git-serve -ssh-options = restrict - -[sso] -openid_configuration = -client_id = -client_secret = - -[fastapi] -session_secret = - -[serve] -repo-path = /srv/http/aurweb/aur.git/ -repo-regex = [a-z0-9][a-z0-9.+_-]*$ -git-shell-cmd = /usr/bin/git-shell -git-update-cmd = /usr/bin/aurweb-git-update -ssh-cmdline = ssh aur@aur.archlinux.org - -[update] -max-blob-size = 256000 - -[aurblup] -db-path = /srv/http/aurweb/aurblup/ -sync-dbs = core-testing extra-testing multilib-testing core extra multilib -server = https://mirrors.kernel.org/archlinux/%s/os/x86_64 - -[mkpkglists] -archivedir = /srv/http/aurweb/archives -packagesfile = /srv/http/aurweb/archives/packages.gz -packagesmetafile = /srv/http/aurweb/archives/packages-meta-v1.json.gz -packagesmetaextfile = /srv/http/aurweb/archives/packages-meta-ext-v1.json.gz -pkgbasefile = /srv/http/aurweb/archives/pkgbase.gz -userfile = /srv/http/aurweb/archives/users.gz - -[git-archive] -author = git_archive.py -author-email = no-reply@archlinux.org - -; One week worth of seconds (86400 * 7) -popularity-interval = 604800 - -metadata-repo = /srv/http/aurweb/metadata.git -users-repo = /srv/http/aurweb/users.git -pkgbases-repo = /srv/http/aurweb/pkgbases.git -pkgnames-repo = /srv/http/aurweb/pkgnames.git - -[devel] -; commit_url is a format string used to produce a link to a commit hash. -commit_url = https://gitlab.archlinux.org/archlinux/aurweb/-/commits/%s - -; If commit_hash is configured, a link to the commit based on commit_url -; will be displayed in aurweb's footer with the release version. -; This allows us to diagnose which commit a particular instance is on -; during testing of development branches. -; Example deployment configuration step: -; sed -r "s/^;?(commit_hash) =.*$/\1 = $(git rev-parse HEAD)/" config -;commit_hash = 1234567 - -[votereminder] -; Offsets used to determine when Package Maintainers should be reminded about -; votes that they should make. -; Reminders will be sent out for all votes that a Package Maintainer has not yet -; voted on based on `now + range_start <= End <= now + range_end`. -range_start = 500 -range_end = 172800 - -[cache] -; maximum number of keys/entries (for search results) in our redis cache, default is 50000 -max_search_entries = 50000 -; number of seconds after a cache entry for search queries expires, default is 10 minutes -expiry_time_search = 600 -; number of seconds after a cache entry for statistics queries expires, default is 5 minutes -expiry_time_statistics = 300 -; number of seconds after a cache entry for rss queries expires, default is 5 minutes -expiry_time_rss = 300 - -[tracing] -otlp_endpoint = http://localhost:4318/v1/traces diff --git a/conf/config.dev b/conf/config.dev deleted file mode 100644 index 716cafa2..00000000 --- a/conf/config.dev +++ /dev/null @@ -1,78 +0,0 @@ -; Configuration file for aurweb development. -; -; Options are implicitly inherited from conf/config.defaults, which lists all -; available options for productions, and their default values. This current file -; overrides only options useful for development, and introduces -; development-specific options too. - -[database] -; FastAPI options: mysql. -backend = mysql - -; If using sqlite, set name to the database file path. -name = aurweb - -; MySQL database information. User defaults to root for containerized -; testing with mysqldb. This should be set to a non-root user. -user = root -;password = aur -host = localhost -;port = 3306 -socket = /var/run/mysqld/mysqld.sock - -[options] -aurwebdir = YOUR_AUR_ROOT -aur_location = http://127.0.0.1:8080 -disable_http_login = 0 -enable-maintenance = 0 -localedir = YOUR_AUR_ROOT/web/locale -; In production, salt_rounds should be higher; suggested: 12. -salt_rounds = 4 -; See config.defaults comment about cache. -cache = none -; If cache = 'redis' this address is used to connect to Redis. -redis_address = redis://127.0.0.1 -aur_request_ml = aur-requests@localhost -traceback = 1 - -[notifications] -; For development/testing, use /usr/bin/sendmail -sendmail = YOUR_AUR_ROOT/util/sendmail -sender = notify@localhost -reply-to = noreply@localhost - -; Single sign-on; see doc/sso.txt. -[sso] -openid_configuration = http://127.0.0.1:8083/auth/realms/aurweb/.well-known/openid-configuration -client_id = aurweb -client_secret = - -[fastapi] -; Address uvicorn should bind when spawned in development mode by aurweb.spawn. -bind_address = 127.0.0.1:8082 - -; Passphrase FastAPI uses to sign client-side sessions. -session_secret = secret - -[devel] -;commit_hash = 1234567 - -[mkpkglists] -archivedir = /var/lib/aurweb/archives -packagesfile = /var/lib/aurweb/archives/packages.gz -packagesmetafile = /var/lib/aurweb/archives/packages-meta-v1.json.gz -packagesmetaextfile = /var/lib/aurweb/archives/packages-meta-ext-v1.json.gz -pkgbasefile = /var/lib/aurweb/archives/pkgbase.gz -userfile = /var/lib/aurweb/archives/users.gz - -[git-archive] -metadata-repo = metadata.git -users-repo = users.git -pkgbases-repo = pkgbases.git -pkgnames-repo = pkgnames.git - -[aurblup] -db-path = YOUR_AUR_ROOT/aurblup/ - -[tracing] -otlp_endpoint = http://tempo:4318/v1/traces diff --git a/conf/config.proto b/conf/config.proto new file mode 100644 index 00000000..2fbc27a3 --- /dev/null +++ b/conf/config.proto @@ -0,0 +1,54 @@ +[database] +dsn_prefix = mysql +host = localhost +socket = /var/run/mysqld/mysqld.sock +name = AUR +user = aur +password = aur + +[options] +username_min_len = 3 +username_max_len = 16 +passwd_min_len = 4 +default_lang = en +sql_debug = 0 +max_sessions_per_user = 8 +login_timeout = 7200 +persistent_cookie_timeout = 2592000 +max_filesize_uncompressed = 8388608 +disable_http_login = 1 +aur_location = https://aur.archlinux.org +git_clone_uri_anon = https://aur.archlinux.org/%s.git/ +git_clone_uri_priv = ssh+git://aur@aur.archlinux.org/%s.git/ +max_rpc_results = 5000 +aur_request_ml = aur-requests@archlinux.org +request_idle_time = 1209600 +auto_orphan_age = 15552000 +auto_delete_age = 86400 +pkgbuild_uri = https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=%s +log_uri = https://aur.archlinux.org/cgit/aur.git/log/?h=%s +snapshot_uri = /cgit/aur.git/snapshot/%s.tar.gz +enable-maintenance = 1 +maintenance-exceptions = 127.0.0.1 + +[fingerprints] +Ed25519 = SHA256:HQ03dn6EasJHNDlt51KpQpFkT3yBX83x7BoIkA1iv2k +ECDSA = SHA256:L71Q91yHwmHPYYkJMDgj0xmUuw16qFOhJbBr1mzsiOI +RSA = SHA256:Ju+yWiMb/2O+gKQ9RJCDqvRg7l+Q95KFAeqM5sr6l2s + +[auth] +valid-keytypes = ssh-rsa ssh-dss ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-ed25519 +username-regex = [a-zA-Z0-9]+[.\-_]?[a-zA-Z0-9]+$ +git-serve-cmd = /srv/http/aurweb/git-interface/git-serve.py +ssh-options = no-port-forwarding,no-X11-forwarding,no-pty + +[serve] +repo-path = /srv/http/aurweb/aur.git/ +repo-regex = [a-z0-9][a-z0-9.+_-]*$ +git-shell-cmd = /usr/bin/git-shell +ssh-cmdline = ssh aur@aur.archlinux.org + +[aurblup] +db-path = /srv/http/aurweb/aurblup/ +sync-dbs = core extra community multilib testing community-testing +servers = ftp://mirrors.kernel.org/archlinux/%s/os/x86_64 diff --git a/conf/fcgiwrap.service.proto b/conf/fcgiwrap.service.proto deleted file mode 100644 index c4e85448..00000000 --- a/conf/fcgiwrap.service.proto +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Simple CGI Server -After=nss-user-lookup.target - -[Service] -ExecStart=/usr/sbin/fcgiwrap -User=aur -Group=aur - -[Install] -Also=fcgiwrap.socket diff --git a/conf/fcgiwrap.socket.proto b/conf/fcgiwrap.socket.proto deleted file mode 100644 index a1bc8260..00000000 --- a/conf/fcgiwrap.socket.proto +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=fcgiwrap Socket - -[Socket] -ListenStream=/run/fcgiwrap.sock -SocketUser=http -SocketGroup=http -SocketMode=0700 - -[Install] -WantedBy=sockets.target diff --git a/doc/Makefile b/doc/Makefile deleted file mode 100644 index df54c5d8..00000000 --- a/doc/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -all: rpc.html - -clean: - rm -rf *.html - -%.html: %.txt - asciidoc $< - -.PHONY: all clean diff --git a/doc/docker.md b/doc/docker.md deleted file mode 100644 index c54184b8..00000000 --- a/doc/docker.md +++ /dev/null @@ -1,148 +0,0 @@ -Table of Contents ------------------ - - - - - - - - - -
Getting StartedProfilesServices
- -**Note:** The `docker-compose` infrastructure is experimental and -in need of improvements. - -Getting Started ---------------- - -Install required dependencies: - - # pacman -Syu docker-compose - -See [Profiles](#profiles) for details about using the different profiles -setup for aurweb. The following examples use the [default](#default) profile. - -Begin by building `aurweb:latest` off the current revision: - - $ docker-compose build - -You can run tests: - - $ docker-compose run test - -Or, start the development server: - - $ docker-compose up -d nginx - -See [nginx](#nginx) for details on connecting to the local instance. - -Profiles --------- - -| Name | Options | -|---------|----------------------| -| default | `docker-compose ...` | -| aur-dev | `docker-compose -f docker-compose.yml -f docker-compose.aur-dev.yml ...` | - -#### default - -Default development profile intended to be used on local systems. - -#### aur-dev - -Production profile used for deployments to -[aur-dev.archlinux.org](https://aur-dev.archlinux.org). - -Services --------- - -| Service | Host Binding | -|---------------------|-----------------| -| [ca](#ca) | | -| [cron](#cron) | | -| [mariadb](#mariadb) | 127.0.0.1:13306 | -| [git](#git) | 127.0.0.1:2222 | -| redis | 127.0.0.1:16379 | -| [fastapi](#fastapi) | 127.0.0.1:18000 | -| cgit-fastapi | | -| [nginx](#nginx) (fastapi) | 127.0.0.1:8444 | - -There are more services which have not been referred to here; -the services listed above encompass all notable services. Some -services have their own section, defined below, which lie down -specifics. - -#### ca - -The _ca_ service provides a certificate authority driven by `step-ca`. -When no certificates can be found, the ca services self-signs a new -root ca certificate and a localhost certificate to be used by nginx. - -The generated root ca certificate, after generation, will be located -at `./data/root_ca.crt` and can be imported into ca_certificates -anchors or browsers for SSL verification. - -#### cron - -The _cron_ service includes all scripts recommended in `doc/maintenance.txt`. - -#### mariadb - -- When used with the [default](#default) profile, a Docker-driven - mariadb service is used. -- When used with the [aur-dev](#aur-dev) profile, `MARIADB_SOCKET_DIR` - (defaulted to `/var/run/mysqld/`) can be defined to bind-mount a - host-driven mariadb socket to the container. - -#### git - -The _git_ service provides an ssh interface to a repository configured -to be used for the AUR. - -- When used with the [default](#default) profile, a Docker-driven - volume is used to manage the repository. -- When used with the [aur-dev](#aur-dev) profile, `GIT_DATA_DIR` - should be set to a directory found on the host to be used for - a bind-mounted repository. - -This service will perform setup in either case if the repository -is not yet initialized. - -#### fastapi - -The _fastapi_ service hosts a `gunicorn`, `uvicorn` or `hypercorn` -asgi server. The backend and worker count can be configured using -the following variables: - -- `FASTAPI_BACKEND` - - Default: `uvicorn` - - Valid: `gunicorn`, `uvicorn`, `hypercorn` -- `FASTAPI_WORKERS` - - Default: 2 - -Additionally, when running any services which use the fastapi -backend or other fastapi-related services, users should define: - -- `AURWEB_FASTAPI_PREFIX` - - Default: `https://localhost:8444` -- `AURWEB_SSHD_PREFIX` - - Default: `ssh://aur@localhost:2222` - -#### nginx - -The _nginx_ service binds to host endpoint: 127.0.0.1:8444 (fastapi). -The instance is available over the `https` -protocol as noted in the table below. - -| Impl | Host Binding | URL | -|--------|----------------|------------------------| -| Python | 127.0.0.1:8444 | https://localhost:8444 | - -When running this service, the following variables should be defined: - -- `AURWEB_FASTAPI_PREFIX` - - Default: `https://localhost:8444` -- `AURWEB_SSHD_PREFIX` - - Default: `ssh://aur@localhost:2222` diff --git a/doc/git-archive.md b/doc/git-archive.md deleted file mode 100644 index d7c80f76..00000000 --- a/doc/git-archive.md +++ /dev/null @@ -1,75 +0,0 @@ -# aurweb Git Archive Specification - - - WARNING: This aurweb Git Archive implementation is - experimental and may be changed. - - -## Overview - -This git archive specification refers to the archive git repositories -created by [aurweb/scripts/git_archive.py](aurweb/scripts/git_archive.py) -using [spec modules](#spec-modules). - -## Configuration - -- `[git-archive]` - - `author` - - Git commit author - - `author-email` - - Git commit author email - -See an [official spec](#official-specs)'s documentation for spec-specific -configurations. - -## Fetch/Update Archives - -When a client has not yet fetched any initial archives, they should -shallow-clone the repository: - - $ git clone --depth=1 https://aur.archlinux.org/archive.git aurweb-archive - -When updating, the repository is already cloned and changes need to be pulled -from remote: - - # To update: - $ cd aurweb-archive && git pull - -For end-user production applications, see -[Minimize Disk Space](#minimize-disk-space). - -## Minimize Disk Space - -Using `git gc` on the repository will compress revisions and remove -unreachable objects which grow the repository a considerable amount -each commit. It is recommended that the following command is used -after cloning the archive or pulling updates: - - $ cd aurweb-archive && git gc --aggressive - -## Spec Modules - -Each aurweb spec module belongs to the `aurweb.archives.spec` package. For -example: a spec named "example" would be located at -`aurweb.archives.spec.example`. - -[Official spec listings](#official-specs) use the following format: - -- `spec_name` - - Spec description; what this spec produces - - `` - -### Official Specs - -- [metadata](doc/specs/metadata.md) - - Package RPC `type=info` metadata - - [metadata-repo](repos/metadata-repo.md) -- [users](doc/specs/users.md) - - List of users found in the database - - [users-repo](repos/users-repo.md) -- [pkgbases](doc/specs/pkgbases.md) - - List of package bases found in the database - - [pkgbases-repo](repos/pkgbases-repo.md) -- [pkgnames](doc/specs/pkgnames.md) - - List of package names found in the database - - [pkgnames-repo](repos/pkgnames-repo.md) diff --git a/doc/git-interface.txt b/doc/git-interface.txt deleted file mode 100644 index 39c2b487..00000000 --- a/doc/git-interface.txt +++ /dev/null @@ -1,130 +0,0 @@ -The aurweb Git and SSH interface -================================ - -Git storage ------------ - -Since release 4.0.0, aurweb uses Git repositories to store packages. Git -namespaces (see gitnamespaces(7)) are used to share the object database, such -that delta compression can be applied across package base boundaries. - -Internally, all packages are stored in a single Git repository. Special refs, -so-called namespaced branches, are used to refer to the commits corresponding -to the actual package bases. For convenience, we also create a branch for each -package repository that carries the name of the corresponding package base, -such that one can easily access the history of a given package base by running -`git log `. To the end-user, the individual namespaced branches are -presented as separate Git repositories. - -Authentication: git-auth ------------------------- - -Pushing to package repositories is possible via SSH. In order to access the SSH -interface, users first need to add an SSH public key to their account using the -web interface. Authentication is performed by the git-auth -AuthorizedKeysCommand script (see sshd_config(5) for details) which looks up -the public key in the AUR user table. Using this concept of "virtual users", -there is no need to create separate UNIX accounts for each registered AUR user. - -If the public key is found, the corresponding authorized_keys line is printed -to stdout. If the public key does not exist, the login is denied. The -authorized_keys line also contains a forced command such that authenticated -users cannot access anything on the server except for the aurweb SSH interface. -The forced command can be configured in the aurweb configuration file and it -usually points to the git-serve program. - -If SSH has been configured to pass on the AUR_OVERWRITE environment variable -(via SendEnv, see ssh_config(5) for details) and the user's account is a -registered Package Maintainer or Developer, this will be passed on to the git-update -program in order to enable a non-fast-forward push. - -The INSTALL file in the top-level directory contains detailed instructions on -how to configure sshd(8) to use git-auth for authentication. - -The Shell: git-serve --------------------- - -The git-serve command, the "aurweb shell", provides different subcommands: - -* The adopt/disown commands can be used to change ownership of a package base. -* The flag/unflag commands can be used to flag/unflag a package. -* The help command shows a list of available commands. -* The list-repos command lists all repositories of the authenticated user. -* The restore command can be used to restore a deleted package base. -* The set-comaintainers command modifies the co-maintainers of a package base. -* The set-keywords command modifies the keywords assigned to a package base. -* The vote/unvote command can be used to vote/unvote for a package base. -* The git-{receive,upload}-pack commands are redirected to git-shell(1). - -The command is extracted from the SSH_ORIGINAL_COMMAND environment variable -which is usually set by the SSH daemon. If no command is specified, git-serve -displays a message stating that aurweb does not provide an interactive shell. - -When invoking git-shell(1), the git-serve command also redirects all paths to -the shared Git repository and sets up the GIT_NAMESPACE environment variable -such that Git updates the correct namespaced branch. - -The Update Hook: git-update ---------------------------- - -The Git update hook, called git-update, performs several subtasks: - -* Prevent from creating branches or tags other than master. -* Deny non-fast-forwards, except for Package Maintainers and Developers. -* Deny blacklisted packages, except for Package Maintainers and Developers. -* Verify each new commit (validate meta data, impose file size limits, ...) -* Update package base information and package information in the database. -* Update the named branch and the namespaced HEAD ref of the package. - -It needs to be added to the shared Git repository, see INSTALL in the top-level -directory for further information. - -Accessing Git repositories via HTTP ------------------------------------ - -Git repositories can also be accessed via HTTP by configuring the web server to -forward specific requests to git-http-backend(1). Note that, since Git -namespaces are used internally, the web server needs to rewrite URIs and setup -the GIT_NAMESPACE environment variable accordingly before forwarding a request. - -An example configuration for nginx and fcgiwrap can be found in the INSTALL -instructions in the top-level directory. - -Further Configuration and Administration ----------------------------------------- - -When using Git namespaces, Git advertises refs outside the current namespace as -so-called "have" lines. This is normally used to reduce traffic but it has the -opposite effect in the case of aurweb: Most of the refs transferred to the -client during `git push` operations belong to branches of other package bases -and are essentially useless. - -In order to omit these advertisements, one can add the strings "^refs/", -"!refs/" and "!HEAD" to the transfer.hideRefs configuration setting. Note that -the order of these patterns is important ("^refs/" must come first) and that -Git 2.7 or newer is required for them to work. - -Since garbage collection always affects all objects (from all namespaces), it -is also recommended to disable automatic garbage collection by setting -receive.autogc to false. Remember to periodically run `git gc` manually or -setup a maintenance script which initiates the garbage collection if you follow -this advice. For gc.pruneExpire, we recommend "3.months.ago", such that commits -that became unreachable by Package Maintainer intervention are kept for a while. - -Script Wrappers (poetry) ------------------------- - -When aurweb is installed within a poetry virtualenv, commands need -to be prefixed with `poetry run`. A few wrapper scripts are provided -which automate this, as long as the executing user's `$HOME` is -aurweb's project root. - -- `examples/aurweb-git-auth.sh` -- `examples/aurweb-git-serve.sh` -- `examples/aurweb-git-update.sh` - -These scripts should be installed somewhere on the aurweb host. The -following options need to be updated to the installed wrappers: - -- `[auth] git-serve-cmd` -- `[serve] git-update-cmd` diff --git a/doc/maintenance.txt b/doc/maintenance.txt deleted file mode 100644 index 68766402..00000000 --- a/doc/maintenance.txt +++ /dev/null @@ -1,131 +0,0 @@ -aurweb Maintenance -================== - -Components ----------- - -aurweb has three user-facing components. - -The Git/SSH interface can be used to update package repositories and for basic -package maintenance from the command-line. More details can be found in -`doc/git-interface.txt`. - -The web interface can be used to browse packages, view package details, manage -aurweb accounts, add comments, vote for packages, flag packages, and submit -requests. Package Maintainers can update package maintainers and delete/merge -packages. The web interface also includes an area for Package Maintainers to post -AUR-related proposals and vote on them. - -The RPC interface can be used to query package information via HTTP. - -Installation ------------- - -The web backend requires a web server and an SQL database. The Git/SSH -interface requires Python, several Python modules and an up-to-date version of -Git. APCu or memcached can be used to reduce load on the database server. - -All dependencies and the full installation process are described in `INSTALL`. - -Updates -------- - -The `enable-maintenance` option (in the configuration file, usually located at -`/etc/aurweb/config`) can be used to switch aurweb into maintenance mode. This -disables both the Git/SSH interface and the web interface. The -`maintenance-exceptions` variable can be used to reactivate access for certain -IP addresses. Since changes to the database schema might temporarily break -parts of the backend, it is recommended to always enable maintenance mode -before performing an upgrade. - -To simplify the upgrade process, changes in the database schema (and other -changes that require manual interaction) are documented in `upgrading/`. An -exception are additions to the configuration file. It is recommended to always -compare `/etc/aurweb/config` to `conf/config.defaults` when upgrading to a new -release. - -Moreover, the aurweb Python modules and translations need to be reinstalled -with every upgrade. To this end, run `python3 setup.py install` from the aurweb -source tree and run `make install` in the `po/` subdirectory. - -Don't forget to always test all basic features first, then disable maintenance -mode after performing an upgrade. - -Maintenance Scripts -------------------- - -aurweb includes scheduled maintenance routines to perform expensive -computations and clean up the database: - -* aurweb-aurblup parses binary repositories and updates the `OfficialProviders` - table. This table is used to identify AUR packages that depend on packages in - the official repositories. It is also used to prevent users from uploading - packages that are in the official repositories already. - -* aurweb-votereminder sends out reminders if the voting period for a - Package Maintainer proposal ends soon. - -* aurweb-popupdate is used to recompute the popularity score of packages. - -* aurweb-pkgmaint automatically removes empty repositories that were created - within the last 24 hours but never populated. - -* [Deprecated] aurweb-mkpkglists generates the package list files; it takes - an optional --extended flag, which additionally produces multiinfo metadata. - It also generates {archive.gz}.sha256 files that should be located within - mkpkglists.archivedir which contain a SHA-256 hash of their matching - .gz counterpart. - -* aurweb-usermaint removes the last login IP address of all users that did not - login within the past seven days. - -* aurweb-git-archive generates Git repository archives based on a --spec. - This script is a new generation of aurweb-mkpkglists, which creates and - maintains Git repository versions of the archives produced by - aurweb-mkpkglists. See doc/git-archive.md for detailed documentation. - -These scripts can be installed by running `poetry install` and are -usually scheduled using Cron. The current setup is: - ----- -# Run aurweb-git-archive --spec metadata directly after -# aurweb-mkpkglists so that they are executed sequentially, since -# both scripts are quite heavy. `aurweb-mkpkglists` should be removed -# from here once its deprecation period has ended. -*/5 * * * * poetry run aurweb-mkpkglists [--extended] && poetry run aurweb-git-archive --spec metadata - -# Usernames -*/5 * * * * poetry run aurweb-git-archive --spec users - -# Package base names -*/5 * * * * poetry run aurweb-git-archive --spec pkgbases - -# Package names -*/5 * * * * poetry run aurweb-git-archive --spec pkgnames - -1 */2 * * * poetry run aurweb-popupdate -2 */2 * * * poetry run aurweb-aurblup -3 */2 * * * poetry run aurweb-pkgmaint -4 */2 * * * poetry run aurweb-usermaint -5 */12 * * * poetry run aurweb-votereminder ----- - -Advanced Administrative Features --------------------------------- - -Package Maintainers can set the AUR_OVERWRITE environment variable to enable -non-fast-forward pushes to the Git repositories. This feature is documented in -`doc/git-interface.txt`. - -Rate limiting is used to prevent users from hammering the RPC interface. The -`request_limit` and `window_length` options in the `ratelimit` section of the -configuration file can be used to configure this feature. Recent accesses are -stored in the `ApiRateLimit` table in the database. See commit 27654af (Add -rate limit support to API, 2018-02-01) for details. - -The database contains a `PackageBlacklist` table. Package names added to this -table will be rejected by the SSH/Git interface. This table can only be edited -by a database administrator. - -The `Bans` table can be used to ban certain IP addresses from both the web and -Git/SSH interface. This table can only be accessed by a database administrator. diff --git a/doc/repos/metadata-repo.md b/doc/repos/metadata-repo.md deleted file mode 100644 index cc678f40..00000000 --- a/doc/repos/metadata-repo.md +++ /dev/null @@ -1,121 +0,0 @@ -# Repository: metadata-repo - -## Overview - -The resulting repository contains RPC `type=info` JSON data for packages, -split into two different files: - -- `pkgbase.json` contains details about each package base in the AUR -- `pkgname.json` contains details about each package in the AUR - -See [Data](#data) for a breakdown of how data is presented in this -repository based off of a RPC `type=info` base. - -See [File Layout](#file-layout) for a detailed summary of the layout -of these files and the data contained within. - -**NOTE: `Popularity` now requires a client-side calculation, see [Popularity Calculation](#popularity-calculation).** - -## Data - -This repository contains RPC `type=info` data for all packages found -in AUR's database, reorganized to be suitable for Git repository -changes. - -- `pkgname.json` holds Package-specific metadata - - Some fields have been removed from `pkgname.json` objects - - `ID` - - `PackageBaseID -> ID` (moved to `pkgbase.json`) - - `NumVotes` (moved to `pkgbase.json`) - - `Popularity` (moved to `pkgbase.json`) -- `pkgbase.json` holds PackageBase-specific metadata - - Package Base fields from `pkgname.json` have been moved over to - `pkgbase.json` - - `ID` - - `Keywords` - - `FirstSubmitted` - - `LastModified` - - `OutOfDate` - - `Maintainer` - - `URLPath` - - `NumVotes` - - `Popularity` - - `PopularityUpdated` - -## Popularity Calculation - -Clients intending to use popularity data from this archive **must** -perform a decay calculation on their end to reflect a close approximation -of up-to-date popularity. - -Putting this step onto the client allows the server to maintain -less popularity record updates, dramatically improving archiving -of popularity data. The same calculation is done on the server-side -when producing outputs for RPC `type=info` and package pages. - -``` -Let T = Current UTC timestamp in seconds -Let PU = PopularityUpdated timestamp in seconds - -# The delta between now and PU in days -Let D = (T - PU) / 86400 - -# Calculate up-to-date popularity: -P = Popularity * (0.98^D) -``` - -We can see that the resulting up-to-date popularity value decays as -the exponent is increased: -- `1.0 * (0.98^1) = 0.98` -- `1.0 * (0.98^2) = 0.96039999` -- ... - -This decay calculation is essentially pushing back the date found for -votes by the exponent, which takes into account the time-factor. However, -since this calculation is based off of decimals and exponents, it -eventually becomes imprecise. The AUR updates these records on a forced -interval and whenever a vote is added to or removed from a particular package -to avoid imprecision from being an issue for clients - -## File Layout - -#### pkgbase.json: - - { - "pkgbase1": { - "FirstSubmitted": 123456, - "ID": 1, - "LastModified": 123456, - "Maintainer": "kevr", - "OutOfDate": null, - "URLPath": "/cgit/aur.git/snapshot/pkgbase1.tar.gz", - "NumVotes": 1, - "Popularity": 1.0, - "PopularityUpdated": 12345567753.0 - }, - ... - } - -#### pkgname.json: - - { - "pkg1": { - "CheckDepends": [], # Only included if a check dependency exists - "Conflicts": [], # Only included if a conflict exists - "Depends": [], # Only included if a dependency exists - "Description": "some description", - "Groups": [], # Only included if a group exists - "ID": 1, - "Keywords": [], - "License": [], - "MakeDepends": [], # Only included if a make dependency exists - "Name": "pkg1", - "OptDepends": [], # Only included if an opt dependency exists - "PackageBase": "pkgbase1", - "Provides": [], # Only included if `provides` is defined - "Replaces": [], # Only included if `replaces` is defined - "URL": "https://some_url.com", - "Version": "1.0-1" - }, - ... - } diff --git a/doc/repos/pkgbases-repo.md b/doc/repos/pkgbases-repo.md deleted file mode 100644 index f4cb896f..00000000 --- a/doc/repos/pkgbases-repo.md +++ /dev/null @@ -1,15 +0,0 @@ -# Repository: pkgbases-repo - -## Overview - -- `pkgbase.json` contains a list of package base names - -## File Layout - -### pkgbase.json: - - [ - "pkgbase1", - "pkgbase2", - ... - ] diff --git a/doc/repos/pkgnames-repo.md b/doc/repos/pkgnames-repo.md deleted file mode 100644 index ae6fb4ed..00000000 --- a/doc/repos/pkgnames-repo.md +++ /dev/null @@ -1,15 +0,0 @@ -# Repository: pkgnames-repo - -## Overview - -- `pkgname.json` contains a list of package names - -## File Layout - -### pkgname.json: - - [ - "pkgname1", - "pkgname2", - ... - ] diff --git a/doc/repos/users-repo.md b/doc/repos/users-repo.md deleted file mode 100644 index 23db9cfb..00000000 --- a/doc/repos/users-repo.md +++ /dev/null @@ -1,15 +0,0 @@ -# Repository: users-repo - -## Overview - -- `users.json` contains a list of usernames - -## File Layout - -### users.json: - - [ - "user1", - "user2", - ... - ] diff --git a/doc/rpc.txt b/doc/rpc.txt deleted file mode 100644 index b5219399..00000000 --- a/doc/rpc.txt +++ /dev/null @@ -1,67 +0,0 @@ -aurweb RPC Interface -==================== - -Package Search --------------- - -Package searches can be performed by issuing HTTP GET requests of the form -+/rpc?v=5&type=search&by=_field_&arg=_keywords_+ where _keywords_ is the -search argument and _field_ is one of the following values: - -* `name` (search by package name only) -* `name-desc` (search by package name and description) -* `maintainer` (search by package maintainer) -* `depends` (search for packages that depend on _keywords_) -* `makedepends` (search for packages that makedepend on _keywords_) -* `optdepends` (search for packages that optdepend on _keywords_) -* `checkdepends` (search for packages that checkdepend on _keywords_) - -The _by_ parameter can be skipped and defaults to `name-desc`. - -If a maintainer search is performed and the search argument is left empty, a -list of orphan packages is returned. - -Package Details ---------------- - -Package information can be obtained by issuing HTTP GET requests of the form -+/rpc?v=5&type=info&arg[]=_pkg1_&arg[]=_pkg2_&...+ where _pkg1_, _pkg2_, ... -are the names of packages to retrieve package details for. - -Request Methods ---------------- - -Historically, the `type=multiinfo` `v=5` GET request has supported a -particular ordering of arguments. The POST request argument ordering -cannot be guaranteed, and so its behavior is different. Differences are -described below: - -`GET`:: - `type=multiinfo` arguments are parsed by iterating the query string - from last to first key, looking for an `arg` or `arg[]`. Once one is - found, behavior diverges depending on which is found first: the `arg` - parameter is used as the sole argument or the `arg[]` parameters are - built into a list until a non-argument key is encountered. -`POST (experimental)`:: - All provided instances of `arg` and `arg[]` given to `type=multiinfo` - are supported in unison: - - curl -d 'v=5' -d 'type=info' -d 'arg=one' -d 'arg[]=two' -d 'arg[]=three' ... - -All other valid query types are supported without change. - -Examples --------- - -`search`:: - `/rpc?v=5&type=search&arg=foobar` -`search` by maintainer:: - `/rpc?v=5&type=search&by=maintainer&arg=john` -`search` packages that have _boost_ as `makedepends`:: - `/rpc?v=5&type=search&by=makedepends&arg=boost` -`search` with callback:: - `/rpc?v=5&type=search&arg=foobar&callback=jsonp1192244621103` -`info`:: - `/rpc?v=5&type=info&arg[]=foobar` -`info` with multiple packages:: - `/rpc?v=5&type=info&arg[]=foo&arg[]=bar` diff --git a/doc/specs/metadata.md b/doc/specs/metadata.md deleted file mode 100644 index 282c0dd5..00000000 --- a/doc/specs/metadata.md +++ /dev/null @@ -1,14 +0,0 @@ -# Git Archive Spec: metadata - -## Configuration - -- `[git-archive]` - - `metadata-repo` - - Path to package metadata git repository location - -## Repositories - -For documentation on each one of these repositories, follow their link, -which brings you to a topical markdown for that repository. - -- [metadata-repo](doc/repos/metadata-repo.md) diff --git a/doc/specs/pkgbases.md b/doc/specs/pkgbases.md deleted file mode 100644 index 80279070..00000000 --- a/doc/specs/pkgbases.md +++ /dev/null @@ -1,14 +0,0 @@ -# Git Archive Spec: pkgbases - -## Configuration - -- `[git-archive]` - - `pkgbases-repo` - - Path to pkgbases git repository location - -## Repositories - -For documentation on each one of these repositories, follow their link, -which brings you to a topical markdown for that repository. - -- [pkgbases-repo](doc/repos/pkgbases-repo.md) diff --git a/doc/specs/pkgnames.md b/doc/specs/pkgnames.md deleted file mode 100644 index 0a4a907d..00000000 --- a/doc/specs/pkgnames.md +++ /dev/null @@ -1,14 +0,0 @@ -# Git Archive Spec: pkgnames - -## Configuration - -- `[git-archive]` - - `pkgnames-repo` - - Path to pkgnames git repository location - -## Repositories - -For documentation on each one of these repositories, follow their link, -which brings you to a topical markdown for that repository. - -- [pkgnames-repo](doc/repos/pkgnames-repo.md) diff --git a/doc/specs/popularity.md b/doc/specs/popularity.md deleted file mode 100644 index 3084f458..00000000 --- a/doc/specs/popularity.md +++ /dev/null @@ -1,14 +0,0 @@ -# Git Archive Spec: popularity - -## Configuration - -- `[git-archive]` - - `popularity-repo` - - Path to popularity git repository location - -## Repositories - -For documentation on each one of these repositories, follow their link, -which brings you to a topical markdown for that repository. - -- [popularity-repo](doc/repos/popularity-repo.md) diff --git a/doc/specs/users.md b/doc/specs/users.md deleted file mode 100644 index 25396154..00000000 --- a/doc/specs/users.md +++ /dev/null @@ -1,14 +0,0 @@ -# Git Archive Spec: users - -## Configuration - -- `[git-archive]` - - `users-repo` - - Path to users git repository location - -## Repositories - -For documentation on each one of these repositories, follow their link, -which brings you to a topical markdown for that repository. - -- [users-repo](doc/repos/users-repo.md) diff --git a/doc/sso.txt b/doc/sso.txt deleted file mode 100644 index 481166cf..00000000 --- a/doc/sso.txt +++ /dev/null @@ -1,38 +0,0 @@ -Single Sign-On (SSO) -==================== - -This guide will walk you through setting up Keycloak for use with aurweb. For -extensive documentation, see . - -Installing Keycloak -------------------- - -Keycloak is in the official Arch repositories: - - # pacman -S keycloak - -The default port is 8080, which conflicts with aurweb’s default port. You need -to edit `/etc/keycloak/standalone.xml`, looking for this line: - - - -The default developer configuration assumes it is set to 8083. Alternatively, -you may customize [options] aur_location and [sso] openid_configuration in -`conf/config`. - -You may then start `keycloak.service` through systemd. - -See also ArchWiki . - -Configuring a realm -------------------- - -Go to and log in as administrator. Then, hover the -text right below the Keycloak logo at the top left, by default *Master*. Click -*Add realm* and name it *aurweb*. - -Open the *Clients* tab, and create a new *openid-connect* client. Call it -*aurweb*, and set the root URL to (your aur_location). - -Create a user from the *Users* tab and try logging in from -. diff --git a/doc/web-auth.md b/doc/web-auth.md deleted file mode 100644 index c8604fed..00000000 --- a/doc/web-auth.md +++ /dev/null @@ -1,104 +0,0 @@ -# aurweb Web Authentication - -aurweb uses an HTTP cookie to persist user sessions across requests. -This cookie **must** be delivered with a request in order to be considered -an authenticated user. - -See [HTTP Cookie](#http-cookie) for detailed information about the cookie. - -## HTTP Cookie - -aurweb utilizes an HTTP cookie by the name of `AURSID` to track -user authentication across requests. - -This cookie's requirements changes due to aurweb's configuration -in the following ways: - -- `options.disable_http_login: 0` - - [Samesite=LAX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#samesite_attribute), Max-Age -- `options.disable_http_login: 1` - - [Samesite=LAX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#samesite_attribute), [Secure, HttpOnly](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#restrict_access_to_cookies), Max-Age - -### Max-Age - -The value used for the `AURSID` Max-Age attribute is decided based -off of the "Remember Me" checkbox on the login page. If it was not -checked, we don't set Max-Age and it becomes a session cookie. -Otherwise we make it a persistent cookie and for the expiry date -we use `options.persistent_cookie_timeout`. -It indicates the number of seconds the session should live. - -### Notes - -At all times, aur.archlinux.org operates over HTTPS. Secure cookies will -only remain intact when subsequently requesting an aurweb route through -the HTTPS scheme at the same host as the cookie was obtained. - -## Login Process - -When a user logs in to aurweb, the following steps are taken: - -1. Was a Referer header delivered from an address starting with -`{aurweb_url}/login`? - 1. No, an HTTP 400 Bad Request response is returned - 2. Yes, move on to 2 -2. Does a Users database record exist for the given username/email? - 1. No, you are returned to the login page with `Bad username or password.` - error - 2. Yes, move on to 3 -3. Is the user suspended? - 1. Yes, you are returned to the login page with `Account Suspended` error - 2. No, move on to 4 -4. Can the user login with the given password? - 1. No, you are returned to the login page with `Bad username or password.` - error - 2. Yes, move on to 5 -5. Update the user's `LastLogin` and `LastLoginIPAddress` columns -6. Does the user have a related Sessions record? - 1. No, generate a new Sessions record with a new unique `SessionID` - 2. Yes, update the Sessions record's `SessionID` column with a new unique - string and update the Sessions record's `LastUpdateTS` column if it has - expired - 3. In both cases, set the user's `InactivityTS` column to `0` - 4. In both cases, return the new `SessionID` column value and move on to 7 -7. Return a redirect to the `next` GET variable with the -following cookies set: - 1. `AURSID` - - Unique session string matching the user's related - `Sessions.SessionID` column - 2. `AURTZ` - - User's timezone setting - 3. `AURLANG` - - User's language setting - 4. `AURREMEMBER` - - Boolean state of the "Remember Me" checkbox when login submitted - -## Auth Verification - -When a request is made toward aurweb, a middleware is responsible for -verifying the user's auth cookie. If no valid `AURSID` cookie could be -found for a user in the database, the request is considered unauthenticated. - -The following list of steps describes exactly how this verification works: -1. Was the `AURSID` cookie delivered? - 1. No, the algorithm ends, you are considered unauthenticated - 2. Yes, move on to 2 -2. Was the `AURREMEMBER` cookie delivered with a value of `True`? - 1. No, set the expected session timeout **T** to `options.login_timeout` - 2. Yes, set the expected session timeout **T** to - `options.persistent_cookie_timeout` -3. Does a Sessions database record exist which matches the `AURSID`? - 1. No, the algorithm ends, you are considered unauthenticated - 2. Yes, move on to 4 -4. Does the Sessions record's LastUpdateTS column fit within `utcnow - T`? - 1. No, the Sessions record at hand is deleted, the algorithm ends, you - are considered unauthenticated - 2. Yes, move on to 5 -5. You are considered authenticated - -## aur.archlinux.org Auth-Related Configuration - -- Operates over HTTPS with a Let's Encrypt SSL certificate -- `options.disable_http_login: 1` -- `options.login_timeout: ` -- `options.persistent_cookie_timeout: ` diff --git a/docker-compose.aur-dev.yml b/docker-compose.aur-dev.yml deleted file mode 100644 index 265ba6db..00000000 --- a/docker-compose.aur-dev.yml +++ /dev/null @@ -1,67 +0,0 @@ ---- -services: - ca: - volumes: - - data:/data - - step:/root/.step - - redis: - restart: always - - mariadb: - restart: always - - git: - restart: always - environment: - - AUR_CONFIG=/aurweb/conf/config - # SSH_CMDLINE should be updated to production's ssh cmdline. - - SSH_CMDLINE=${SSH_CMDLINE:-ssh ssh://aur@localhost:2222} - volumes: - - ${GIT_DATA_DIR}:/aurweb/aur.git - - data:/aurweb/data - - smartgit: - restart: always - volumes: - - ${GIT_DATA_DIR}:/aurweb/aur.git - - data:/data - - smartgit_run:/var/run/smartgit - - cgit-fastapi: - restart: always - volumes: - - ${GIT_DATA_DIR}:/aurweb/aur.git - - cron: - volumes: - # Exclude ./aurweb:/aurweb in production. - - mariadb_run:/var/run/mysqld - - archives:/var/lib/aurweb/archives - - fastapi: - restart: always - environment: - - COMMIT_HASH=$COMMIT_HASH - - FASTAPI_BACKEND="gunicorn" - - FASTAPI_WORKERS=${FASTAPI_WORKERS} - - AURWEB_FASTAPI_PREFIX=${AURWEB_FASTAPI_PREFIX} - - AURWEB_SSHD_PREFIX=${AURWEB_SSHD_PREFIX} - - PROMETHEUS_MULTIPROC_DIR=/tmp_prometheus - volumes: - - data:/data - - nginx: - restart: always - volumes: - - data:/data - - archives:/var/lib/aurweb/archives - - smartgit_run:/var/run/smartgit - -volumes: - mariadb_run: {} # Share /var/run/mysqld - mariadb_data: {} # Share /var/lib/mysql - git_data: {} # Share aurweb/aur.git - smartgit_run: {} - data: {} - logs: {} diff --git a/docker-compose.override.yml b/docker-compose.override.yml deleted file mode 100644 index b0961521..00000000 --- a/docker-compose.override.yml +++ /dev/null @@ -1,31 +0,0 @@ ---- -services: - ca: - volumes: - - ./data:/data - - step:/root/.step - - git: - volumes: - - git_data:/aurweb/aur.git - - ./data:/aurweb/data - - smartgit: - volumes: - - git_data:/aurweb/aur.git - - ./data:/data - - smartgit_run:/var/run/smartgit - - fastapi: - volumes: - - ./data:/data - - ./aurweb:/aurweb/aurweb - - ./migrations:/aurweb/migrations - - ./test:/aurweb/test - - ./templates:/aurweb/templates - - nginx: - volumes: - - ./data:/data - - archives:/var/lib/aurweb/archives - - smartgit_run:/var/run/smartgit diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index ad578523..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,353 +0,0 @@ ---- -# -# Docker service definitions for the aurweb project. -# -# Notable services: -# - `sharness` - Run sharness test suites -# - `pytest-mysql` - Run pytest suites with MariaDB -# - `pytest-sqlite` - Run pytest suites with SQLite -# - `test` - Run sharness, pytest-mysql and pytest-sqlite -# - `mariadb` - `port 13306` - MariaDB server for docker -# - `ca` - Certificate Authority generation -# - `git` - `port 2222` - Git over SSH server -# - `fastapi` - hypercorn service for aurweb's FastAPI app -# - `nginx` - `port 8444 (FastAPI) -# - You can reach `nginx` via FastAPI at `https://localhost:8444/`. -# CGit can be reached via the `/cgit/` request uri on either server. -# -# Copyright (C) 2021 aurweb Development -# All Rights Reserved. -services: - aurweb-image: - build: . - image: aurweb:latest - - ca: - image: aurweb:latest - init: true - entrypoint: /docker/ca-entrypoint.sh - command: /docker/scripts/run-ca.sh - healthcheck: - test: "bash /docker/health/ca.sh" - interval: 3s - volumes: - - step:/root/.step - - redis: - image: aurweb:latest - init: true - entrypoint: /docker/redis-entrypoint.sh - command: /docker/scripts/run-redis.sh - healthcheck: - test: "bash /docker/health/redis.sh" - interval: 3s - ports: - - "127.0.0.1:16379:6379" - - mariadb: - image: aurweb:latest - init: true - entrypoint: /docker/mariadb-entrypoint.sh - command: /usr/bin/mariadbd-safe --datadir=/var/lib/mysql - ports: - # This will expose mariadbd on 127.0.0.1:13306 in the host. - # Ex: `mysql -uaur -paur -h 127.0.0.1 -P 13306 aurweb` - - "127.0.0.1:13306:3306" - volumes: - - mariadb_run:/var/run/mysqld # Bind socket in this volume. - - mariadb_data:/var/lib/mysql - healthcheck: - test: "bash /docker/health/mariadb.sh" - interval: 3s - - mariadb_init: - image: aurweb:latest - init: true - environment: - - AUR_CONFIG_IMMUTABLE=${AUR_CONFIG_IMMUTABLE:-0} - entrypoint: /docker/mariadb-init-entrypoint.sh - command: echo "MariaDB tables initialized." - volumes: - - mariadb_run:/var/run/mysqld - depends_on: - mariadb: - condition: service_healthy - - mariadb_test: - # Test database. - image: aurweb:latest - init: true - environment: - - MARIADB_PRIVILEGED=1 - entrypoint: /docker/mariadb-entrypoint.sh - command: /usr/bin/mariadbd-safe --datadir=/var/lib/mysql - ports: - # This will expose mariadbd on 127.0.0.1:13307 in the host. - # Ex: `mysql -uaur -paur -h 127.0.0.1 -P 13306 aurweb` - - "127.0.0.1:13307:3306" - volumes: - - mariadb_test_run:/var/run/mysqld # Bind socket in this volume. - healthcheck: - test: "bash /docker/health/mariadb.sh" - interval: 3s - - git: - image: aurweb:latest - init: true - environment: - - AUR_CONFIG=/aurweb/conf/config - - SSH_CMDLINE=${SSH_CMDLINE:-ssh ssh://aur@localhost:2222} - - AUR_CONFIG_IMMUTABLE=${AUR_CONFIG_IMMUTABLE:-0} - entrypoint: /docker/git-entrypoint.sh - command: /docker/scripts/run-sshd.sh - ports: - - "2222:2222" - healthcheck: - test: "bash /docker/health/sshd.sh" - interval: 3s - depends_on: - mariadb: - condition: service_healthy - mariadb_init: - condition: service_completed_successfully - volumes: - - mariadb_run:/var/run/mysqld - - smartgit: - image: aurweb:latest - init: true - environment: - - AUR_CONFIG=/aurweb/conf/config - entrypoint: /docker/smartgit-entrypoint.sh - command: /docker/scripts/run-smartgit.sh - healthcheck: - test: "bash /docker/health/smartgit.sh" - interval: 3s - depends_on: - mariadb: - condition: service_healthy - - cgit-fastapi: - image: aurweb:latest - init: true - environment: - - AUR_CONFIG=/aurweb/conf/config - - CGIT_CLONE_PREFIX=${AURWEB_FASTAPI_PREFIX} - - CGIT_CSS=/static/css/cgit.css - entrypoint: /docker/cgit-entrypoint.sh - command: /docker/scripts/run-cgit.sh 3000 - healthcheck: - test: "bash /docker/health/cgit.sh 3000" - interval: 3s - depends_on: - git: - condition: service_healthy - ports: - - "127.0.0.1:13001:3000" - volumes: - - git_data:/aurweb/aur.git - - cron: - image: aurweb:latest - init: true - environment: - - AUR_CONFIG=/aurweb/conf/config - - AUR_CONFIG_IMMUTABLE=${AUR_CONFIG_IMMUTABLE:-0} - entrypoint: /docker/cron-entrypoint.sh - command: /docker/scripts/run-cron.sh - depends_on: - mariadb: - condition: service_healthy - mariadb_init: - condition: service_completed_successfully - volumes: - - ./aurweb:/aurweb/aurweb - - mariadb_run:/var/run/mysqld - - archives:/var/lib/aurweb/archives - - fastapi: - image: aurweb:latest - init: true - environment: - - AUR_CONFIG=conf/config - - FASTAPI_BACKEND=${FASTAPI_BACKEND} - - FASTAPI_WORKERS=${FASTAPI_WORKERS} - - AURWEB_FASTAPI_PREFIX=${AURWEB_FASTAPI_PREFIX} - - AURWEB_SSHD_PREFIX=${AURWEB_SSHD_PREFIX} - - PROMETHEUS_MULTIPROC_DIR=/tmp_prometheus - - AUR_CONFIG_IMMUTABLE=${AUR_CONFIG_IMMUTABLE:-0} - entrypoint: /docker/fastapi-entrypoint.sh - command: /docker/scripts/run-fastapi.sh "${FASTAPI_BACKEND}" - healthcheck: - test: "bash /docker/health/fastapi.sh ${FASTAPI_BACKEND}" - interval: 3s - depends_on: - git: - condition: service_healthy - redis: - condition: service_healthy - cron: - condition: service_started - mariadb: - condition: service_healthy - mariadb_init: - condition: service_completed_successfully - tempo: - condition: service_healthy - volumes: - - archives:/var/lib/aurweb/archives - - mariadb_run:/var/run/mysqld - ports: - - "127.0.0.1:18000:8000" - - nginx: - image: aurweb:latest - init: true - environment: - - AUR_CONFIG=conf/config - entrypoint: /docker/nginx-entrypoint.sh - command: /docker/scripts/run-nginx.sh - ports: - - "127.0.0.1:8444:8444" # FastAPI - healthcheck: - test: "bash /docker/health/nginx.sh" - interval: 3s - depends_on: - ca: - condition: service_healthy - cgit-fastapi: - condition: service_healthy - smartgit: - condition: service_healthy - fastapi: - condition: service_healthy - - sharness: - image: aurweb:latest - profiles: ["dev"] - init: true - environment: - - AUR_CONFIG=conf/config.sqlite - - LOG_CONFIG=logging.test.conf - entrypoint: /docker/sharness-entrypoint.sh - command: /docker/scripts/run-sharness.sh - stdin_open: true - tty: true - depends_on: - mariadb_test: - condition: service_healthy - volumes: - - ./data:/data - - ./aurweb:/aurweb/aurweb - - ./migrations:/aurweb/migrations - - ./test:/aurweb/test - - ./templates:/aurweb/templates - - pytest-mysql: - image: aurweb:latest - profiles: ["dev"] - init: true - environment: - - AUR_CONFIG=conf/config - - TEST_RECURSION_LIMIT=${TEST_RECURSION_LIMIT} - - PROMETHEUS_MULTIPROC_DIR=/tmp_prometheus - - LOG_CONFIG=logging.test.conf - entrypoint: /docker/test-mysql-entrypoint.sh - command: /docker/scripts/run-pytests.sh clean - stdin_open: true - tty: true - depends_on: - mariadb_test: - condition: service_healthy - tmpfs: - - /tmp - volumes: - - mariadb_test_run:/var/run/mysqld - - ./data:/data - - ./aurweb:/aurweb/aurweb - - ./migrations:/aurweb/migrations - - ./test:/aurweb/test - - ./templates:/aurweb/templates - - test: - image: aurweb:latest - profiles: ["dev"] - init: true - environment: - - AUR_CONFIG=conf/config - - TEST_RECURSION_LIMIT=${TEST_RECURSION_LIMIT} - - PROMETHEUS_MULTIPROC_DIR=/tmp_prometheus - - LOG_CONFIG=logging.test.conf - entrypoint: /docker/test-mysql-entrypoint.sh - command: /docker/scripts/run-tests.sh - stdin_open: true - tty: true - depends_on: - mariadb_test: - condition: service_healthy - volumes: - - mariadb_test_run:/var/run/mysqld - - ./data:/data - - ./aurweb:/aurweb/aurweb - - ./migrations:/aurweb/migrations - - ./test:/aurweb/test - - ./templates:/aurweb/templates - - grafana: - # TODO: check if we need init: true - image: grafana/grafana:11.1.3 - environment: - - GF_AUTH_ANONYMOUS_ENABLED=true - - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin - - GF_AUTH_DISABLE_LOGIN_FORM=true - - GF_LOG_LEVEL=warn - # check if depends ar ecorrect, does stopping or restarting a child exit grafana? - depends_on: - prometheus: - condition: service_healthy - tempo: - condition: service_healthy - ports: - - "127.0.0.1:3000:3000" - volumes: - - ./docker/config/grafana/datasources:/etc/grafana/provisioning/datasources - - prometheus: - image: prom/prometheus:latest - command: - - --config.file=/etc/prometheus/prometheus.yml - - --web.enable-remote-write-receiver - - --web.listen-address=prometheus:9090 - healthcheck: - # TODO: check if there is a status route - test: "sh /docker/health/prometheus.sh" - interval: 3s - ports: - - "127.0.0.1:9090:9090" - volumes: - - ./docker/config/prometheus.yml:/etc/prometheus/prometheus.yml - - ./docker/health/prometheus.sh:/docker/health/prometheus.sh - - tempo: - image: grafana/tempo:2.5.0 - command: - - -config.file=/etc/tempo/config.yml - healthcheck: - # TODO: check if there is a status route - test: "sh /docker/health/tempo.sh" - interval: 3s - ports: - - "127.0.0.1:3200:3200" - - "127.0.0.1:4318:4318" - volumes: - - ./docker/config/tempo.yml:/etc/tempo/config.yml - - ./docker/health/tempo.sh:/docker/health/tempo.sh - -volumes: - mariadb_test_run: {} - mariadb_run: {} # Share /var/run/mysqld/mysqld.sock - mariadb_data: {} # Share /var/lib/mysql - git_data: {} # Share aurweb/aur.git - smartgit_run: {} - archives: {} - step: {} diff --git a/docker/README.md b/docker/README.md deleted file mode 100644 index e473582b..00000000 --- a/docker/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# Aurweb and Docker - -The `INSTALL` document details a manual Aurweb setup, but Docker images are also -provided here to avoid the complications of database configuration (and so -forth). - -### Setup - -Naturally, both `docker` and `docker-compose` must be installed, and your Docker -service must be started: - -```sh -systemctl start docker.service -``` - -The main image - `aurweb` - must be built manually: - -```sh -docker compose build -``` - -### Starting and Stopping the Services - -With the above steps complete, you can bring up an initial cluster: - -```sh -docker compose up -``` - -Subsequent runs will be done with `start` instead of `up`. The cluster can be -stopped with `docker compose stop`. - -### Testing - -With a running cluster, execute the following in a new terminal: - -```sh -docker compose run test -``` - -### Generating Dummy Data - -Before you can make meaningful queries to the cluster, it needs some data. -Luckily such data can be generated. - -```sh -docker compose exec fastapi /bin/bash -pacman -S words fortune-mod -./schema/gendummydata.py dummy.sql -mariadb aurweb < dummy.sql -``` - -The generation script may prompt you to install other Arch packages before it -can proceed. - -### Querying the RPC - -The Fast (Python) API runs on Port 8444. You can query one like so: - -```sh -curl -k "https://localhost:8444/rpc/?v=5&type=search&arg=python" -``` - -`-k` bypasses local certificate issues that `curl` will otherwise complain about. diff --git a/docker/ca-entrypoint.sh b/docker/ca-entrypoint.sh deleted file mode 100755 index 55c7cd75..00000000 --- a/docker/ca-entrypoint.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash -# Initialize step-ca and request certificates from it. -# -# Certificates created by this service are meant to be used in -# aurweb Docker's nginx service. -# -# If ./data/root_ca.crt is present, CA generation is skipped. -# If ./data/${host}.{cert,key}.pem is available, host certificate -# generation is skipped. -# -set -eou pipefail - -# /data-based variables. -DATA_DIR="/data" -DATA_ROOT_CA="$DATA_DIR/root_ca.crt" -DATA_CERT="$DATA_DIR/localhost.cert.pem" -DATA_CERT_KEY="$DATA_DIR/localhost.key.pem" - -# Host certificates requested from the CA (separated by spaces). -DATA_CERT_HOSTS='localhost' - -# Local step paths and CA configuration values. -STEP_DIR="$(step-cli path)" -STEP_CA_CONFIG="$STEP_DIR/config/ca.json" -STEP_CA_ADDR='127.0.0.1:8443' -STEP_CA_URL='https://localhost:8443' -STEP_CA_PROVISIONER='admin@localhost' - -# Password file used for both --password-file and --provisioner-password-file. -STEP_PASSWD_FILE="$STEP_DIR/password.txt" - -# Hostnames supported by the CA. -STEP_CA_NAME='aurweb' -STEP_CA_DNS='localhost' - -make_password() { - # Create a random 20-length password and write it to $1. - openssl rand -hex 20 > $1 -} - -setup_step_ca() { - # Cleanup and setup step ca configuration. - rm -rf $STEP_DIR/* - - # Initialize `step` - make_password "$STEP_PASSWD_FILE" - step-cli ca init \ - --name="$STEP_CA_NAME" \ - --dns="$STEP_CA_DNS" \ - --address="$STEP_CA_ADDR" \ - --password-file="$STEP_PASSWD_FILE" \ - --provisioner="$STEP_CA_PROVISIONER" \ - --provisioner-password-file="$STEP_PASSWD_FILE" \ - --with-ca-url="$STEP_CA_URL" - - # Update ca.json max TLS certificate duration to a year. - update-step-config "$STEP_CA_CONFIG" - - # Install root_ca.crt as read/writable to /data/root_ca.crt. - install -m666 "$STEP_DIR/certs/root_ca.crt" "$DATA_ROOT_CA" -} - -start_step_ca() { - # Start the step-ca web server. - step-ca "$STEP_CA_CONFIG" \ - --password-file="$STEP_PASSWD_FILE" & - until printf "" 2>>/dev/null >>/dev/tcp/127.0.0.1/8443; do - sleep 1 - done -} - -kill_step_ca() { - # Stop the step-ca web server. - killall step-ca >/dev/null 2>&1 || /bin/true -} - -install_step_ca() { - # Install step-ca certificate authority to the system. - step-cli certificate install "$STEP_DIR/certs/root_ca.crt" -} - -step_cert_request() { - # Request a certificate from the step ca. - step-cli ca certificate \ - --not-after=8800h \ - --provisioner="$STEP_CA_PROVISIONER" \ - --provisioner-password-file="$STEP_PASSWD_FILE" \ - $1 $2 $3 - chmod 666 /data/${1}.*.pem -} - -if [ ! -d /root/.step/config ]; then - # Remove existing certs. - rm -vf /data/localhost.{cert,key}.pem /data/root_ca.crt - - setup_step_ca - install_step_ca - - start_step_ca - for host in $DATA_CERT_HOSTS; do - step_cert_request $host /data/${host}.cert.pem /data/${host}.key.pem - done - kill_step_ca - - echo -n "WARN: Your certificates are being regenerated to resolve " - echo -n "an inconsistent step-ca state. You will need to re-import " - echo "the root CA certificate into your browser." -else - exec "$@" -fi - -# Set permissions to /data to rwx for everybody. -chmod 777 /data - -exec "$@" diff --git a/docker/cgit-entrypoint.sh b/docker/cgit-entrypoint.sh deleted file mode 100755 index 282430e2..00000000 --- a/docker/cgit-entrypoint.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -set -eou pipefail - -mkdir -p /var/data/cgit - -cp -vf conf/cgitrc.proto /etc/cgitrc -sed -ri "s|clone-prefix=.*|clone-prefix=${CGIT_CLONE_PREFIX}|" /etc/cgitrc -sed -ri 's|header=.*|header=/aurweb/static/html/cgit/header.html|' /etc/cgitrc -sed -ri 's|footer=.*|footer=/aurweb/static/html/cgit/footer.html|' /etc/cgitrc -sed -ri 's|repo\.path=.*|repo.path=/aurweb/aur.git|' /etc/cgitrc -sed -ri "s|^(css)=.*$|\1=${CGIT_CSS}|" /etc/cgitrc - -exec "$@" diff --git a/docker/config/aurweb-cron b/docker/config/aurweb-cron deleted file mode 100644 index a8e80ad6..00000000 --- a/docker/config/aurweb-cron +++ /dev/null @@ -1,7 +0,0 @@ -AUR_CONFIG='/aurweb/conf/config' -*/5 * * * * bash -c 'aurweb-mkpkglists --extended' -*/2 * * * * bash -c 'aurweb-aurblup' -*/2 * * * * bash -c 'aurweb-pkgmaint' -*/2 * * * * bash -c 'aurweb-usermaint' -*/2 * * * * bash -c 'aurweb-popupdate' -*/12 * * * * bash -c 'aurweb-votereminder' diff --git a/docker/config/grafana/datasources/datasource.yml b/docker/config/grafana/datasources/datasource.yml deleted file mode 100644 index 60a56561..00000000 --- a/docker/config/grafana/datasources/datasource.yml +++ /dev/null @@ -1,42 +0,0 @@ ---- -apiVersion: 1 - -deleteDatasources: - - name: Prometheus - - name: Tempo - -datasources: - - name: Prometheus - type: prometheus - uid: prometheus - access: proxy - url: http://prometheus:9090 - orgId: 1 - editable: false - jsonData: - timeInterval: 1m - - name: Tempo - type: tempo - uid: tempo - access: proxy - url: http://tempo:3200 - orgId: 1 - editable: false - jsonData: - tracesToMetrics: - datasourceUid: 'prometheus' - spanStartTimeShift: '1h' - spanEndTimeShift: '-1h' - serviceMap: - datasourceUid: 'prometheus' - nodeGraph: - enabled: true - search: - hide: false - traceQuery: - timeShiftEnabled: true - spanStartTimeShift: '1h' - spanEndTimeShift: '-1h' - spanBar: - type: 'Tag' - tag: 'http.path' diff --git a/docker/config/nginx.conf b/docker/config/nginx.conf deleted file mode 100644 index 9b167553..00000000 --- a/docker/config/nginx.conf +++ /dev/null @@ -1,97 +0,0 @@ -daemon off; -user root; -worker_processes auto; -pid /var/run/nginx.pid; -include /etc/nginx/modules-enabled/*.conf; - -events { - worker_connections 256; -} - -http { - sendfile on; - tcp_nopush on; - types_hash_max_size 4096; - include /etc/nginx/mime.types; - default_type application/octet-stream; - - ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; - ssl_prefer_server_ciphers on; - - access_log /dev/stdout; - error_log /dev/stderr; - - gzip on; - - upstream asgi_backend { - server fastapi:8000; - } - - upstream cgit-fastapi { - server cgit-fastapi:3000; - } - - upstream smartgit { - server unix:/var/run/smartgit/smartgit.sock; - } - - server { - listen 8444 ssl http2; - server_name localhost default_server; - - ssl_certificate /etc/ssl/certs/web.cert.pem; - ssl_certificate_key /etc/ssl/private/web.key.pem; - - location ~ ^/[^\/]+\.gz$ { - # Override mime type to text/plain. - types { text/plain gz; } - default_type text/plain; - - # Filesystem location of .gz archives. - root /var/lib/aurweb/archives; - - # When we match this block, fix-up trying without a trailing slash. - try_files $uri $uri/ =404; - - # Caching headers. - expires max; - add_header Content-Encoding gzip; - add_header Cache-Control public; - add_header Last-Modified ""; - add_header ETag ""; - } - - location ~ "^/([a-z0-9][a-z0-9.+_-]*?)(\.git)?/(git-(receive|upload)-pack|HEAD|info/refs|objects/(info/(http-)?alternates|packs)|[0-9a-f]{2}/[0-9a-f]{38}|pack/pack-[0-9a-f]{40}\.(pack|idx))$" { - include uwsgi_params; - uwsgi_pass smartgit; - uwsgi_modifier1 9; - uwsgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; - uwsgi_param PATH_INFO /aur.git/$3; - uwsgi_param GIT_HTTP_EXPORT_ALL ""; - uwsgi_param GIT_NAMESPACE $1; - uwsgi_param GIT_PROJECT_ROOT /aurweb; - } - - location ~ ^/cgit { - include uwsgi_params; - rewrite ^/cgit/([^?/]+/[^?]*)?(?:\?(.*))?$ /cgit.cgi?url=$1&$2 last; - uwsgi_modifier1 9; - uwsgi_param CGIT_CONFIG /etc/cgitrc; - uwsgi_pass uwsgi://cgit-fastapi; - } - - location / { - proxy_pass http://asgi_backend; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-Protocol ssl; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto https; - proxy_set_header X-Forwarded-Ssl on; - } - } - - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } -} diff --git a/docker/config/prometheus.yml b/docker/config/prometheus.yml deleted file mode 100644 index 6f286dd8..00000000 --- a/docker/config/prometheus.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -global: - scrape_interval: 60s - -scrape_configs: - - job_name: tempo - static_configs: - - targets: ['tempo:3200'] - labels: - instance: tempo - - job_name: aurweb - static_configs: - - targets: ['fastapi:8000'] - labels: - instance: aurweb diff --git a/docker/config/tempo.yml b/docker/config/tempo.yml deleted file mode 100644 index a94ae817..00000000 --- a/docker/config/tempo.yml +++ /dev/null @@ -1,54 +0,0 @@ ---- -stream_over_http_enabled: true -server: - http_listen_address: tempo - http_listen_port: 3200 - log_level: info - -query_frontend: - search: - duration_slo: 5s - throughput_bytes_slo: 1.073741824e+09 - trace_by_id: - duration_slo: 5s - -distributor: - receivers: - otlp: - protocols: - http: - endpoint: tempo:4318 - log_received_spans: - enabled: false - metric_received_spans: - enabled: false - -ingester: - max_block_duration: 5m - -compactor: - compaction: - block_retention: 1h - -metrics_generator: - registry: - external_labels: - source: tempo - storage: - path: /tmp/tempo/generator/wal - remote_write: - - url: http://prometheus:9090/api/v1/write - send_exemplars: true - traces_storage: - path: /tmp/tempo/generator/traces - -storage: - trace: - backend: local - wal: - path: /tmp/tempo/wal - local: - path: /tmp/tempo/blocks - -overrides: - metrics_generator_processors: [service-graphs, span-metrics, local-blocks] diff --git a/docker/cron-entrypoint.sh b/docker/cron-entrypoint.sh deleted file mode 100755 index 5b69ab19..00000000 --- a/docker/cron-entrypoint.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -set -eou pipefail - -# Setup the DB. -NO_INITDB=1 /docker/mariadb-init-entrypoint.sh - -# Create aurblup's directory. -AURBLUP_DIR="/aurweb/aurblup/" -mkdir -p $AURBLUP_DIR - -# Setup aurblup config for Docker. -AURBLUP_DBS='core extra community multilib testing community-testing' -AURBLUP_SERVER='https://mirrors.kernel.org/archlinux/%s/os/x86_64' -aurweb-config set aurblup db-path "$AURBLUP_DIR" -aurweb-config set aurblup sync-dbs "$AURBLUP_DBS" -aurweb-config set aurblup server "$AURBLUP_SERVER" - -# Setup mkpkglists config for Docker. -ARCHIVE_DIR='/var/lib/aurweb/archives' -aurweb-config set mkpkglists archivedir "$ARCHIVE_DIR" -aurweb-config set mkpkglists packagesfile "$ARCHIVE_DIR/packages.gz" -aurweb-config set mkpkglists packagesmetafile \ - "$ARCHIVE_DIR/packages-meta-v1.json.gz" -aurweb-config set mkpkglists packagesmetaextfile \ - "$ARCHIVE_DIR/packages-meta-ext-v1.json.gz" -aurweb-config set mkpkglists pkgbasefile "$ARCHIVE_DIR/pkgbase.gz" -aurweb-config set mkpkglists userfile "$ARCHIVE_DIR/users.gz" - -# Install the cron configuration. -cp /docker/config/aurweb-cron /etc/cron.d/aurweb-cron -chmod 0644 /etc/cron.d/aurweb-cron -crontab /etc/cron.d/aurweb-cron - -exec "$@" diff --git a/docker/fastapi-entrypoint.sh b/docker/fastapi-entrypoint.sh deleted file mode 100755 index c6597313..00000000 --- a/docker/fastapi-entrypoint.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -set -eou pipefail - -# Setup database. -NO_INITDB=1 /docker/mariadb-init-entrypoint.sh - -# Setup some other options. -aurweb-config set options cache 'redis' -aurweb-config set options redis_address 'redis://redis' -aurweb-config set options aur_location "$AURWEB_FASTAPI_PREFIX" -aurweb-config set options git_clone_uri_anon "${AURWEB_FASTAPI_PREFIX}/%s.git" -aurweb-config set options git_clone_uri_priv "${AURWEB_SSHD_PREFIX}/%s.git" - -if [ ! -z ${COMMIT_HASH+x} ]; then - aurweb-config set devel commit_hash "$COMMIT_HASH" -fi - -# Setup prometheus directory. -rm -rf $PROMETHEUS_MULTIPROC_DIR -mkdir -p $PROMETHEUS_MULTIPROC_DIR - -exec "$@" diff --git a/docker/git-entrypoint.sh b/docker/git-entrypoint.sh deleted file mode 100755 index c9f1ec30..00000000 --- a/docker/git-entrypoint.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/bash -set -eou pipefail - -SSHD_CONFIG=/etc/ssh/sshd_config -AUTH_SCRIPT=/app/git-auth.sh - -GIT_REPO=/aurweb/aur.git -GIT_BRANCH=master # 'Master' branch. - -if ! grep -q 'PYTHONPATH' /etc/environment; then - echo "PYTHONPATH='/aurweb:/aurweb/app'" >> /etc/environment -else - sed -ri "s|^(PYTHONPATH)=.*$|\1='/aurweb'|" /etc/environment -fi - -if ! grep -q 'AUR_CONFIG' /etc/environment; then - echo "AUR_CONFIG='/aurweb/conf/config'" >> /etc/environment -else - sed -ri "s|^(AUR_CONFIG)=.*$|\1='/aurweb/conf/config'|" /etc/environment -fi - -mkdir -p /app -chmod 755 /app - -cat >> $AUTH_SCRIPT << EOF -#!/usr/bin/env bash -export AUR_CONFIG="$AUR_CONFIG" -exec /usr/bin/aurweb-git-auth "\$@" -EOF -chmod 755 $AUTH_SCRIPT - -# Add AUR SSH config. -cat >> $SSHD_CONFIG << EOF -Match User aur - PasswordAuthentication no - AuthorizedKeysCommand $AUTH_SCRIPT "%t" "%k" - AuthorizedKeysCommandUser aur - AcceptEnv AUR_OVERWRITE -EOF - -# Setup database. -NO_INITDB=1 /docker/mariadb-init-entrypoint.sh - -# Setup some other options. -aurweb-config set serve repo-path '/aurweb/aur.git/' -aurweb-config set serve ssh-cmdline "$SSH_CMDLINE" - -# Setup SSH Keys. -ssh-keygen -A - -# In docker-compose.aur-dev.yml, we bind ./data to /aurweb/data. -# Production users wishing to include their own SSH keys should -# supply them in ./data. -if [ -d /aurweb/data ]; then - find /aurweb/data -type f -name 'ssh_host_*' -exec cp -vf "{}" /etc/ssh/ \; -fi - -# Taken from INSTALL. -mkdir -pv $GIT_REPO - -# Initialize git repository. -if [ ! -f $GIT_REPO/config ]; then - curdir="$(pwd)" - cd $GIT_REPO - git config --global init.defaultBranch $GIT_BRANCH - git init --bare - git config --local transfer.hideRefs '^refs/' - git config --local --add transfer.hideRefs '!refs/' - git config --local --add transfer.hideRefs '!HEAD' - ln -sf /usr/bin/aurweb-git-update hooks/update - cd $curdir - chown -R aur:aur $GIT_REPO -fi - -exec "$@" diff --git a/docker/health/ca.sh b/docker/health/ca.sh deleted file mode 100755 index 6bf8360e..00000000 --- a/docker/health/ca.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -exec curl -qkiI 'https://localhost:8443/' diff --git a/docker/health/cgit.sh b/docker/health/cgit.sh deleted file mode 100755 index 2f0cfeb1..00000000 --- a/docker/health/cgit.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -exec printf "" >>/dev/tcp/127.0.0.1/${1} diff --git a/docker/health/fastapi.sh b/docker/health/fastapi.sh deleted file mode 100755 index e1df348d..00000000 --- a/docker/health/fastapi.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -exec pgrep "$1" diff --git a/docker/health/mariadb.sh b/docker/health/mariadb.sh deleted file mode 100755 index a75089ad..00000000 --- a/docker/health/mariadb.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -exec mariadb-admin ping --silent diff --git a/docker/health/nginx.sh b/docker/health/nginx.sh deleted file mode 100755 index df76bc2b..00000000 --- a/docker/health/nginx.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -exec curl -k -q https://localhost:8444 diff --git a/docker/health/prometheus.sh b/docker/health/prometheus.sh deleted file mode 100755 index 4917655f..00000000 --- a/docker/health/prometheus.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -exec wget -q http://prometheus:9090/status -O /dev/null diff --git a/docker/health/redis.sh b/docker/health/redis.sh deleted file mode 100755 index b5b442e8..00000000 --- a/docker/health/redis.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -exec pgrep redis-server diff --git a/docker/health/smartgit.sh b/docker/health/smartgit.sh deleted file mode 100755 index b4e7ebd4..00000000 --- a/docker/health/smartgit.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -exec pgrep uwsgi diff --git a/docker/health/sshd.sh b/docker/health/sshd.sh deleted file mode 100755 index d9da9ea1..00000000 --- a/docker/health/sshd.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -# Opt to just pgrep sshd instead of connecting here. This health -# script is used on a regular interval and it ends up spamming -# the git service's logs with accesses. -exec pgrep sshd diff --git a/docker/health/tempo.sh b/docker/health/tempo.sh deleted file mode 100755 index cd316662..00000000 --- a/docker/health/tempo.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -exec wget -q http://tempo:3200/status -O /dev/null diff --git a/docker/hypercorn.env b/docker/hypercorn.env deleted file mode 100644 index 0d65e241..00000000 --- a/docker/hypercorn.env +++ /dev/null @@ -1 +0,0 @@ -FASTAPI_BACKEND="hypercorn" diff --git a/docker/localhost.ext b/docker/localhost.ext deleted file mode 100644 index ab9de5fb..00000000 --- a/docker/localhost.ext +++ /dev/null @@ -1,7 +0,0 @@ -authorityKeyIdentifier=keyid,issuer -basicConstraints=CA:FALSE -keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment -subjectAltName = @alt_names - -[alt_names] -DNS.1 = localhost diff --git a/docker/logging.conf b/docker/logging.conf deleted file mode 100644 index ab754c9f..00000000 --- a/docker/logging.conf +++ /dev/null @@ -1,27 +0,0 @@ -[loggers] -keys=root,sampleLogger - -[handlers] -keys=consoleHandler - -[formatters] -keys=sampleFormatter - -[logger_root] -level=DEBUG -handlers=consoleHandler - -[logger_sampleLogger] -level=DEBUG -handlers=consoleHandler -qualname=sampleLogger -propagate=0 - -[handler_consoleHandler] -class=StreamHandler -level=DEBUG -formatter=sampleFormatter -args=(sys.stdout,) - -[formatter_sampleFormatter] -format=%(asctime)s - %(name)s - %(levelname)s - %(message)s diff --git a/docker/mariadb-entrypoint.sh b/docker/mariadb-entrypoint.sh deleted file mode 100755 index 432b591b..00000000 --- a/docker/mariadb-entrypoint.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -set -eou pipefail - -MYSQL_DATA=/var/lib/mysql - -mariadb-install-db --user=mysql --basedir=/usr --datadir=$MYSQL_DATA - -# Start it up. -mariadbd-safe --datadir=$MYSQL_DATA --skip-networking & -while ! mariadb-admin ping 2>/dev/null; do - sleep 1s -done - -# Configure databases. -DATABASE="aurweb" # Persistent database for fastapi. - -echo "Taking care of primary database '${DATABASE}'..." -mariadb -u root -e "CREATE USER IF NOT EXISTS 'aur'@'localhost' IDENTIFIED BY 'aur';" -mariadb -u root -e "CREATE USER IF NOT EXISTS 'aur'@'%' IDENTIFIED BY 'aur';" -mariadb -u root -e "CREATE DATABASE IF NOT EXISTS $DATABASE;" - -mariadb -u root -e "CREATE USER IF NOT EXISTS 'aur'@'%' IDENTIFIED BY 'aur';" -mariadb -u root -e "GRANT ALL ON aurweb.* TO 'aur'@'localhost';" -mariadb -u root -e "GRANT ALL ON aurweb.* TO 'aur'@'%';" - -mariadb -u root -e "CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY 'aur';" -mariadb -u root -e "GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;" - -mariadb-admin -uroot shutdown - -exec "$@" diff --git a/docker/mariadb-init-entrypoint.sh b/docker/mariadb-init-entrypoint.sh deleted file mode 100755 index 74980031..00000000 --- a/docker/mariadb-init-entrypoint.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -set -eou pipefail - -# Setup a config for our mysql db. -aurweb-config set database name 'aurweb' -aurweb-config set database user 'aur' -aurweb-config set database password 'aur' -aurweb-config set database host 'localhost' -aurweb-config set database socket '/var/run/mysqld/mysqld.sock' -aurweb-config unset database port - -if [ ! -z ${NO_INITDB+x} ]; then - exec "$@" -fi - -python -m aurweb.initdb 2>/dev/null || /bin/true -exec "$@" diff --git a/docker/nginx-entrypoint.sh b/docker/nginx-entrypoint.sh deleted file mode 100755 index 1527cda7..00000000 --- a/docker/nginx-entrypoint.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -set -eou pipefail - -# If production.{cert,key}.pem exists, prefer them. This allows -# user customization of the certificates that FastAPI uses. -# Otherwise, fallback to localhost.{cert,key}.pem, generated by `ca`. - -CERT=/data/production.cert.pem -KEY=/data/production.key.pem - -DEST_CERT=/etc/ssl/certs/web.cert.pem -DEST_KEY=/etc/ssl/private/web.key.pem - -if [ -f "$CERT" ]; then - cp -vf "$CERT" "$DEST_CERT" - cp -vf "$KEY" "$DEST_KEY" -else - cat /data/localhost.cert.pem /data/root_ca.crt > "$DEST_CERT" - cp -vf /data/localhost.key.pem "$DEST_KEY" -fi - -cp -vf /docker/config/nginx.conf /etc/nginx/nginx.conf - -exec "$@" diff --git a/docker/redis-entrypoint.sh b/docker/redis-entrypoint.sh deleted file mode 100755 index 669716d7..00000000 --- a/docker/redis-entrypoint.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -eou pipefail - -sed -ri 's/^bind .*$/bind 0.0.0.0 -::1/g' /etc/redis/redis.conf -sed -ri 's/protected-mode yes/protected-mode no/g' /etc/redis/redis.conf - -exec "$@" diff --git a/docker/scripts/install-deps.sh b/docker/scripts/install-deps.sh deleted file mode 100755 index 0ad8937f..00000000 --- a/docker/scripts/install-deps.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -# Install Arch Linux dependencies. This is centralized here -# for CI and Docker usage and should always reflect the most -# robust development ecosystem. -set -eou pipefail - -# Update and rollout archlinux-keyring keys. -pacman-key --init -pacman-key --updatedb -pacman-key --populate - -pacman -Sy --noconfirm --noprogressbar archlinux-keyring - -# Install other OS dependencies. -pacman -Syu --noconfirm --noprogressbar \ - git gpgme nginx redis openssh \ - mariadb mariadb-libs cgit-aurweb uwsgi uwsgi-plugin-cgi \ - python-pip pyalpm python-srcinfo curl libeatmydata cronie \ - python-poetry python-poetry-core step-cli step-ca asciidoc \ - python-virtualenv python-pre-commit - -exec "$@" diff --git a/docker/scripts/install-python-deps.sh b/docker/scripts/install-python-deps.sh deleted file mode 100755 index f1942498..00000000 --- a/docker/scripts/install-python-deps.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -eou pipefail - -if [ ! -z "${COMPOSE+x}" ]; then - export PIP_BREAK_SYSTEM_PACKAGES=1 - poetry config virtualenvs.create false -fi -poetry install --no-interaction --no-ansi diff --git a/docker/scripts/run-ca.sh b/docker/scripts/run-ca.sh deleted file mode 100755 index 1ef45ef7..00000000 --- a/docker/scripts/run-ca.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -STEP_DIR="$(step-cli path)" -STEP_PASSWD_FILE="$STEP_DIR/password.txt" -STEP_CA_CONFIG="$STEP_DIR/config/ca.json" - -# Start the step-ca https server. -exec step-ca "$STEP_CA_CONFIG" --password-file="$STEP_PASSWD_FILE" diff --git a/docker/scripts/run-cgit.sh b/docker/scripts/run-cgit.sh deleted file mode 100755 index 5551a568..00000000 --- a/docker/scripts/run-cgit.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -exec uwsgi --socket 0.0.0.0:${1} \ - --plugins cgi \ - --cgi /usr/share/webapps/cgit-aurweb/cgit.cgi diff --git a/docker/scripts/run-cron.sh b/docker/scripts/run-cron.sh deleted file mode 100755 index 03bc55ff..00000000 --- a/docker/scripts/run-cron.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -cd /aurweb -aurweb-aurblup -if [ $? -eq 0 ]; then - echo "[$(date -u)] executed aurblup" >> /var/log/aurblup.log -fi - -aurweb-mkpkglists --extended -if [ $? -eq 0 ]; then - echo "[$(date -u)] executed mkpkglists" >> /var/log/mkpkglists.log -fi - -exec /usr/bin/crond -nx proc diff --git a/docker/scripts/run-fastapi.sh b/docker/scripts/run-fastapi.sh deleted file mode 100755 index fe037542..00000000 --- a/docker/scripts/run-fastapi.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash -# By default, set FASTAPI_WORKERS to 2. In production, this should -# be configured by the deployer. -if [ -z ${FASTAPI_WORKERS+x} ]; then - FASTAPI_WORKERS=2 -fi - -export FASTAPI_BACKEND="$1" - -echo "FASTAPI_BACKEND: $FASTAPI_BACKEND" -echo "FASTAPI_WORKERS: $FASTAPI_WORKERS" - -# Perform migrations. -alembic upgrade head - -if [ "$1" == "uvicorn" ] || [ "$1" == "" ]; then - exec uvicorn --reload \ - --log-config /docker/logging.conf \ - --host "0.0.0.0" \ - --port 8000 \ - --forwarded-allow-ips "*" \ - aurweb.asgi:app -elif [ "$1" == "gunicorn" ]; then - exec gunicorn \ - --log-config /docker/logging.conf \ - --bind "0.0.0.0:8000" \ - --proxy-protocol \ - --forwarded-allow-ips "*" \ - -w $FASTAPI_WORKERS \ - -k uvicorn.workers.UvicornWorker \ - aurweb.asgi:app -elif [ "$1" == "hypercorn" ]; then - exec hypercorn --reload \ - --log-config /docker/logging.conf \ - -b "0.0.0.0:8000" \ - --forwarded-allow-ips "*" \ - aurweb.asgi:app -else - echo "Error: Invalid \$FASTAPI_BACKEND supplied." - echo "Valid backends: 'uvicorn', 'gunicorn', 'hypercorn'." - exit 1 -fi diff --git a/docker/scripts/run-nginx.sh b/docker/scripts/run-nginx.sh deleted file mode 100755 index e976f67d..00000000 --- a/docker/scripts/run-nginx.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -echo "=== Running nginx server! ===" -echo -echo " Services:" -echo " - FastAPI : https://localhost:8444/" -echo " (cgit) : https://localhost:8444/cgit/" -echo -echo " Note: Copy root CA (./data/ca.root.pem) to ca-certificates or browser." -echo -echo " Thanks for using aurweb!" -echo - -exec nginx -c /etc/nginx/nginx.conf diff --git a/docker/scripts/run-pytests.sh b/docker/scripts/run-pytests.sh deleted file mode 100755 index 1df432f8..00000000 --- a/docker/scripts/run-pytests.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -COVERAGE=1 -PARAMS=() - -while [ $# -ne 0 ]; do - key="$1" - case "$key" in - --no-coverage) - COVERAGE=0 - shift - ;; - clean) - rm -f .coverage - shift - ;; - *) - echo "usage: $0 [--no-coverage] targets ..." - exit 1 - ;; - esac -done - -rm -rf $PROMETHEUS_MULTIPROC_DIR -mkdir -p $PROMETHEUS_MULTIPROC_DIR - -# Run pytest with optional targets in front of it. -pytest --junitxml="/data/pytest-report.xml" - -# By default, report coverage and move it into cache. -if [ $COVERAGE -eq 1 ]; then - make -C test coverage || /bin/true - - # /data is mounted as a volume. Copy coverage into it. - # Users can then sanitize the coverage locally in their - # aurweb root directory: ./util/fix-coverage ./data/.coverage - rm -f /data/.coverage - cp -v .coverage /data/.coverage - chmod 666 /data/.coverage -fi diff --git a/docker/scripts/run-redis.sh b/docker/scripts/run-redis.sh deleted file mode 100755 index 8dc98b10..00000000 --- a/docker/scripts/run-redis.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -exec /usr/bin/redis-server /etc/redis/redis.conf diff --git a/docker/scripts/run-sharness.sh b/docker/scripts/run-sharness.sh deleted file mode 100755 index fe16751c..00000000 --- a/docker/scripts/run-sharness.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -eou pipefail - -# Initialize the new database; ignore errors. -python -m aurweb.initdb 2>/dev/null || /bin/true - -eatmydata -- make -C test sh diff --git a/docker/scripts/run-smartgit.sh b/docker/scripts/run-smartgit.sh deleted file mode 100755 index b6869a6c..00000000 --- a/docker/scripts/run-smartgit.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -exec uwsgi \ - --socket /var/run/smartgit/smartgit.sock \ - --uid root \ - --gid http \ - --chmod-socket=666 \ - --plugins cgi \ - --cgi /usr/lib/git-core/git-http-backend diff --git a/docker/scripts/run-sshd.sh b/docker/scripts/run-sshd.sh deleted file mode 100755 index d488e80d..00000000 --- a/docker/scripts/run-sshd.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -exec /usr/sbin/sshd -e -p 2222 -D diff --git a/docker/scripts/run-tests.sh b/docker/scripts/run-tests.sh deleted file mode 100755 index 75e562b0..00000000 --- a/docker/scripts/run-tests.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -set -eou pipefail -dir=$(dirname $0) - -# Clean up coverage and stuff. -make -C test clean - -# Run sharness tests. -bash $dir/run-sharness.sh - -# Run Python tests with MariaDB database. -# Pass --silence to avoid reporting coverage. We will do that below. -bash $dir/run-pytests.sh --no-coverage - -make -C test coverage - -# /data is mounted as a volume. Copy coverage into it. -# Users can then sanitize the coverage locally in their -# aurweb root directory: ./util/fix-coverage ./data/.coverage -rm -f /data/.coverage -cp -v .coverage /data/.coverage -chmod 666 /data/.coverage - -# Run pre-commit checks -pre-commit run -a diff --git a/docker/scripts/update-step-config b/docker/scripts/update-step-config deleted file mode 100755 index bbdb2680..00000000 --- a/docker/scripts/update-step-config +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python3 -import json -import sys - -CA_CONFIG = sys.argv[1] - -with open(CA_CONFIG) as f: - data = json.load(f) - -if "authority" not in data: - data["authority"] = dict() -if "claims" not in data["authority"]: - data["authority"]["claims"] = dict() - -# One year of certificate duration. -data["authority"]["claims"] = {"maxTLSCertDuration": "8800h"} - -with open(CA_CONFIG, "w") as f: - json.dump(data, f) diff --git a/docker/sharness-entrypoint.sh b/docker/sharness-entrypoint.sh deleted file mode 100755 index daa9edeb..00000000 --- a/docker/sharness-entrypoint.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -eou pipefail - -exec "$@" diff --git a/docker/smartgit-entrypoint.sh b/docker/smartgit-entrypoint.sh deleted file mode 100755 index daa9edeb..00000000 --- a/docker/smartgit-entrypoint.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -eou pipefail - -exec "$@" diff --git a/docker/test-mysql-entrypoint.sh b/docker/test-mysql-entrypoint.sh deleted file mode 100755 index b3464256..00000000 --- a/docker/test-mysql-entrypoint.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -set -eou pipefail - -# We use the root user for testing in Docker. -# The test user must be able to create databases and drop them. -aurweb-config set database user 'root' -aurweb-config set database host 'localhost' -aurweb-config set database socket '/var/run/mysqld/mysqld.sock' - -# Remove possibly problematic configuration options. -# We depend on the database socket within Docker and -# being run as the root user. -aurweb-config unset database password -aurweb-config unset database port - -# Setup notifications for testing. -aurweb-config set notifications sendmail "$(pwd)/util/sendmail" - -exec "$@" diff --git a/docker/tests-entrypoint.sh b/docker/tests-entrypoint.sh deleted file mode 100755 index 145bee6e..00000000 --- a/docker/tests-entrypoint.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -eou pipefail -dir="$(dirname $0)" - -bash $dir/test-mysql-entrypoint.sh - -exec "$@" diff --git a/examples/aurweb-git-auth.sh b/examples/aurweb-git-auth.sh deleted file mode 100644 index 3e4defd4..00000000 --- a/examples/aurweb-git-auth.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# Wrapper script used to call aurweb-git-update externally when -# utilizing an app-based virtualenv. -aurweb_dir="$HOME" -cd $aurweb_dir -exec poetry run aurweb-git-auth "$@" diff --git a/examples/aurweb-git-serve.sh b/examples/aurweb-git-serve.sh deleted file mode 100644 index 3a64dcbd..00000000 --- a/examples/aurweb-git-serve.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# Wrapper script used to call aurweb-git-update externally when -# utilizing an app-based virtualenv. -aurweb_dir="$HOME" -cd $aurweb_dir -exec poetry run aurweb-git-serve "$@" diff --git a/examples/aurweb-git-update.sh b/examples/aurweb-git-update.sh deleted file mode 100644 index 808dbccd..00000000 --- a/examples/aurweb-git-update.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# Wrapper script used to call aurweb-git-update externally when -# utilizing an app-based virtualenv. -aurweb_dir="$HOME" -cd $aurweb_dir -exec poetry run aurweb-git-update "$@" diff --git a/examples/aurweb.service b/examples/aurweb.service deleted file mode 100644 index 9c482030..00000000 --- a/examples/aurweb.service +++ /dev/null @@ -1,16 +0,0 @@ -[Unit] -Description=aurweb asgi server - -[Description] -User=aur -WorkingDirectory=/srv/http/aurweb -ExecStart=/usr/bin/poetry run gunicorn \ - --log-config /srv/http/aurweb/logging.conf \ - --bind '0.0.0.0:8000' \ - --forwarded-allow-ips '*' \ - --workers 4 \ - -k uvicorn.workers.UvicornWorker \ - aurweb.asgi:app - -[Install] -WantedBy=multi-user.target diff --git a/examples/jsonp.html b/examples/jsonp.html deleted file mode 100644 index d73ec91e..00000000 --- a/examples/jsonp.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - JSONP Callback Test - - - - - -
-
-

- Searching with the following form uses a JSONP callback - to log data out to the javascript console. -

- -
- - -
- -
- - -
- -
- -
-
-
- - diff --git a/git-interface/Makefile b/git-interface/Makefile new file mode 100644 index 00000000..88657904 --- /dev/null +++ b/git-interface/Makefile @@ -0,0 +1,18 @@ +GIT_INTERFACE_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) + +include config.mk + +git-auth.sh: + sed 's#%GIT_INTERFACE_DIR%#$(GIT_INTERFACE_DIR)#' git-auth.sh + chmod +x git-auth.sh + +install: git-auth.sh + install -Dm0755 git-auth.sh "$(DESTDIR)$(PREFIX)/bin/aur-git-auth" + +uninstall: + rm -f "$(DESTDIR)$(PREFIX)/bin/aur-git-auth" + +clean: + rm -f git-auth.sh + +.PHONY: install uninstall clean diff --git a/git-interface/aurinfo.py b/git-interface/aurinfo.py new file mode 100644 index 00000000..201f8642 --- /dev/null +++ b/git-interface/aurinfo.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python + +from copy import copy, deepcopy +import pprint +import sys + +class Attr(object): + def __init__(self, name, is_multivalued=False, allow_arch_extensions=False): + self.name = name + self.is_multivalued = is_multivalued + self.allow_arch_extensions = allow_arch_extensions + +PKGBUILD_ATTRIBUTES = { + 'arch': Attr('arch', True), + 'backup': Attr('backup', True), + 'changelog': Attr('changelog', False), + 'checkdepends': Attr('checkdepends', True), + 'conflicts': Attr('conflicts', True, True), + 'depends': Attr('depends', True, True), + 'epoch': Attr('epoch', False), + 'groups': Attr('groups', True), + 'install': Attr('install', False), + 'license': Attr('license', True), + 'makedepends': Attr('makedepends', True, True), + 'md5sums': Attr('md5sums', True, True), + 'noextract': Attr('noextract', True), + 'optdepends': Attr('optdepends', True, True), + 'options': Attr('options', True), + 'pkgname': Attr('pkgname', False), + 'pkgrel': Attr('pkgrel', False), + 'pkgver': Attr('pkgver', False), + 'provides': Attr('provides', True, True), + 'replaces': Attr('replaces', True, True), + 'sha1sums': Attr('sha1sums', True, True), + 'sha224sums': Attr('sha224sums', True, True), + 'sha256sums': Attr('sha256sums', True, True), + 'sha384sums': Attr('sha384sums', True, True), + 'sha512sums': Attr('sha512sums', True, True), + 'source': Attr('source', True, True), + 'url': Attr('url', False), + 'validpgpkeys': Attr('validpgpkeys', True), +} + +def find_attr(attrname): + # exact match + attr = PKGBUILD_ATTRIBUTES.get(attrname, None) + if attr: + return attr + + # prefix match + # XXX: this could break in the future if PKGBUILD(5) ever + # introduces a key which is a subset of another. + for k in PKGBUILD_ATTRIBUTES.keys(): + if attrname.startswith(k + '_'): + return PKGBUILD_ATTRIBUTES[k] + +def IsMultiValued(attrname): + attr = find_attr(attrname) + return attr and attr.is_multivalued + +class AurInfo(object): + def __init__(self): + self._pkgbase = {} + self._packages = {} + + def GetPackageNames(self): + return self._packages.keys() + + def GetMergedPackage(self, pkgname): + package = deepcopy(self._pkgbase) + package['pkgname'] = pkgname + for k, v in self._packages.get(pkgname).items(): + package[k] = deepcopy(v) + return package + + def AddPackage(self, pkgname): + self._packages[pkgname] = {} + return self._packages[pkgname] + + def SetPkgbase(self, pkgbasename): + self._pkgbase = {'pkgname' : pkgbasename} + return self._pkgbase + + +class StderrECatcher(object): + def Catch(self, lineno, error): + print('ERROR[{:d}]: {:s}'.format(lineno, error), file=sys.stderr) + + +class CollectionECatcher(object): + def __init__(self): + self._errors = [] + + def Catch(self, lineno, error): + self._errors.append((lineno, error)) + + def HasErrors(self): + return len(self._errors) > 0 + + def Errors(self): + return copy(self._errors) + + +def ParseAurinfoFromIterable(iterable, ecatcher=None): + aurinfo = AurInfo() + + if ecatcher is None: + ecatcher = StderrECatcher() + + current_package = None + lineno = 0 + + for line in iterable: + lineno += 1 + + if line.startswith('#'): + continue + + if not line.strip(): + # end of package + current_package = None + continue + + if not line.startswith('\t'): + # start of new package + try: + key, value = map(str.strip, line.split('=', 1)) + except ValueError: + ecatcher.Catch(lineno, 'unexpected header format in section={:s}'.format( + current_package['pkgname'])) + continue + + if key == 'pkgbase': + current_package = aurinfo.SetPkgbase(value) + elif key == 'pkgname': + current_package = aurinfo.AddPackage(value) + else: + ecatcher.Catch(lineno, 'unexpected new section not starting ' + 'with \'pkgname\' found') + continue + else: + # package attribute + if current_package is None: + ecatcher.Catch(lineno, 'package attribute found outside of ' + 'a package section') + continue + + try: + key, value = map(str.strip, line.split('=', 1)) + except ValueError: + ecatcher.Catch(lineno, 'unexpected attribute format in ' + 'section={:s}'.format(current_package['pkgname'])) + + if IsMultiValued(key): + if not current_package.get(key): + current_package[key] = [] + if value: + current_package[key].append(value) + else: + if not current_package.get(key): + current_package[key] = value + else: + ecatcher.Catch(lineno, 'overwriting attribute ' + '{:s}: {:s} -> {:s}'.format(key, + current_package[key], value)) + + return aurinfo + + +def ParseAurinfo(filename='.AURINFO', ecatcher=None): + with open(filename) as f: + return ParseAurinfoFromIterable(f, ecatcher) + + +def ValidateAurinfo(filename='.AURINFO'): + ecatcher = CollectionECatcher() + ParseAurinfo(filename, ecatcher) + errors = ecatcher.Errors() + for error in errors: + print('error on line {:d}: {:s}'.format(error), file=sys.stderr) + return not errors + + +if __name__ == '__main__': + pp = pprint.PrettyPrinter(indent=4) + + if len(sys.argv) == 1: + print('error: not enough arguments') + sys.exit(1) + elif len(sys.argv) == 2: + action = sys.argv[1] + filename = '.AURINFO' + else: + action, filename = sys.argv[1:3] + + if action == 'parse': + aurinfo = ParseAurinfo() + for pkgname in aurinfo.GetPackageNames(): + print(">>> merged package: {:s}".format(pkgname)) + pp.pprint(aurinfo.GetMergedPackage(pkgname)) + print() + elif action == 'validate': + sys.exit(not ValidateAurinfo(filename)) + else: + print('unknown action: {:s}'.format(action)) + sys.exit(1) + +# vim: set et ts=4 sw=4: diff --git a/git-interface/config.mk b/git-interface/config.mk new file mode 100644 index 00000000..4d794a1c --- /dev/null +++ b/git-interface/config.mk @@ -0,0 +1 @@ +PREFIX = /usr/local diff --git a/git-interface/git-auth.py b/git-interface/git-auth.py new file mode 100755 index 00000000..c7de777f --- /dev/null +++ b/git-interface/git-auth.py @@ -0,0 +1,69 @@ +#!/usr/bin/python3 + +import configparser +import mysql.connector +import shlex +import os +import re +import sys + + +def format_command(env_vars, command, ssh_opts, ssh_key): + environment = '' + for key, var in env_vars.items(): + environment += '{}={} '.format(key, shlex.quote(var)) + + command = shlex.quote(command) + command = '{}{}'.format(environment, command) + + # The command is being substituted into an authorized_keys line below, + # so we need to escape the double quotes. + command = command.replace('"', '\\"') + msg = 'command="{}",{} {}'.format(command, ssh_opts, ssh_key) + return msg + + +config = configparser.RawConfigParser() +config.read(os.path.dirname(os.path.realpath(__file__)) + "/../conf/config") + +aur_db_host = config.get('database', 'host') +aur_db_name = config.get('database', 'name') +aur_db_user = config.get('database', 'user') +aur_db_pass = config.get('database', 'password') +aur_db_socket = config.get('database', 'socket') + +valid_keytypes = config.get('auth', 'valid-keytypes').split() +username_regex = config.get('auth', 'username-regex') +git_serve_cmd = config.get('auth', 'git-serve-cmd') +ssh_opts = config.get('auth', 'ssh-options') + +keytype = sys.argv[1] +keytext = sys.argv[2] +if not keytype in valid_keytypes: + exit(1) + +db = mysql.connector.connect(host=aur_db_host, user=aur_db_user, + passwd=aur_db_pass, db=aur_db_name, + unix_socket=aur_db_socket, buffered=True) + +cur = db.cursor() +cur.execute("SELECT Users.Username, Users.AccountTypeID FROM Users " + + "INNER JOIN SSHPubKeys ON SSHPubKeys.UserID = Users.ID " + "WHERE SSHPubKeys.PubKey = %s AND Users.Suspended = 0", + (keytype + " " + keytext,)) + +if cur.rowcount != 1: + exit(1) + +user, account_type = cur.fetchone() +if not re.match(username_regex, user): + exit(1) + + +env_vars = { + 'AUR_USER': user, + 'AUR_PRIVILEGED': '1' if account_type > 1 else '0', +} +key = keytype + ' ' + keytext + +print(format_command(env_vars, git_serve_cmd, ssh_opts, key)) diff --git a/git-interface/git-auth.sh.in b/git-interface/git-auth.sh.in new file mode 100644 index 00000000..223816ac --- /dev/null +++ b/git-interface/git-auth.sh.in @@ -0,0 +1,3 @@ +#!/bin/sh + +%GIT_INTERFACE_DIR%/git-auth.py "$1" "$2" diff --git a/git-interface/git-serve.py b/git-interface/git-serve.py new file mode 100755 index 00000000..8316cf7d --- /dev/null +++ b/git-interface/git-serve.py @@ -0,0 +1,163 @@ +#!/usr/bin/python3 + +import configparser +import mysql.connector +import os +import re +import shlex +import sys + +config = configparser.RawConfigParser() +config.read(os.path.dirname(os.path.realpath(__file__)) + "/../conf/config") + +aur_db_host = config.get('database', 'host') +aur_db_name = config.get('database', 'name') +aur_db_user = config.get('database', 'user') +aur_db_pass = config.get('database', 'password') +aur_db_socket = config.get('database', 'socket') + +repo_path = config.get('serve', 'repo-path') +repo_regex = config.get('serve', 'repo-regex') +git_shell_cmd = config.get('serve', 'git-shell-cmd') +ssh_cmdline = config.get('serve', 'ssh-cmdline') + +enable_maintenance = config.getboolean('options', 'enable-maintenance') +maintenance_exc = config.get('options', 'maintenance-exceptions').split() + +def pkgbase_exists(pkgbase): + db = mysql.connector.connect(host=aur_db_host, user=aur_db_user, + passwd=aur_db_pass, db=aur_db_name, + unix_socket=aur_db_socket) + cur = db.cursor() + + cur.execute("SELECT COUNT(*) FROM PackageBases WHERE Name = %s ", + [pkgbase]) + + db.close() + return (cur.fetchone()[0] > 0) + +def list_repos(user): + db = mysql.connector.connect(host=aur_db_host, user=aur_db_user, + passwd=aur_db_pass, db=aur_db_name, + unix_socket=aur_db_socket) + cur = db.cursor() + + cur.execute("SELECT ID FROM Users WHERE Username = %s ", [user]) + userid = cur.fetchone()[0] + if userid == 0: + die('{:s}: unknown user: {:s}'.format(action, user)) + + cur.execute("SELECT Name, PackagerUID FROM PackageBases " + + "WHERE MaintainerUID = %s ", [userid]) + for row in cur: + print((' ' if row[1] else '*') + row[0]) + db.close() + +def create_pkgbase(pkgbase, user): + if not re.match(repo_regex, pkgbase): + die('{:s}: invalid repository name: {:s}'.format(action, pkgbase)) + if pkgbase_exists(pkgbase): + die('{:s}: package base already exists: {:s}'.format(action, pkgbase)) + + db = mysql.connector.connect(host=aur_db_host, user=aur_db_user, + passwd=aur_db_pass, db=aur_db_name, + unix_socket=aur_db_socket) + cur = db.cursor() + + cur.execute("SELECT ID FROM Users WHERE Username = %s ", [user]) + userid = cur.fetchone()[0] + if userid == 0: + die('{:s}: unknown user: {:s}'.format(action, user)) + + cur.execute("INSERT INTO PackageBases (Name, SubmittedTS, ModifiedTS, " + + "SubmitterUID, MaintainerUID) VALUES (%s, UNIX_TIMESTAMP(), " + + "UNIX_TIMESTAMP(), %s, %s)", [pkgbase, userid, userid]) + pkgbase_id = cur.lastrowid + + cur.execute("INSERT INTO CommentNotify (PackageBaseID, UserID) " + + "VALUES (%s, %s)", [pkgbase_id, userid]) + + db.commit() + db.close() + +def check_permissions(pkgbase, user): + db = mysql.connector.connect(host=aur_db_host, user=aur_db_user, + passwd=aur_db_pass, db=aur_db_name, + unix_socket=aur_db_socket, buffered=True) + cur = db.cursor() + + if os.environ.get('AUR_PRIVILEGED', '0') == '1': + return True + + cur.execute("SELECT COUNT(*) FROM PackageBases " + + "LEFT JOIN PackageComaintainers " + + "ON PackageComaintainers.PackageBaseID = PackageBases.ID " + + "INNER JOIN Users ON Users.ID = PackageBases.MaintainerUID " + + "OR PackageBases.MaintainerUID IS NULL " + + "OR Users.ID = PackageComaintainers.UsersID " + + "WHERE Name = %s AND Username = %s", [pkgbase, user]) + return cur.fetchone()[0] > 0 + +def die(msg): + sys.stderr.write("{:s}\n".format(msg)) + exit(1) + +def die_with_help(msg): + die(msg + "\nTry `{:s} help` for a list of commands.".format(ssh_cmdline)) + +user = os.environ.get("AUR_USER") +cmd = os.environ.get("SSH_ORIGINAL_COMMAND") +if not cmd: + die_with_help("Interactive shell is disabled.") +cmdargv = shlex.split(cmd) +action = cmdargv[0] + +if enable_maintenance: + remote_addr = os.environ["SSH_CLIENT"].split(" ")[0] + if not remote_addr in maintenance_exc: + die("The AUR is down due to maintenance. We will be back soon.") + +if action == 'git-upload-pack' or action == 'git-receive-pack': + if len(cmdargv) < 2: + die_with_help("{:s}: missing path".format(action)) + + path = cmdargv[1].rstrip('/') + if not path.startswith('/'): + path = '/' + path + if not path.endswith('.git'): + path = path + '.git' + pkgbase = path[1:-4] + if not re.match(repo_regex, pkgbase): + die('{:s}: invalid repository name: {:s}'.format(action, pkgbase)) + + if not pkgbase_exists(pkgbase): + create_pkgbase(pkgbase, user) + + if action == 'git-receive-pack': + if not check_permissions(pkgbase, user): + die('{:s}: permission denied: {:s}'.format(action, user)) + + os.environ["AUR_USER"] = user + os.environ["AUR_PKGBASE"] = pkgbase + os.environ["GIT_NAMESPACE"] = pkgbase + cmd = action + " '" + repo_path + "'" + os.execl(git_shell_cmd, git_shell_cmd, '-c', cmd) +elif action == 'list-repos': + if len(cmdargv) > 1: + die_with_help("{:s}: too many arguments".format(action)) + list_repos(user) +elif action == 'setup-repo': + if len(cmdargv) < 2: + die_with_help("{:s}: missing repository name".format(action)) + if len(cmdargv) > 2: + die_with_help("{:s}: too many arguments".format(action)) + create_pkgbase(cmdargv[1], user) +elif action == 'help': + die("Commands:\n" + + " help Show this help message and exit.\n" + + " list-repos List all your repositories.\n" + + " setup-repo Create an empty repository.\n" + + " git-receive-pack Internal command used with Git.\n" + + " git-upload-pack Internal command used with Git.") +else: + die_with_help("invalid command: {:s}".format(action)) diff --git a/git-interface/git-update.py b/git-interface/git-update.py new file mode 100755 index 00000000..592f127e --- /dev/null +++ b/git-interface/git-update.py @@ -0,0 +1,319 @@ +#!/usr/bin/python3 + +from copy import copy, deepcopy +import configparser +import mysql.connector +import os +import pygit2 +import re +import sys + +import aurinfo + +config = configparser.RawConfigParser() +config.read(os.path.dirname(os.path.realpath(__file__)) + "/../conf/config") + +aur_db_host = config.get('database', 'host') +aur_db_name = config.get('database', 'name') +aur_db_user = config.get('database', 'user') +aur_db_pass = config.get('database', 'password') +aur_db_socket = config.get('database', 'socket') + +repo_path = config.get('serve', 'repo-path') +repo_regex = config.get('serve', 'repo-regex') + +def extract_arch_fields(pkginfo, field): + values = [] + + if field in pkginfo: + for val in pkginfo[field]: + values.append({"value": val, "arch": None}) + + for arch in ['i686', 'x86_64']: + if field + '_' + arch in pkginfo: + for val in pkginfo[field + '_' + arch]: + values.append({"value": val, "arch": arch}) + + return values + +def parse_dep(depstring): + dep, _, desc = depstring.partition(': ') + depname = re.sub(r'(<|=|>).*', '', dep) + depcond = dep[len(depname):] + + if (desc): + return (depname + ': ' + desc, depcond) + else: + return (depname, depcond) + +def save_srcinfo(srcinfo, db, cur, user): + # Obtain package base ID and previous maintainer. + pkgbase = srcinfo._pkgbase['pkgname'] + cur.execute("SELECT ID, MaintainerUID FROM PackageBases " + "WHERE Name = %s", [pkgbase]) + (pkgbase_id, maintainer_uid) = cur.fetchone() + was_orphan = not maintainer_uid + + # Obtain the user ID of the new maintainer. + cur.execute("SELECT ID FROM Users WHERE Username = %s", [user]) + user_id = int(cur.fetchone()[0]) + + # Update package base details and delete current packages. + cur.execute("UPDATE PackageBases SET ModifiedTS = UNIX_TIMESTAMP(), " + + "PackagerUID = %s, OutOfDateTS = NULL WHERE ID = %s", + [user_id, pkgbase_id]) + cur.execute("UPDATE PackageBases SET MaintainerUID = %s " + + "WHERE ID = %s AND MaintainerUID IS NULL", + [user_id, pkgbase_id]) + cur.execute("DELETE FROM Packages WHERE PackageBaseID = %s", + [pkgbase_id]) + + for pkgname in srcinfo.GetPackageNames(): + pkginfo = srcinfo.GetMergedPackage(pkgname) + + if 'epoch' in pkginfo and int(pkginfo['epoch']) > 0: + ver = '{:d}:{:s}-{:s}'.format(int(pkginfo['epoch']), pkginfo['pkgver'], + pkginfo['pkgrel']) + else: + ver = '{:s}-{:s}'.format(pkginfo['pkgver'], pkginfo['pkgrel']) + + for field in ('pkgdesc', 'url'): + if not field in pkginfo: + pkginfo[field] = None + + # Create a new package. + cur.execute("INSERT INTO Packages (PackageBaseID, Name, " + + "Version, Description, URL) " + + "VALUES (%s, %s, %s, %s, %s)", + [pkgbase_id, pkginfo['pkgname'], ver, + pkginfo['pkgdesc'], pkginfo['url']]) + db.commit() + pkgid = cur.lastrowid + + # Add package sources. + for source_info in extract_arch_fields(pkginfo, 'source'): + cur.execute("INSERT INTO PackageSources (PackageID, Source, " + + "SourceArch) VALUES (%s, %s, %s)", + [pkgid, source_info['value'], source_info['arch']]) + + # Add package dependencies. + for deptype in ('depends', 'makedepends', + 'checkdepends', 'optdepends'): + cur.execute("SELECT ID FROM DependencyTypes WHERE Name = %s", + [deptype]) + deptypeid = cur.fetchone()[0] + for dep_info in extract_arch_fields(pkginfo, deptype): + depname, depcond = parse_dep(dep_info['value']) + deparch = dep_info['arch'] + cur.execute("INSERT INTO PackageDepends (PackageID, " + + "DepTypeID, DepName, DepCondition, DepArch) " + + "VALUES (%s, %s, %s, %s, %s)", + [pkgid, deptypeid, depname, depcond, deparch]) + + # Add package relations (conflicts, provides, replaces). + for reltype in ('conflicts', 'provides', 'replaces'): + cur.execute("SELECT ID FROM RelationTypes WHERE Name = %s", + [reltype]) + reltypeid = cur.fetchone()[0] + for rel_info in extract_arch_fields(pkginfo, reltype): + relname, relcond = parse_dep(rel_info['value']) + relarch = rel_info['arch'] + cur.execute("INSERT INTO PackageRelations (PackageID, " + + "RelTypeID, RelName, RelCondition, RelArch) " + + "VALUES (%s, %s, %s, %s, %s)", + [pkgid, reltypeid, relname, relcond, relarch]) + + # Add package licenses. + if 'license' in pkginfo: + for license in pkginfo['license']: + cur.execute("SELECT ID FROM Licenses WHERE Name = %s", + [license]) + if cur.rowcount == 1: + licenseid = cur.fetchone()[0] + else: + cur.execute("INSERT INTO Licenses (Name) VALUES (%s)", + [license]) + db.commit() + licenseid = cur.lastrowid + cur.execute("INSERT INTO PackageLicenses (PackageID, " + + "LicenseID) VALUES (%s, %s)", + [pkgid, licenseid]) + + # Add package groups. + if 'groups' in pkginfo: + for group in pkginfo['groups']: + cur.execute("SELECT ID FROM Groups WHERE Name = %s", + [group]) + if cur.rowcount == 1: + groupid = cur.fetchone()[0] + else: + cur.execute("INSERT INTO Groups (Name) VALUES (%s)", + [group]) + db.commit() + groupid = cur.lastrowid + cur.execute("INSERT INTO PackageGroups (PackageID, " + "GroupID) VALUES (%s, %s)", [pkgid, groupid]) + + # Add user to notification list on adoption. + if was_orphan: + cur.execute("SELECT COUNT(*) FROM CommentNotify WHERE " + + "PackageBaseID = %s AND UserID = %s", + [pkgbase_id, user_id]) + if cur.fetchone()[0] == 0: + cur.execute("INSERT INTO CommentNotify (PackageBaseID, UserID) " + + "VALUES (%s, %s)", [pkgbase_id, user_id]) + + db.commit() + +def die(msg): + sys.stderr.write("error: {:s}\n".format(msg)) + exit(1) + +def die_commit(msg, commit): + sys.stderr.write("error: The following error " + + "occurred when parsing commit\n") + sys.stderr.write("error: {:s}:\n".format(commit)) + sys.stderr.write("error: {:s}\n".format(msg)) + exit(1) + +if len(sys.argv) != 4: + die("invalid arguments") + +refname = sys.argv[1] +sha1_old = sys.argv[2] +sha1_new = sys.argv[3] + +user = os.environ.get("AUR_USER") +pkgbase = os.environ.get("AUR_PKGBASE") +privileged = (os.environ.get("AUR_PRIVILEGED", '0') == '1') + +if refname != "refs/heads/master": + die("pushing to a branch other than master is restricted") + +repo = pygit2.Repository(repo_path) + +db = mysql.connector.connect(host=aur_db_host, user=aur_db_user, + passwd=aur_db_pass, db=aur_db_name, + unix_socket=aur_db_socket, buffered=True) +cur = db.cursor() + +# Detect and deny non-fast-forwards. +if sha1_old != "0000000000000000000000000000000000000000": + walker = repo.walk(sha1_old, pygit2.GIT_SORT_TOPOLOGICAL) + walker.hide(sha1_new) + if next(walker, None) != None: + cur.execute("SELECT AccountTypeID FROM Users WHERE UserName = %s ", + [user]) + if cur.fetchone()[0] == 1: + die("denying non-fast-forward (you should pull first)") + +# Prepare the walker that validates new commits. +walker = repo.walk(sha1_new, pygit2.GIT_SORT_TOPOLOGICAL) +if sha1_old != "0000000000000000000000000000000000000000": + walker.hide(sha1_old) + +cur.execute("SELECT Name FROM PackageBlacklist") +blacklist = [row[0] for row in cur.fetchall()] + +for commit in walker: + if not '.SRCINFO' in commit.tree: + die_commit("missing .SRCINFO", str(commit.id)) + + for treeobj in commit.tree: + blob = repo[treeobj.id] + + if isinstance(blob, pygit2.Tree): + die_commit("the repository must not contain subdirectories", + str(commit.id)) + + if not isinstance(blob, pygit2.Blob): + die_commit("not a blob object: {:s}".format(treeobj), str(commit.id)) + + if blob.size > 250000: + die_commit("maximum blob size (250kB) exceeded", str(commit.id)) + + srcinfo_raw = repo[commit.tree['.SRCINFO'].id].data.decode() + srcinfo_raw = srcinfo_raw.split('\n') + ecatcher = aurinfo.CollectionECatcher() + srcinfo = aurinfo.ParseAurinfoFromIterable(srcinfo_raw, ecatcher) + errors = ecatcher.Errors() + if errors: + sys.stderr.write("error: The following errors occurred " + "when parsing .SRCINFO in commit\n") + sys.stderr.write("error: {:s}:\n".format(str(commit.id))) + for error in errors: + sys.stderr.write("error: line {:d}: {:s}\n".format(error)) + exit(1) + + srcinfo_pkgbase = srcinfo._pkgbase['pkgname'] + if not re.match(repo_regex, srcinfo_pkgbase): + die_commit('invalid pkgbase: {:s}'.format(srcinfo_pkgbase), str(commit.id)) + + for pkgname in srcinfo.GetPackageNames(): + pkginfo = srcinfo.GetMergedPackage(pkgname) + + for field in ('pkgver', 'pkgrel', 'pkgname'): + if not field in pkginfo: + die_commit('missing mandatory field: {:s}'.format(field), str(commit.id)) + + if 'epoch' in pkginfo and not pkginfo['epoch'].isdigit(): + die_commit('invalid epoch: {:s}'.format(pkginfo['epoch']), str(commit.id)) + + if not re.match(r'[a-z0-9][a-z0-9\.+_-]*$', pkginfo['pkgname']): + die_commit('invalid package name: {:s}'.format(pkginfo['pkgname']), + str(commit.id)) + + for field in ('pkgname', 'pkgdesc', 'url'): + if field in pkginfo and len(pkginfo[field]) > 255: + die_commit('{:s} field too long: {:s}'.format(field, pkginfo[field]), + str(commit.id)) + + for field in ('install', 'changelog'): + if field in pkginfo and not pkginfo[field] in commit.tree: + die_commit('missing {:s} file: {:s}'.format(field, pkginfo[field]), + str(commit.id)) + + for field in extract_arch_fields(pkginfo, 'source'): + fname = field['value'] + if "://" in fname or "lp:" in fname: + continue + if not fname in commit.tree: + die_commit('missing source file: {:s}'.format(fname), str(commit.id)) + +srcinfo_raw = repo[repo[sha1_new].tree['.SRCINFO'].id].data.decode() +srcinfo_raw = srcinfo_raw.split('\n') +srcinfo = aurinfo.ParseAurinfoFromIterable(srcinfo_raw) + +srcinfo_pkgbase = srcinfo._pkgbase['pkgname'] +if srcinfo_pkgbase != pkgbase: + die('invalid pkgbase: {:s}, expected {:s}'.format(srcinfo_pkgbase, pkgbase)) + +pkgbase = srcinfo._pkgbase['pkgname'] +cur.execute("SELECT ID FROM PackageBases WHERE Name = %s", [pkgbase]) +pkgbase_id = cur.fetchone()[0] + +for pkgname in srcinfo.GetPackageNames(): + pkginfo = srcinfo.GetMergedPackage(pkgname) + pkgname = pkginfo['pkgname'] + + if pkgname in blacklist and not privileged: + die('package is blacklisted: {:s}'.format(pkginfo['pkgname'])) + + cur.execute("SELECT COUNT(*) FROM Packages WHERE Name = %s AND " + + "PackageBaseID <> %s", [pkgname, pkgbase_id]) + if cur.fetchone()[0] > 0: + die('cannot overwrite package: {:s}'.format(pkgname)) + +save_srcinfo(srcinfo, db, cur, user) + +db.close() + +# Create (or update) a branch with the name of the package base for better +# accessibility. +repo.create_reference('refs/heads/' + pkgbase, sha1_new, True) + +# Work around a Git bug: The HEAD ref is not updated when using gitnamespaces. +# This can be removed once the bug fix is included in Git mainline. See +# http://git.661346.n2.nabble.com/PATCH-receive-pack-Create-a-HEAD-ref-for-ref-namespace-td7632149.html +# for details. +repo.create_reference('refs/namespaces/' + pkgbase + '/HEAD', sha1_new, True) diff --git a/gunicorn.conf.py b/gunicorn.conf.py deleted file mode 100644 index 4f1c3a8c..00000000 --- a/gunicorn.conf.py +++ /dev/null @@ -1,7 +0,0 @@ -from prometheus_client import multiprocess - - -def child_exit(server, worker): # pragma: no cover - """This function is required for gunicorn customization - of prometheus multiprocessing.""" - multiprocess.mark_process_dead(worker.pid) diff --git a/logging.conf b/logging.conf deleted file mode 100644 index d27b0153..00000000 --- a/logging.conf +++ /dev/null @@ -1,58 +0,0 @@ -[loggers] -keys=root,aurweb,uvicorn,hypercorn,alembic - -[handlers] -keys=simpleHandler,detailedHandler - -[formatters] -keys=simpleFormatter,detailedFormatter - -[logger_root] -level=INFO -; We add NullHandler programmatically. -handlers= -propogate=0 - -[logger_aurweb] -level=INFO -handlers=simpleHandler -qualname=aurweb -propagate=1 - -[logger_uvicorn] -level=INFO -handlers=simpleHandler -qualname=uvicorn -propagate=0 - -[logger_hypercorn] -level=INFO -handlers=simpleHandler -qualname=hypercorn -propagate=0 - -[logger_alembic] -level=INFO -handlers=simpleHandler -qualname=alembic -propagate=0 - -[handler_simpleHandler] -class=StreamHandler -level=DEBUG -formatter=simpleFormatter -args=(sys.stdout,) - -[handler_detailedHandler] -class=StreamHandler -level=DEBUG -formatter=detailedFormatter -args=(sys.stdout,) - -[formatter_simpleFormatter] -format=%(asctime)s %(levelname)-8s | %(name)s @ (%(filename)s:%(lineno)d): %(message)s -datefmt=%H:%M:%S - -[formatter_detailedFormatter] -format=%(asctime)s %(levelname)-8s | [%(name)s.%(funcName)s() @ %(filename)s:%(lineno)d]: %(message)s -datefmt=%H:%M:%S diff --git a/logging.prod.conf b/logging.prod.conf deleted file mode 100644 index 63692a28..00000000 --- a/logging.prod.conf +++ /dev/null @@ -1,58 +0,0 @@ -[loggers] -keys=root,aurweb,uvicorn,hypercorn,alembic - -[handlers] -keys=simpleHandler,detailedHandler - -[formatters] -keys=simpleFormatter,detailedFormatter - -[logger_root] -level=INFO -; We add NullHandler programmatically. -handlers= -propogate=0 - -[logger_aurweb] -level=INFO -handlers=simpleHandler -qualname=aurweb -propagate=1 - -[logger_uvicorn] -level=WARN -handlers=simpleHandler -qualname=uvicorn -propagate=0 - -[logger_hypercorn] -level=WARN -handlers=simpleHandler -qualname=hypercorn -propagate=0 - -[logger_alembic] -level=WARN -handlers=simpleHandler -qualname=alembic -propagate=0 - -[handler_simpleHandler] -class=StreamHandler -level=INFO -formatter=simpleFormatter -args=(sys.stdout,) - -[handler_detailedHandler] -class=StreamHandler -level=DEBUG -formatter=detailedFormatter -args=(sys.stdout,) - -[formatter_simpleFormatter] -format=%(asctime)s %(levelname)-8s | %(name)s @ (%(filename)s:%(lineno)d): %(message)s -datefmt=%H:%M:%S - -[formatter_detailedFormatter] -format=%(asctime)s %(levelname)-8s | [%(name)s.%(funcName)s() @ %(filename)s:%(lineno)d]: %(message)s -datefmt=%H:%M:%S diff --git a/logging.test.conf b/logging.test.conf deleted file mode 100644 index 6c44f5dc..00000000 --- a/logging.test.conf +++ /dev/null @@ -1,60 +0,0 @@ -[loggers] -keys=root,aurweb,uvicorn,hypercorn,alembic - -[handlers] -keys=simpleHandler,detailedHandler - -[formatters] -keys=simpleFormatter,detailedFormatter - -[logger_root] -level=INFO -; We add NullHandler programmatically. -handlers= -propogate=0 - -[logger_aurweb] -; This loglevel is set to DEBUG for tests where we expect specific -; debug logging to occur. In production, this should be set to INFO. -level=DEBUG -handlers=simpleHandler -qualname=aurweb -propagate=1 - -[logger_uvicorn] -level=INFO -handlers=simpleHandler -qualname=uvicorn -propagate=0 - -[logger_hypercorn] -level=INFO -handlers=simpleHandler -qualname=hypercorn -propagate=0 - -[logger_alembic] -level=INFO -handlers=simpleHandler -qualname=alembic -propagate=0 - -[handler_simpleHandler] -class=StreamHandler -level=DEBUG -formatter=simpleFormatter -args=(sys.stdout,) - -[handler_detailedHandler] -class=StreamHandler -level=DEBUG -formatter=detailedFormatter -args=(sys.stdout,) - -[formatter_simpleFormatter] -format=%(asctime)s %(levelname)-5s | %(name)s: %(message)s -datefmt=%H:%M:%S - -[formatter_detailedFormatter] -format=%(asctime)s %(levelname)-5s | %(name)s.%(funcName)s() @ L%(lineno)d: %(message)s -datefmt=%H:%M:%S diff --git a/logs/.gitkeep b/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/migrations/README b/migrations/README deleted file mode 100644 index 301d0e54..00000000 --- a/migrations/README +++ /dev/null @@ -1,48 +0,0 @@ -This directory contains Alembic's environment for managing database migrations. - -From Alembic's documentation: Alembic is a lightweight database migration tool -for usage with the SQLAlchemy Database Toolkit for Python. -https://alembic.sqlalchemy.org/en/latest/index.html - - -Upgrading to the latest version -------------------------------- - -Simply run `alembic upgrade head` from aurweb's root. - - -Creating new migrations ------------------------ - -When working with Alembic and SQLAlchemy, you should never edit the database -schema manually. Please proceed like this instead: - -1. Edit `aurweb/schema.py` to your liking. -2. Run `alembic revision --autogenerate -m "your message"` -3. Proofread the generated migration. -4. Run `alembic upgrade head` to apply the changes to the database. -5. Commit the new migration. - -To revert a migration, you may run `alembic downgrade -1` and then manually -delete the migration file. Note that SQLite is limited and that it's sometimes -easier to recreate the database. - -For anything more complicated, please read Alembic's documentation. - - -Troubleshooting ---------------- - -- `ModuleNotFoundError: No module named 'aurweb'` - - You may either install the aurweb module with pip, or set PYTHONPATH to your - aurweb repository. Since alembic must be run from the aurweb root, you may - simply use: `PYTHONPATH=. alembic [...]`. - -- `FAILED: No config file 'alembic.ini' found, or file has no '[alembic]' section` - - You need to run Alembic from the project's root, and not from `migrations/`. - -- `configparser.NoSectionError: No section: 'database'` - - You need to set AUR_CONFIG, as explained in `TESTING`. diff --git a/migrations/env.py b/migrations/env.py deleted file mode 100644 index dcc0329d..00000000 --- a/migrations/env.py +++ /dev/null @@ -1,80 +0,0 @@ -import logging -import logging.config - -import sqlalchemy -from alembic import context - -import aurweb.db -import aurweb.schema - -# this is the Alembic Config object, which provides -# access to the values within the .ini file in use. -config = context.config - -# model MetaData for autogenerating migrations -target_metadata = aurweb.schema.metadata - -# other values from the config, defined by the needs of env.py, -# can be acquired: -# my_important_option = config.get_main_option("my_important_option") -# ... etc. - -# If configure_logger is either True or not specified, -# configure the logger via fileConfig. -if config.attributes.get("configure_logger", True): - logging.config.fileConfig(config.config_file_name) - -# This grabs the root logger in env.py. -logger = logging.getLogger(__name__) - - -def run_migrations_offline(): - """Run migrations in 'offline' mode. - - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. - - Calls to context.execute() here emit the given string to the - script output. - - """ - dbname = aurweb.db.name() - logging.info(f"Performing offline migration on database '{dbname}'.") - context.configure( - url=aurweb.db.get_sqlalchemy_url(), - target_metadata=target_metadata, - literal_binds=True, - dialect_opts={"paramstyle": "named"}, - ) - - with context.begin_transaction(): - context.run_migrations() - - -def run_migrations_online(): - """Run migrations in 'online' mode. - - In this scenario we need to create an Engine - and associate a connection with the context. - - """ - dbname = aurweb.db.name() - logging.info(f"Performing online migration on database '{dbname}'.") - connectable = sqlalchemy.create_engine( - aurweb.db.get_sqlalchemy_url(), - poolclass=sqlalchemy.pool.NullPool, - ) - - with connectable.connect() as connection: - context.configure(connection=connection, target_metadata=target_metadata) - - with context.begin_transaction(): - context.run_migrations() - - -if context.is_offline_mode(): - run_migrations_offline() -else: - run_migrations_online() diff --git a/migrations/script.py.mako b/migrations/script.py.mako deleted file mode 100644 index 2c015630..00000000 --- a/migrations/script.py.mako +++ /dev/null @@ -1,24 +0,0 @@ -"""${message} - -Revision ID: ${up_revision} -Revises: ${down_revision | comma,n} -Create Date: ${create_date} - -""" -from alembic import op -import sqlalchemy as sa -${imports if imports else ""} - -# revision identifiers, used by Alembic. -revision = ${repr(up_revision)} -down_revision = ${repr(down_revision)} -branch_labels = ${repr(branch_labels)} -depends_on = ${repr(depends_on)} - - -def upgrade(): - ${upgrades if upgrades else "pass"} - - -def downgrade(): - ${downgrades if downgrades else "pass"} diff --git a/migrations/versions/38e5b9982eea_add_indicies_on_packagebases_for_rss_.py b/migrations/versions/38e5b9982eea_add_indicies_on_packagebases_for_rss_.py deleted file mode 100644 index e6d5f275..00000000 --- a/migrations/versions/38e5b9982eea_add_indicies_on_packagebases_for_rss_.py +++ /dev/null @@ -1,29 +0,0 @@ -"""add indices on PackageBases for RSS order by - -Revision ID: 38e5b9982eea -Revises: 7d65d35fae45 -Create Date: 2024-08-03 01:35:39.104283 - -""" - -from alembic import op - -# revision identifiers, used by Alembic. -revision = "38e5b9982eea" -down_revision = "7d65d35fae45" -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_index("BasesModifiedTS", "PackageBases", ["ModifiedTS"], unique=False) - op.create_index("BasesSubmittedTS", "PackageBases", ["SubmittedTS"], unique=False) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_index("BasesSubmittedTS", table_name="PackageBases") - op.drop_index("BasesModifiedTS", table_name="PackageBases") - # ### end Alembic commands ### diff --git a/migrations/versions/56e2ce8e2ffa_utf8mb4_charset_and_collation.py b/migrations/versions/56e2ce8e2ffa_utf8mb4_charset_and_collation.py deleted file mode 100644 index 5cbf6de8..00000000 --- a/migrations/versions/56e2ce8e2ffa_utf8mb4_charset_and_collation.py +++ /dev/null @@ -1,105 +0,0 @@ -"""utf8mb4 charset and collation - -Revision ID: 56e2ce8e2ffa -Revises: ef39fcd6e1cd -Create Date: 2021-05-17 14:23:00.008479 - -""" - -from alembic import op - -import aurweb.config - -# revision identifiers, used by Alembic. -revision = "56e2ce8e2ffa" -down_revision = "ef39fcd6e1cd" -branch_labels = None -depends_on = None - -# Tables affected by charset/collate change -tables = [ - ("AccountTypes", "utf8mb4", "utf8mb4_general_ci"), - ("ApiRateLimit", "utf8mb4", "utf8mb4_general_ci"), - ("Bans", "utf8mb4", "utf8mb4_general_ci"), - ("DependencyTypes", "utf8mb4", "utf8mb4_general_ci"), - ("Groups", "utf8mb4", "utf8mb4_general_ci"), - ("Licenses", "utf8mb4", "utf8mb4_general_ci"), - ("OfficialProviders", "utf8mb4", "utf8mb4_bin"), - ("PackageBases", "utf8mb4", "utf8mb4_general_ci"), - ("PackageBlacklist", "utf8mb4", "utf8mb4_general_ci"), - ("PackageComments", "utf8mb4", "utf8mb4_general_ci"), - ("PackageDepends", "utf8mb4", "utf8mb4_general_ci"), - ("PackageKeywords", "utf8mb4", "utf8mb4_general_ci"), - ("PackageRelations", "utf8mb4", "utf8mb4_general_ci"), - ("PackageRequests", "utf8mb4", "utf8mb4_general_ci"), - ("PackageSources", "utf8mb4", "utf8mb4_general_ci"), - ("Packages", "utf8mb4", "utf8mb4_general_ci"), - ("RelationTypes", "utf8mb4", "utf8mb4_general_ci"), - ("RequestTypes", "utf8mb4", "utf8mb4_general_ci"), - ("SSHPubKeys", "utf8mb4", "utf8mb4_bin"), - ("Sessions", "utf8mb4", "utf8mb4_bin"), - ("TU_VoteInfo", "utf8mb4", "utf8mb4_general_ci"), - ("Terms", "utf8mb4", "utf8mb4_general_ci"), - ("Users", "utf8mb4", "utf8mb4_general_ci"), -] - -# Indexes affected by charset/collate change -# Map of Unique Indexes key = index_name, value = [table_name, column1, column2] -indexes = {"ProviderNameProvides": ["OfficialProviders", "Name", "Provides"]} - -# Source charset/collation, before this migration is run. -src_charset = "utf8" -src_collate = "utf8_general_ci" - -db_backend = aurweb.config.get("database", "backend") - - -def rebuild_unique_indexes_with_str_cols(): - for idx_name in indexes: - sql = f""" -DROP INDEX IF EXISTS {idx_name} -ON {indexes.get(idx_name)[0]} -""" - op.execute(sql) - sql = f""" -CREATE UNIQUE INDEX {idx_name} -ON {indexes.get(idx_name)[0]} -({indexes.get(idx_name)[1]}, {indexes.get(idx_name)[2]}) -""" - op.execute(sql) - - -def do_all(iterable, fn): - for element in iterable: - fn(element) - - -def upgrade(): - def op_execute(table_meta): - table, charset, collate = table_meta - sql = f""" -ALTER TABLE {table} -CONVERT TO CHARACTER SET {charset} -COLLATE {collate} -""" - op.execute(sql) - - do_all(tables, op_execute) - rebuild_unique_indexes_with_str_cols() - - -def downgrade(): - if db_backend == "sqlite": - return None - - def op_execute(table_meta): - table, charset, collate = table_meta - sql = f""" -ALTER TABLE {table} -CONVERT TO CHARACTER SET {src_charset} -COLLATE {src_collate} -""" - op.execute(sql) - - do_all(tables, op_execute) - rebuild_unique_indexes_with_str_cols() diff --git a/migrations/versions/6441d3b65270_add_popularityupdated_to_packagebase.py b/migrations/versions/6441d3b65270_add_popularityupdated_to_packagebase.py deleted file mode 100644 index 0c817bad..00000000 --- a/migrations/versions/6441d3b65270_add_popularityupdated_to_packagebase.py +++ /dev/null @@ -1,34 +0,0 @@ -"""add PopularityUpdated to PackageBase - -Revision ID: 6441d3b65270 -Revises: d64e5571bc8d -Create Date: 2022-09-22 18:08:03.280664 - -""" - -from alembic import op -from sqlalchemy.exc import OperationalError - -from aurweb.models.package_base import PackageBase -from aurweb.scripts import popupdate - -# revision identifiers, used by Alembic. -revision = "6441d3b65270" -down_revision = "d64e5571bc8d" -branch_labels = None -depends_on = None - -table = PackageBase.__table__ - - -def upgrade(): - try: - op.add_column(table.name, table.c.PopularityUpdated) - except OperationalError: - print(f"table '{table.name}' already exists, skipping migration") - - popupdate.run_variable() - - -def downgrade(): - op.drop_column(table.name, "PopularityUpdated") diff --git a/migrations/versions/6a64dd126029_rename_tu_to_package_maintainer.py b/migrations/versions/6a64dd126029_rename_tu_to_package_maintainer.py deleted file mode 100644 index 489d6e6c..00000000 --- a/migrations/versions/6a64dd126029_rename_tu_to_package_maintainer.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Rename TU to Package Maintainer - -Revision ID: 6a64dd126029 -Revises: c5a6a9b661a0 -Create Date: 2023-09-01 13:48:15.315244 - -""" - -from aurweb import db -from aurweb.models import AccountType - -# revision identifiers, used by Alembic. -revision = "6a64dd126029" -down_revision = "c5a6a9b661a0" -branch_labels = None -depends_on = None - -# AccountTypes -# ID 2 -> Trusted User / Package Maintainer -# ID 4 -> Trusted User & Developer / Package Maintainer & Developer - - -def upgrade(): - with db.begin(): - tu = db.query(AccountType).filter(AccountType.ID == 2).first() - tudev = db.query(AccountType).filter(AccountType.ID == 4).first() - - tu.AccountType = "Package Maintainer" - tudev.AccountType = "Package Maintainer & Developer" - - -def downgrade(): - with db.begin(): - pm = db.query(AccountType).filter(AccountType.ID == 2).first() - pmdev = db.query(AccountType).filter(AccountType.ID == 4).first() - - pm.AccountType = "Trusted User" - pmdev.AccountType = "Trusted User & Developer" diff --git a/migrations/versions/7d65d35fae45_rename_tu_tables_columns.py b/migrations/versions/7d65d35fae45_rename_tu_tables_columns.py deleted file mode 100644 index 9d768f50..00000000 --- a/migrations/versions/7d65d35fae45_rename_tu_tables_columns.py +++ /dev/null @@ -1,48 +0,0 @@ -"""Rename TU tables/columns - -Revision ID: 7d65d35fae45 -Revises: 6a64dd126029 -Create Date: 2023-09-10 10:21:33.092342 - -""" - -from alembic import op -from sqlalchemy.dialects.mysql import INTEGER - -# revision identifiers, used by Alembic. -revision = "7d65d35fae45" -down_revision = "6a64dd126029" -branch_labels = None -depends_on = None - -# TU_VoteInfo -> VoteInfo -# TU_VoteInfo.ActiveTUs -> VoteInfo.ActiveUsers -# TU_Votes -> Votes - - -def upgrade(): - # Tables - op.rename_table("TU_VoteInfo", "VoteInfo") - op.rename_table("TU_Votes", "Votes") - - # Columns - op.alter_column( - "VoteInfo", - "ActiveTUs", - existing_type=INTEGER(unsigned=True), - new_column_name="ActiveUsers", - ) - - -def downgrade(): - # Tables - op.rename_table("VoteInfo", "TU_VoteInfo") - op.rename_table("Votes", "TU_Votes") - - # Columns - op.alter_column( - "TU_VoteInfo", - "ActiveUsers", - existing_type=INTEGER(unsigned=True), - new_column_name="ActiveTUs", - ) diff --git a/migrations/versions/9e3158957fd7_add_packagekeyword_packagebaseuid.py b/migrations/versions/9e3158957fd7_add_packagekeyword_packagebaseuid.py deleted file mode 100644 index 86ee0067..00000000 --- a/migrations/versions/9e3158957fd7_add_packagekeyword_packagebaseuid.py +++ /dev/null @@ -1,25 +0,0 @@ -"""add PackageKeyword.PackageBaseUID index - -Revision ID: 9e3158957fd7 -Revises: 6441d3b65270 -Create Date: 2022-10-17 11:11:46.203322 - -""" - -from alembic import op - -# revision identifiers, used by Alembic. -revision = "9e3158957fd7" -down_revision = "6441d3b65270" -branch_labels = None -depends_on = None - - -def upgrade(): - op.create_index( - "KeywordsPackageBaseID", "PackageKeywords", ["PackageBaseID"], unique=False - ) - - -def downgrade(): - op.drop_index("KeywordsPackageBaseID", table_name="PackageKeywords") diff --git a/migrations/versions/be7adae47ac3_upgrade_voteinfo_integers.py b/migrations/versions/be7adae47ac3_upgrade_voteinfo_integers.py deleted file mode 100644 index 02c443a1..00000000 --- a/migrations/versions/be7adae47ac3_upgrade_voteinfo_integers.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -upgrade voteinfo integers - -Within `aurweb/schema.py`, these were previously forced to use -TINYINT(3, unsigned=True) types. When generating with dummy data, -it is very easy to bypass 3-character TU counts; in addition, -this is possible in the future on production, and so we should -deal with this case regardless. - -All previous TINYINT(3, unsigned=True) typed columns are upgraded -INTEGER(unsigned=True) types, supporting up to 4-bytes of active TUs -and votes for one particular proposal. - -Revision ID: be7adae47ac3 -Revises: 56e2ce8e2ffa -Create Date: 2022-01-06 14:37:07.899778 -""" - -from alembic import op -from sqlalchemy.dialects.mysql import INTEGER, TINYINT - -# revision identifiers, used by Alembic. -revision = "be7adae47ac3" -down_revision = "56e2ce8e2ffa" -branch_labels = None -depends_on = None - -# Upgrade to INTEGER(unsigned=True); supports 4-byte values. -UPGRADE_T = INTEGER(unsigned=True) - -# Downgrade to TINYINT(3, unsigned=True); supports 1-byte values. -DOWNGRADE_T = TINYINT(3, unsigned=True) - - -def upgrade(): - """Upgrade 'Yes', 'No', 'Abstain' and 'ActiveTUs' to unsigned INTEGER.""" - op.alter_column("TU_VoteInfo", "Yes", type_=UPGRADE_T) - op.alter_column("TU_VoteInfo", "No", type_=UPGRADE_T) - op.alter_column("TU_VoteInfo", "Abstain", type_=UPGRADE_T) - op.alter_column("TU_VoteInfo", "ActiveTUs", type_=UPGRADE_T) - - -def downgrade(): - """ - Downgrade 'Yes', 'No', 'Abstain' and 'ActiveTUs' to unsigned TINYINT. - """ - op.alter_column("TU_VoteInfo", "ActiveTUs", type_=DOWNGRADE_T) - op.alter_column("TU_VoteInfo", "Abstain", type_=DOWNGRADE_T) - op.alter_column("TU_VoteInfo", "No", type_=DOWNGRADE_T) - op.alter_column("TU_VoteInfo", "Yes", type_=DOWNGRADE_T) diff --git a/migrations/versions/c5a6a9b661a0_add_index_on_packagebases_popularity_.py b/migrations/versions/c5a6a9b661a0_add_index_on_packagebases_popularity_.py deleted file mode 100644 index 3cc146ee..00000000 --- a/migrations/versions/c5a6a9b661a0_add_index_on_packagebases_popularity_.py +++ /dev/null @@ -1,25 +0,0 @@ -"""Add index on PackageBases.Popularity and .Name - -Revision ID: c5a6a9b661a0 -Revises: e4e49ffce091 -Create Date: 2023-07-02 13:46:52.522146 - -""" - -from alembic import op - -# revision identifiers, used by Alembic. -revision = "c5a6a9b661a0" -down_revision = "e4e49ffce091" -branch_labels = None -depends_on = None - - -def upgrade(): - op.create_index( - "BasesPopularityName", "PackageBases", ["Popularity", "Name"], unique=False - ) - - -def downgrade(): - op.drop_index("BasesPopularityName", table_name="PackageBases") diff --git a/migrations/versions/d64e5571bc8d_fix_pkgvote_votets.py b/migrations/versions/d64e5571bc8d_fix_pkgvote_votets.py deleted file mode 100644 index 0fda746b..00000000 --- a/migrations/versions/d64e5571bc8d_fix_pkgvote_votets.py +++ /dev/null @@ -1,37 +0,0 @@ -"""fix pkgvote votets - -Revision ID: d64e5571bc8d -Revises: be7adae47ac3 -Create Date: 2022-02-18 12:47:05.322766 - -""" - -from datetime import datetime - -import sqlalchemy as sa -from alembic import op - -from aurweb import db -from aurweb.models import PackageVote - -# revision identifiers, used by Alembic. -revision = "d64e5571bc8d" -down_revision = "be7adae47ac3" -branch_labels = None -depends_on = None - -table = PackageVote.__tablename__ -column = "VoteTS" -epoch = datetime(1970, 1, 1) - - -def upgrade(): - with db.begin(): - records = db.query(PackageVote).filter(PackageVote.VoteTS.is_(None)) - for record in records: - record.VoteTS = epoch.timestamp() - op.alter_column(table, column, existing_type=sa.BIGINT(), nullable=False) - - -def downgrade(): - op.alter_column(table, column, existing_type=sa.BIGINT(), nullable=True) diff --git a/migrations/versions/e4e49ffce091_add_hidedeletedcomments_to_user.py b/migrations/versions/e4e49ffce091_add_hidedeletedcomments_to_user.py deleted file mode 100644 index 6637cc0d..00000000 --- a/migrations/versions/e4e49ffce091_add_hidedeletedcomments_to_user.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Add HideDeletedComments to User - -Revision ID: e4e49ffce091 -Revises: 9e3158957fd7 -Create Date: 2023-04-19 23:24:25.854874 - -""" - -from alembic import op -from sqlalchemy.exc import OperationalError - -from aurweb.models.user import User - -# revision identifiers, used by Alembic. -revision = "e4e49ffce091" -down_revision = "9e3158957fd7" -branch_labels = None -depends_on = None - -table = User.__table__ - - -def upgrade(): - try: - op.add_column(table.name, table.c.HideDeletedComments) - except OperationalError: - print( - f"Column HideDeletedComments already exists in '{table.name}'," - f" skipping migration." - ) - - -def downgrade(): - op.drop_column(table.name, "HideDeletedComments") diff --git a/migrations/versions/ef39fcd6e1cd_add_sso_account_id_in_table_users.py b/migrations/versions/ef39fcd6e1cd_add_sso_account_id_in_table_users.py deleted file mode 100644 index 260c903b..00000000 --- a/migrations/versions/ef39fcd6e1cd_add_sso_account_id_in_table_users.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Add SSO account ID in table Users - -Revision ID: ef39fcd6e1cd -Revises: f47cad5d6d03 -Create Date: 2020-06-08 10:04:13.898617 - -""" - -import sqlalchemy as sa -from alembic import op -from sqlalchemy.engine.reflection import Inspector - -# revision identifiers, used by Alembic. -revision = "ef39fcd6e1cd" -down_revision = "f47cad5d6d03" -branch_labels = None -depends_on = None - - -def table_has_column(table, column_name): - for element in Inspector.from_engine(op.get_bind()).get_columns(table): - if element.get("name") == column_name: - return True - return False - - -def upgrade(): - if not table_has_column("Users", "SSOAccountID"): - op.add_column( - "Users", sa.Column("SSOAccountID", sa.String(length=255), nullable=True) - ) - op.create_unique_constraint(None, "Users", ["SSOAccountID"]) - - -def downgrade(): - if table_has_column("Users", "SSOAccountID"): - op.drop_constraint("SSOAccountID", "Users", type_="unique") - op.drop_column("Users", "SSOAccountID") diff --git a/migrations/versions/f47cad5d6d03_initial_revision.py b/migrations/versions/f47cad5d6d03_initial_revision.py deleted file mode 100644 index a8a007f3..00000000 --- a/migrations/versions/f47cad5d6d03_initial_revision.py +++ /dev/null @@ -1,20 +0,0 @@ -"""initial revision - -Revision ID: f47cad5d6d03 -Create Date: 2020-02-23 13:23:32.331396 - -""" - -# revision identifiers, used by Alembic. -revision = "f47cad5d6d03" -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade(): - pass - - -def downgrade(): - pass diff --git a/po/Makefile b/po/Makefile index 8fd17515..d0ed7418 100644 --- a/po/Makefile +++ b/po/Makefile @@ -37,41 +37,40 @@ LOCALES = ${MOFILES:.mo=} UPDATEPOFILES = ${POFILES:.po=.po-update} -MSGID_BUGS_ADDRESS = https://gitlab.archlinux.org/archlinux/aurweb/-/issues +MSGID_BUGS_ADDRESS = https://bugs.archlinux.org/index.php?project=2 all: ${MOFILES} %.mo: %.po msgfmt --check -o $@ $< -%.po-update: %.po aurweb.pot +%.po-update: %.po aur.pot lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ - msgmerge -U --no-location --lang="$$lang" $< aurweb.pot + msgmerge -U --no-location --lang="$$lang" $< aur.pot -POTFILES-py: - find ../aurweb -type f -name '*.py' -printf '%P\n' | sort >POTFILES-py +POTFILES: + find ../web -type f -name '*.php' -printf '%P\n' | sort >POTFILES -update-pot: POTFILES-py - pkgname=AURWEB; \ - pkgver=`sed -n 's/version\s*=\s*"\(.*\)"/\1/p' ../pyproject.toml`; \ - xgettext --default-domain=aurweb -L python --join-existing \ - --keyword=translate \ +update-pot: POTFILES + pkgname=AUR; \ + pkgver=`sed -n 's/.*"AURWEB_VERSION", "\(.*\)".*/\1/p' ../web/lib/version.inc.php`; \ + xgettext --default-domain=aur -L php --keyword=__ --keyword=_n:1,2 \ --add-location=file --add-comments=TRANSLATORS: \ --package-name="$$pkgname" --package-version="$$pkgver" \ --msgid-bugs-address='${MSGID_BUGS_ADDRESS}' \ - --directory ../aurweb --files-from POTFILES-py -o aurweb.pot + --directory ../web --files-from POTFILES -o aur.pot update-po: ${MAKE} ${UPDATEPOFILES} clean: - rm -f *.mo *.po\~ POTFILES-py + rm -f *.mo *.po\~ POTFILES install: all for l in ${LOCALES}; do mkdir -p ${DESTDIR}${PREFIX}/$$l/LC_MESSAGES/; done - for l in ${LOCALES}; do cp $$l.mo ${DESTDIR}${PREFIX}/$$l/LC_MESSAGES/aurweb.mo; done + for l in ${LOCALES}; do cp $$l.mo ${DESTDIR}${PREFIX}/$$l/LC_MESSAGES/aur.mo; done uninstall: for l in ${LOCALES}; do rm -rf ${DESTDIR}${PREFIX}/$$l/LC_MESSAGES/; done -.PHONY: all update-pot update-po clean install uninstall POTFILES-py +.PHONY: all update-pot update-po clean install uninstall POTFILES diff --git a/po/ar.po b/po/ar.po index 3bd2838c..82f321d4 100644 --- a/po/ar.po +++ b/po/ar.po @@ -1,296 +1,193 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. +# This file is distributed under the same license as the PACKAGE package. # # Translators: -# safa1996alfulaij , 2015 -# صفا الفليج , 2015-2016 +# صفا الفليج , 2015 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: صفا الفليج , 2015-2016\n" -"Language-Team: Arabic (http://app.transifex.com/lfleischer/aurweb/language/ar/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-18 10:15+0200\n" +"PO-Revision-Date: 2015-06-24 20:42+0000\n" +"Last-Translator: صفا الفليج \n" +"Language-Team: Arabic (http://www.transifex.com/projects/p/aur/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: html/404.php msgid "Page Not Found" msgstr "لم يُعثر على الصّفحة" -#: html/404.php msgid "Sorry, the page you've requested does not exist." -msgstr "آسفون، الصّفحة التي طلبتها غير موجودة." +msgstr "آسفون، الصّفحة الّتي طلبت غير موجودة." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "ملاحظة" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php msgid "Service Unavailable" msgstr "الخدمة غير متوفّرة" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." msgstr "لا تفزع! عُطّل الموقع لأعمال الصّيانة. سنعود قريبًا." -#: html/account.php msgid "Account" msgstr "حساب" -#: html/account.php template/header.php msgid "Accounts" msgstr "الحسابات" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "ليس مسموحًا لك بالنّفاذ إلى هنا." -#: html/account.php msgid "Could not retrieve information for the specified user." -msgstr "تعذّر جلب معلومات المستخدم المحدّد." +msgstr "تعذّر استرجاع معلومات المستخدم المحدّد." -#: html/account.php msgid "You do not have permission to edit this account." -msgstr "لا صلاحيّات لديك لتحرير هذا الحساب." +msgstr "لا صلاحيّة لديك لتحرير هذا الحساب." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php msgid "Use this form to search existing accounts." -msgstr "استخدم هذه الاستمارة للبحث عن حسابات موجودة." +msgstr "استخدم هذه الاستمارة للبحث عن الحسابات الموجودة." -#: html/account.php msgid "You must log in to view user information." msgstr "عليك الولوج لعرض معلومات المستخدمين." -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "أضف رأيًا" +msgid "Use this form to create an account." +msgstr "استخدم هذه الاستمارة لإنشاء حساب." + +msgid "Add Proposal" +msgstr "" -#: html/addvote.php msgid "Invalid token for user action." msgstr "" -#: html/addvote.php msgid "Username does not exist." msgstr "اسم المستخدم غير موجود." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "" -#: html/addvote.php msgid "Invalid type." msgstr "النّوع غير صالح." -#: html/addvote.php msgid "Proposal cannot be empty." -msgstr "لا يمكن أن يكون الرّأي فارغًا." +msgstr "" -#: html/addvote.php msgid "New proposal submitted." -msgstr "قُدّم رأي جديد." +msgstr "" -#: html/addvote.php msgid "Submit a proposal to vote on." -msgstr "قدّم رأيًا للتّصويت عليه." +msgstr "" -#: html/addvote.php msgid "Applicant/TU" msgstr "" -#: html/addvote.php msgid "(empty if not applicable)" -msgstr "(فارغ إن لم ينطبق)" +msgstr "" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "النّوع" -#: html/addvote.php -msgid "Addition of a Package Maintainer" +msgid "Addition of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer" +msgid "Removal of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" +msgid "Removal of a TU (undeclared inactivity)" msgstr "" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "" -#: html/addvote.php template/tu_list.php msgid "Proposal" -msgstr "الرّأي" - -#: html/addvote.php -msgid "Submit" -msgstr "قدّم" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "أدر المصينين المشاركين" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "حرّر التّعليق" - -#: html/home.php template/header.php -msgid "Dashboard" msgstr "" -#: html/home.php template/header.php +msgid "Submit" +msgstr "" + +msgid "Manage Co-maintainers" +msgstr "" + msgid "Home" msgstr "الرّئيسيّة" -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "حزمي" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." +msgstr "مرحبًا بك في م‌م‌آ! فضلًا اقرأ %sإرشادات مستخدمي م‌م‌آ%s و%sإرشادات مستخدمي م‌م‌آ الموثوقين (م‌م)%s لمعلومات أكثر." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "ملفّات PKGBUILD التي تساهم بها %sيجب%s أن تتّبع %sمعايير التّحزيم في آرتش%s وإلا فستُحذف!" +msgstr "ملفّات PKGBUILD المساعم بها %sيجب%s أن تتبع %sمعايير التّحزيم في آرتش%s وإلا ستُحذف!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "تذكّر أن تصوّت لحزمك المفضّلة!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "قد تكون بعض الحزم متوفّرة كثنائيّات في مستودع المجتمع [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "قد تكون بعض الحزم متوفّرة كثنائيّات في مستودع المجتمع [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "إخلاء مسؤوليّة" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "حزم م‌م‌آ هي حزم قدّمها المستخدمين. أيّ استخدام للملفّات يكون على مسؤوليّتك الخاصّة." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "الحزم غير المدعومة محتوًى قدّمه المستخدمون. أيّ استخدام للملفّات الموفّرة هي على مسؤوليّتك الخاصّة." -#: html/home.php msgid "Learn more..." -msgstr "اطّلع على المزيد..." +msgstr "تعلّم أكثر..." -#: html/home.php msgid "Support" msgstr "الدّعم" -#: html/home.php msgid "Package Requests" msgstr "طلبات الحزم" -#: html/home.php #, php-format msgid "" "There are three types of requests that can be filed in the %sPackage " "Actions%s box on the package details page:" msgstr "هناك ثلاث أنواع من الحزم التي يمكن ملؤها في مربّع %sإجراءات الحزم%s في صفحة تفاصيل الحزمة:" -#: html/home.php msgid "Orphan Request" msgstr "طلب \"يتيمة\"" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." msgstr "اطلب أن يُتبرّأ من الحزمة، مثلًا عندما يكون مصينها غير نشط وقد عُلّمت الحزمة كقديمة لوقت طويل." -#: html/home.php msgid "Deletion Request" msgstr "طلب الحذف" -#: html/home.php msgid "" "Request a package to be removed from the Arch User Repository. Please do not" " use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" +"the package maintainer and file orphan request if necessary." +msgstr "اطلب أن تُزال الحزمة من مستودع مستخدمي آرتش. فضلًا لا تستخدم هذه إن كانت الحزمة معطوبة ويمكن إصلاحها بسهولة. بدل ذلك تواصل مع مصين الحزمة وأبلغ عن طلب \"يتيمة\" إن تطلّب الأمر." -#: html/home.php msgid "Merge Request" msgstr "طلب الدّمج" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "اطلب دمج حزمة مع أخرى. يمكن استخدامه عندما تحتاج حزمة ما إعادة تسمية أو استبدال بحزمة تقسيميّة." +msgstr "اطل دمج حزمة مع أخرى. يمكن استخدامه عندما تحتاج حزمة ما إعادة تسمية أو استبدال بحزمة تقسيميّة." -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." msgstr "إن أردت النّقاش حول طلب ما، يمكنك استخدام قائمة %saur-requests%s البريديّة. لكن فضلًا لا تستخدمها للإبلاغ عن الطلبات." -#: html/home.php msgid "Submitting Packages" msgstr "تقديم الحزم" -#: html/home.php #, php-format msgid "" "Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" @@ -298,595 +195,387 @@ msgid "" "details." msgstr "غِت Git عبر SSH يُستخدم الآن لتقديم الحزم إلى مستودع مستخدمي آرتش (م‌م‌آ). طالع قسم %sتقديم الحزم%s في صفحة مستودع مستخدمي آرتش في ويكي آرتش لتفاصيل أكثر." -#: html/home.php msgid "The following SSH fingerprints are used for the AUR:" msgstr "بصمات SSH الآتية مستخدمة في م‌م‌آ:" -#: html/home.php msgid "Discussion" msgstr "النّقاش" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" +"General discussion regarding the Arch User Repository (AUR) and Trusted User" +" structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." +msgstr "النّقاشات العاّمة حول مستودع مستخدمي آرتش (م‌م‌آ) وبنية المستخدمين الموثوقين تكون في %saur-general%s. للنّقاشات المتعلّقة لتطوير واجهة وِب م‌م‌آ، استخدم قائمة %saur-dev%s البريديّة." -#: html/home.php msgid "Bug Reporting" msgstr "الإبلاغ عن العلل" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." +msgstr "إن وجدت علّة في واجهة وِب م‌م‌آ، فضلًا املأ تقريرًا بها في %sمتعقّب العلل%s. استخدم المتعقّب للإبلاغ عن العلل في م‌م‌آ %sفقط%s. للإبلاغ عن علل الحزم راسل مديرها أو اترك تعليقًا في صفحة الحزمة المناسبة." -#: html/home.php msgid "Package Search" msgstr "ابحث عن حزمة" -#: html/index.php msgid "Adopt" -msgstr "تبنّ" +msgstr "" -#: html/index.php msgid "Vote" -msgstr "صوّت" +msgstr "" -#: html/index.php msgid "UnVote" -msgstr "أزل التّصويت" +msgstr "" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" -msgstr "الإخطار" +msgstr "" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" -msgstr "أزل الإخطار" +msgstr "" + +msgid "Flag" +msgstr "" -#: html/index.php msgid "UnFlag" -msgstr "أزل التّعليم" +msgstr "" -#: html/login.php template/header.php msgid "Login" msgstr "لِج" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "والج كَـ: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "اخرج" -#: html/login.php msgid "Enter login credentials" msgstr "أدخل بيانات الولوج" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "اسم المستخدم" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "كلمة المرور" -#: html/login.php msgid "Remember me" msgstr "تذكّرني" -#: html/login.php msgid "Forgot Password" msgstr "نسيت كلمة المرور" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." msgstr "ولوج HTTP معطّل. فضلًا %sبدّل إلى HTTPs%s إن أردت الولوج." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "معايير البحث" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "الحزم" -#: html/packages.php msgid "Error trying to retrieve package details." -msgstr "خطأ في محاولة جلب تفاصيل الحزمة." +msgstr "خطأ في محاولة استرجاع تفاصيل الحزمة." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "أحد الحقول المطلوبة ناقصة." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "حقلا كلمة المرور لا يتطابقان." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "يجب أن تكون كلمة مرورك بطول %s محارف على الأقل." -#: html/passreset.php msgid "Invalid e-mail." msgstr "بريد إلكترونيّ غير صالح." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "قُدّم طلب تصفير كلمة مرور الحساب %s المرتبط بعنوان بريدك الإلكتروني. إن رغبت بتصغير كلمة مرورك اتبع الوصلة أدناه، وإلّا تجاهل هذه الرّسالة ولن يحدث شيء." + msgid "Password Reset" msgstr "صفّر كلمة المرور" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "افحص بريدك الإلكترونيّ لوصلة التّأكيد." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "صُفّرت كلمة مرورك بنجاح." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" +msgid "Confirm your e-mail address:" +msgstr "أكّد عنوان بريدك الإلكترونيّ:" -#: html/passreset.php msgid "Enter your new password:" msgstr "أدخل كلمة مرورك الجديدة:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "أكّد كلمة مرورك الجديدة:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "تابع" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" +"If you have forgotten the e-mail address you used to register, please send a" +" message to the %saur-general%s mailing list." +msgstr "إن نسيت عنوان البريد الإلكترونيّ الذي استخدمته للتّسجيل، فضلًا أرسل رسالة إلى قائمة %saur-general%s البريديّة." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "أدخل عنوان بريدك الإلكترونيّ:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "لم يُتنازل عن الحزم المحدّدة، افحص مربع تأشير التّأكيد." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "تعذّر العثور على الحزمة لدمج التّصويتات والتّعليقات معها." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "لا يمكن الدّمج بلا أساس الحزمة نفسه." -#: html/pkgbase.php msgid "" "The selected packages have not been deleted, check the confirmation " "checkbox." -msgstr "لم تُحذف الحزم المحدّدة، افحص مربع تأشير التّأكيد." +msgstr "" -#: html/pkgdel.php msgid "Package Deletion" msgstr "احذف حزمة" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "احذف الحزمة" +#, php-format +msgid "Delete Package: %s" +msgstr "احذف الحزمة: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " msgstr "استخدم هذه الاستمارة لحذف أساس الحزمة %s%s%s والحزم الآتية من م‌م‌آ:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "حذف الحزم نهائيّ." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "حدّد مربع تأشير لتأكيد الإجراء." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "أكّد حذف الحزمة" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "احذف" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "يمكن فقط للمستخدمين الموثوقين والمطوّرين حذف الحزم." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "تنازل عن حزمة" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "تنازل عن الحزمة: %s" + #, php-format msgid "" "Use this form to disown the package base %s%s%s which includes the following" " packages: " msgstr "استخدم هذه الاستمارة للتّنازل عن أساس الحزمة %s%s%s المتضمّنة الحزم الآتية:" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "بتأشير مربع التّأشير، أنت تؤكّد على تنازلك عن الحزمة ونقل ملكيّتها إلى %s%s%s." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "بتأشير مربع التّأشير، أنت تؤكّد على تنازلك عن الحزمة." +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "أكّد التّنازل عن الحزمة" -#: html/pkgdisown.php msgid "Disown" msgstr "تنازل" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" +msgid "Only Trusted Users and Developers can disown packages." +msgstr "يمكن فقط للمستخدمين الموثوقين والمطوّرين التّنازل عن الحزم." -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "علّم الحزمة كقديمة" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "استخدم هذه الاستمارة لتعليم أساس الحزمة %s%s%s والحزم الآتية كقديمة:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "من فضلك %sلا%s تستخدم هذه الاستمارة للتّبليع عن العلل. علّق على الحزم بدل ذلك." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "التّعليقات" - -#: html/pkgflag.php -msgid "Flag" -msgstr "علّم" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "يمكن فقط للمستخدمين المسجّلين تعليم الحزم كقديمة." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "ادمج حزمة" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "ادمج الحزم" +#, php-format +msgid "Merge Package: %s" +msgstr "ادمج الحزمة: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "استخدم هذه الاستمارة لدمج أساس الحزمة %s%s%s مع حزمة أخرى." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "ستُحذف الحزم الآتية:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "بمجرّد دمج الحزمة لا يمكن عكس الإجراء." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "أدخل اسم الحزمة التي ترغب بدمج الحزمة معها." -#: html/pkgmerge.php msgid "Merge into:" msgstr "ادمج مع:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "أكّد دمج الحزم" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" -msgstr "دمج" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." msgstr "" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "يمكن فقط للمستخدمين الموثوقين والمطوّرين دمج الحزم." + +msgid "File Request" msgstr "" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "أغلق الطّلب" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "الأولى" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "السّابقة" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "التّالية" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "الأخيرة" -#: html/pkgreq.php template/header.php msgid "Requests" -msgstr "الطّلبات" - -#: html/register.php template/header.php -msgid "Register" -msgstr "سجّل" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "استخدم هذه الاستمارة لإنشاء حساب." - -#: html/tos.php -msgid "Terms of Service" msgstr "" -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" +msgid "Trusted User" +msgstr "مستخدم موثوق" -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." -msgstr "تعذّر استرجاع تفاصيل الرّأي." - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "أُغلق التّصويت على هذا الرّأي." - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." msgstr "" -#: html/tu.php +msgid "Voting is closed for this proposal." +msgstr "" + +msgid "Only Trusted Users are allowed to vote." +msgstr "فقط المستخدمين الموثوقين مسموح لهم بالتّصويت." + msgid "You cannot vote in an proposal about you." -msgstr "لا يمكنك التّصويت على رأي عنك." +msgstr "" -#: html/tu.php msgid "You've already voted for this proposal." -msgstr "لقد صوّتّ على هذا الرّأي بالفعل." +msgstr "" -#: html/tu.php msgid "Vote ID not valid." msgstr "معرّف التّصويت غير صالح." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "التّصويتات الحاليّة" -#: html/tu.php msgid "Past Votes" msgstr "التّصويتات الماضية" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "المصوّتون" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." msgstr "تسجيل الحسابات معطّل حاليًّا لعنوان IP خاصّتك، لربمّا بسبب هجماتك السّخاميّة المتكرّرة. آسفون لإزاعجك" -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "معرّف المستخدم ناقص" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "اسم المستخدم غير صالح." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "يجب أن يكون بطول بين %s و %s محرفًا" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "يجب أن يبدأ وينتهي بحرف أو رقم." -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "يمكنه احتواء نقطة واحدة، أو شرطة سفليّة واحدة أو شرطة واحدة." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "عنوان البريد الإلكترونيّ غير صالح." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "بصمة مفتاح PGP غير صالحة." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "مفتاح SSH العموميّ غير صالح." -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "لا يمكن زيادة صلاحيّات الحساب." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "اللغة غير مدعومة حاليًّا." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "اسم المستخدم %s%s%s مستخدم بالفعل." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "العنوان %s%s%s مستخدم بالفعل." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "مفتاح SSH العموميّ %s%s%s مستخدم بالفعل." -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "فشلت محاولة إنشاء الحساب %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "أُنشئ الحساب %s%s%s بنجاح." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "مفتاح تصفير كلمة المرور أُرسل إلى عنوان بريدك الإلكترونيّ." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "انقر وصلة الولوج أعلاه لاستخدام حسابك." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "مرحبًا بك في %s! لتعيين كلمة مرور أوليّة لحسابك الجديد، فضلًأ انقر الوصلة أدناه. إن لم تعمل الوصلة جرّب النّسخ واللصق في متصفّحك." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "مفتاح تصفير كلمة المرور أُرسل إلى عنوان بريدك الإلكترونيّ." + #, php-format msgid "No changes were made to the account, %s%s%s." -msgstr "لم تجري أيّ تغييرات على الحساب %s%s%s." +msgstr "لم تتمّ أيّ تغييرات على الحساب %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "عُدّل الحساب %s%s%s بنجاح." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." msgstr "استمارة الولوج معطّلة حاليًّا لعنوان IP خاصّتك، لربمّا بسبب هجماتك السّخاميّة المتكرّرة. آسفون لإزاعجك." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "عُلّق الحساب" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " @@ -894,1003 +583,345 @@ msgid "" "please request a reset key on the %sPassword Reset%s page." msgstr "لقد صُفّرت كلمة مرورك. إن أنشئت حسابًا جديدًا للتّوّ، فضلًا استخدم الوصلة من الريد الإلكتروني التّأكيديّ لتعيين كلمة مرور أوّليّة. وإلّا، فضلًا اطلب مفتاح تصفير من صفحة %sصفّر كلمة المرور%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "اسم مستخدم أو كلمة مرور سيئّة." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "حدث خطأ أثناء توليد جلسة مستخدم." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." -msgstr "البريد الإلكترونيّ وتجميعة مفاتيح التّصفير غير صالحة." +msgstr "" -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "بلا" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "View account information for %s" msgstr "اعرض معلومات حساب %s" -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "معرّف أساس الحزمة أو اسمه ناقص." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "ليس مسموحًا لك بتحرير هذا التّعليق." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "التّعليق غير موجود." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "لا يمكن أن يكون التّعليق فارغًا." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "أُضيف التّعليق" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "عليك الولوج قبل تحرير معلومات الحزم." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "معرّف التّعليق ناقص." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "لا يمكن تثبيت أكثر من 5 تعليقات." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "ليس مسموحًا لك بتثبيت هذا التّعليق." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "ليس مسموحًا لك بفكّ تثبيت هذا التّعليق." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "ثّبّت التّعليق." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "فُكّ تثبيت التعليق." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "خطأ في استرجاع تفاصيل الحزمة." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "تعذّر العثور على تفاصيل الحزمة." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "عليك الولوج قبل تعليم الحزم." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "لم تحدّد أيّ حزم لتعليمها." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "لم تعلّم الحزم المحدّدة، فضلًا أدخل تعليقًا." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "عُلّمت الحزم المحدّدة كقديمة." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "عليك الولوج قبل إزالة تعليم الحزم." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "لم تحدّد أيّ حزم لإزالة تعليمها." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." -msgstr "أزثيل تعليم الحزم المحدّدة." +msgstr "أُزيل تعليم الحزم المحدّدة." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "لا صلاحيّة لديك لحذف الحزم." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "لم تحدّد أيّ حزم لحذفها." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "حُذفت الحزم المحدّدة." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "عليك الولوج قبل تبنّي الحزم." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "عليك الولوج قبل التّنازل عن الحزم." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "لم تحدّد أيّ حزم لتبنّيها." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "لم تحدّد أيّ حزم للتّنازل عنها." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." -msgstr "تُبنّيت الحزم المحدّدة." +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." -msgstr "تُنوزل عن الحزم المحدّدة." +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "عليك الولوج قبل التّصويت للحزم." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "عليك الولوج قبل إزالة التصّويت للحزم." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "لم تحدّد أيّ حزم للتّصويت لها." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "أُزيلت تصويتاتك من الحزم المحدّدة." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." -msgstr "أُدليت تصويتاتك على الحزم المحدّدة." +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "تعذّرت الإضافة إلى قائمة الإخطارات." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." -msgstr "أُضفت إلى قائمة إخطار التّعليقات لِـ %s." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." -msgstr "أُزلت من قائمة إخطار التّعليقات لِـ %s." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" +msgid "You must be logged in before you can edit package information." +msgstr "عليك الولوج قبل تحرير معلومات الحزم." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "ليس مسموحًا لك بحذف هذا التّعليق." +msgid "Missing comment ID." +msgstr "معرّف التّعليق ناقص." -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "حُذف التّعليق." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "حُرّر التّعليق." +msgid "You are not allowed to delete this comment." +msgstr "ليس مسموحًا لك بحذف هذا التّعليق." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to edit the keywords of this package base." msgstr "ليس مسموحًا لك بتحرير كلمات أساس الحزمة المفتاحيّة." -#: lib/pkgbasefuncs.inc.php msgid "The package base keywords have been updated." msgstr "حُدّثت كلمات أساس الحزمة المفتاحيّة." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "ليس مسموحًا لك بإدارة مصيني أساس الحزمة هذا المشاركين." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "اسم مستخدم غير صالح: %s" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "حُدّث مصيني أساس الحزمة المشاركين." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "اعرض تفاصيل حزمة" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "تطلب %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." -msgstr "عليك الولوج لفتح طلبات حزم." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "اسم غير صالح: فقط الأحرف بالحالة الصغيرة مسموح بها." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "يجب ألّا يكون حقل التّعليق فارغًا." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "نوع الطّلب غير صالح." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "أُضيف الطّلب بنجاح." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "سبب غير صالح." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "يمكن فقط للمستخدمين الموثوقين والمطوّرين إغلاق الطّلبات." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "ُأُغلق الطّلب بنجاح." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "يمكنك استخدام هذه الاستمارة لحذف حساب م‌م‌آ هذا %s نهائيًّا." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sتحذير%s: هذا إجراء لا عودة فيه." -#: template/account_delete.php msgid "Confirm deletion" msgstr "أكّد الحذف" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "اسم المستخدم" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "نوع الحساب" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" -msgstr "مستخدم" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "مطوّر" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php +msgid "Developer" +msgstr "" + +msgid "Trusted User & Developer" +msgstr "" + msgid "Email Address" msgstr "البريد الإلكترونيّ" -#: template/account_details.php -msgid "hidden" -msgstr "مخفيّ" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "الاسم الحقيقيّ" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "الرّئيسيّة" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "اسم آي‌آر‌سي المستعار" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "بصمة مفتاح PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" -msgstr "الحالة" +msgstr "" -#: template/account_details.php msgid "Inactive since" msgstr "غير نشط منذ" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "نشط" -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "مجهول" - -#: template/account_details.php msgid "Last Login" msgstr "آخر ولوج" -#: template/account_details.php msgid "Never" msgstr "أبدًا" -#: template/account_details.php msgid "View this user's packages" msgstr "اعرض ملفّ هذا المستخدم الشخصيّ" -#: template/account_details.php msgid "Edit this user's account" msgstr "حرّر حساب هذا المستخدم" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "انقر %sهنا%s إن أردت حذف هذا الحساب نهائيًّا." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" -msgstr "مطلوب" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." msgstr "" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "مستخدم عاديّ" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "مستخدم موثوق" + msgid "Account Suspended" msgstr "حساب معلّق" -#: template/account_edit_form.php msgid "Inactive" msgstr "غير نشط" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "فضلًا تأكّد من إدخال البريد الإلكترونيّ الصّحيح، وإلّا فسيُقفل الحساب." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "أخفِ عنوان البريد الإلكترونيّ" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "اللغة" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "أعد كتابة كلمة المرور" -#: template/account_edit_form.php +msgid "Language" +msgstr "اللغة" + msgid "" "The following information is only required if you want to submit packages to" " the Arch User Repository." msgstr "المعلومات الآتية مطلوبة فقط إن أردت تقديم حزم إلى مستودع مستخدمي آرتش." -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "مفتاح SSH العموميّ" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "إعدادات الإخطارات" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "أخطرني بالتّعليقات الجديدة" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "أخطرني بتحديثات الحزم" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "أخطرني بتغيير المُلّاك" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "حدّث" -#: template/account_edit_form.php msgid "Create" msgstr "أنشئ" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "صفّر" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "لا نتائج طابقت معايير بحثك." -#: template/account_search_results.php msgid "Edit Account" msgstr "حرّر الحساب" -#: template/account_search_results.php msgid "Suspended" msgstr "معلّق" -#: template/account_search_results.php msgid "Edit" msgstr "حرّر" -#: template/account_search_results.php msgid "Less" msgstr "أقلّ" -#: template/account_search_results.php msgid "More" msgstr "أكثر" -#: template/account_search_results.php msgid "No more results to display." msgstr "لا نتائج أخرى لعرضها." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "استخدم هذه الاستمارة لإضافة مصينين مشاركين لِـ %s%s%s (اسم في كلّ سطر):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" msgstr "المستخدمون" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "احفظ" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "تعليق التّعليم كقديمة: %s" +msgid "My Packages" +msgstr "حزمي" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "علّم %s%s%s الحزمة %s%s%s بقديمة في %s%s%s وذلك للأسباب الآتية:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "لم تُعلّم الحزمة %s%s%s كقديمة." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "عُد إلى التّفاصيل" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "الحقوق محفوظة %s 2004-%d فريق تطوير aurweb." - -#: template/header.php msgid " My Account" msgstr "حسابي" -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "إجراءات الحزمة" +msgid "Register" +msgstr "سجّل" -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "اعرض PKGBUILD" +msgid "unknown" +msgstr "" -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "اعرض التّغييرات" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "نزّل لقطة شاشة" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "ابحث في الويكي" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "معلّمة كقديمة (%s)" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "علّم الحزمة كقديمة" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "أزل تعليم الحزمة" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "أزل التّصويت" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "صوّت لهذه الحزمة" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "عطّل الإخطارات" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "فعّل الإخطارات" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "أدر المصينين المشاركين" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "لا طلبات منتظرة" -msgstr[1] "طلب واحد منتظر" -msgstr[2] "طلبان منتظران" -msgstr[3] "%d طلبات منتظرة" -msgstr[4] "%d طلبًا منتظرًا" -msgstr[5] "%d طلب منتظر" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "تبنّ الحزمة" - -#: template/pkgbase_details.php msgid "Package Base Details" msgstr "تفاصيل أساس الحزمة" -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "عنوان غِت للاستنساخ" +msgid "Package Actions" +msgstr "إجراءات الحزمة" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "للقراءة فقط" +msgid "View PKGBUILD" +msgstr "اعرض PKGBUILD" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" +msgid "View Changes" +msgstr "اعرض التّغييرات" + +msgid "Download snapshot" +msgstr "نزّل لقطة شاشة" + +msgid "Search wiki" +msgstr "ابحث في الويكي" + +msgid "Flagged out-of-date" +msgstr "معلّمة كقديمة" + +msgid "Flag package out-of-date" +msgstr "علّم الحزمة كقديمة" + +msgid "Unflag package" +msgstr "أزل تعليم الحزمة" + +msgid "Remove vote" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "الكلمات المفتاحيّة" +msgid "Vote for this package" +msgstr "صوّت لهذه الحزمة" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "المقدّم" +msgid "Disable notifications" +msgstr "عطّل الإخطارات" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "المصين" +msgid "Notify of new comments" +msgstr "أخطرني بالتّعليقات الجديدة" -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "آخر محزّم" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "التّصويتات" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "الشّعبيّة" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "أول تقديم" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "آخر تحديث" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "حرّر تعليق: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "أضف تعليقًا" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." +msgid "Manage Co-Maintainers" msgstr "" -#: template/pkg_comment_form.php #, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "التّعليقات المثبّتة" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "آخر التّعليقات" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "علّق %s على %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "تعليق مجهول على %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "احذف التّعليق" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "ثبّت التّعليق" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "فكّ تثبيت التّعليق" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "تفاصيل الحزمة" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "أساس الحزمة" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "الوصف" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "عنوان المنبع" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "زُر موقع وِبّ" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "الرّخص" - -#: template/pkg_details.php -msgid "Groups" -msgstr "المجموعات" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "تتعارض مع" - -#: template/pkg_details.php -msgid "Provides" -msgstr "توفّر" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "تستبدل" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "الاعتماديّات" - -#: template/pkg_details.php -msgid "Required by" -msgstr "تطلبها" - -#: template/pkg_details.php -msgid "Sources" -msgstr "المصادر" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "استخدم هذه الاستمارة لإغلاق طلب أساس الحزمة %s%s%s." - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "يمكن ترك حقل التّعليقات فارغًا. مع ذلك، من المستحسن إضافة تعليق عند رفض طلب ما." - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "السّبب" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "مقبول" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "مرفوض" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "استخدم هذه الاستمارة لفتح طلب لأساس الحزمة %s%s%s المتضمّنة الحزم الآتية:" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "نوع الطّلب" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "حذف" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "يتيمة" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "ادمج مع" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "لم تُعثر على أيّة طلبات حزم." -msgstr[1] "عُثر على طلب حزمة واحد." -msgstr[2] "عُثر على طلبا حزم." -msgstr[3] "عُثر على %d طلبات حزم." -msgstr[4] "عُثر على %d طلب حزمة." -msgstr[5] "عُثر على %d طلب حزمة." - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "الصّفحة %d من %d." - -#: template/pkgreq_results.php -msgid "Package" -msgstr "الحزم" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "فتحه:" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "التّاريخ" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" +msgid "%d pending request" +msgid_plural "%d pending requests" msgstr[0] "" msgstr[1] "" msgstr[2] "" @@ -1898,499 +929,403 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: template/pkgreq_results.php +msgid "Delete Package" +msgstr "احذف الحزمة" + +msgid "Merge Package" +msgstr "ادمج الحزم" + +msgid "Adopt Package" +msgstr "تبنّ الحزمة" + +msgid "Git Clone URL" +msgstr "عنوان غِت للاستنساخ" + +msgid "read-only" +msgstr "" + +msgid "Keywords" +msgstr "الكلمات المفتاحيّة" + +msgid "Submitter" +msgstr "المقدّم" + +msgid "Maintainer" +msgstr "المصين" + +msgid "Last Packager" +msgstr "آخر محزّم" + +msgid "Votes" +msgstr "التّصويتات" + +msgid "First Submitted" +msgstr "أول تقديم" + +msgid "Last Updated" +msgstr "آخر تحديث" + +msgid "Add Comment" +msgstr "أضف تعليقًا" + +msgid "Comment has been added." +msgstr "أُضيف التّعليق" + +msgid "View all comments" +msgstr "اعرض كلّ التّعليقات" + +msgid "Latest Comments" +msgstr "آخر التّعليقات" + +msgid "Delete comment" +msgstr "احذف التّعليق" + +#, php-format +msgid "Comment by %s" +msgstr "تعليق لِـ %s" + +msgid "Anonymous comment" +msgstr "تعليق مجهول" + +msgid "deleted" +msgstr "محذوف" + +msgid "All comments" +msgstr "كلّ التّعليقات" + +msgid "Package Details" +msgstr "تفاصيل الحزمة" + +msgid "Package Base" +msgstr "أساس الحزمة" + +msgid "Description" +msgstr "الوصف" + +msgid "Upstream URL" +msgstr "عنوان المنبع" + +msgid "Visit the website for" +msgstr "زُر موقع وِب" + +msgid "Licenses" +msgstr "الرّخص" + +msgid "Groups" +msgstr "المجموعات" + +msgid "Conflicts" +msgstr "تتعارض مع" + +msgid "Provides" +msgstr "توفّر" + +msgid "Replaces" +msgstr "تستبدل" + +msgid "Dependencies" +msgstr "الاعتماديّات" + +msgid "Required by" +msgstr "تطلبها" + +msgid "Sources" +msgstr "المصادر" + +#, php-format +msgid "Close Request: %s" +msgstr "" + +#, php-format +msgid "Use this form to close the request for package base %s%s%s." +msgstr "استخدم هذه الاستمارة لإغلاق طلب أساس الحزمة %s%s%s." + +msgid "Note" +msgstr "ملاحظة" + +msgid "" +"The comments field can be left empty. However, it is highly recommended to " +"add a comment when rejecting a request." +msgstr "يمكن ترك حقل التّعليقات فارغًا. مع ذلك، من المستحسن إضافة تعليق عند رفض طلب ما." + +msgid "Reason" +msgstr "السّبب" + +msgid "Accepted" +msgstr "مقبول" + +msgid "Rejected" +msgstr "مرفوض" + +msgid "Comments" +msgstr "التّعليقات" + +#, php-format +msgid "File Request: %s" +msgstr "" + +#, php-format +msgid "" +"Use this form to file a request against package base %s%s%s which includes " +"the following packages:" +msgstr "" + +msgid "Request type" +msgstr "نوع الطّلب" + +msgid "Deletion" +msgstr "حذف" + +msgid "Orphan" +msgstr "يتيمة" + +msgid "Merge into" +msgstr "ادمج مع" + +#, php-format +msgid "%d package request found." +msgid_plural "%d package requests found." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, php-format +msgid "Page %d of %d." +msgstr "الصّفحة %d من %d." + +msgid "Package" +msgstr "الحزم" + +msgid "Filed by" +msgstr "" + +msgid "Date" +msgstr "التّاريخ" + +#, php-format +msgid "~%d days left" +msgstr "" + #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" -msgstr[0] "بقي بضع دقائق" -msgstr[1] "بقي حوالي ساعة" -msgstr[2] "بقي حوالي ساعتين" -msgstr[3] "بقي حوالي %d ساعات" -msgstr[4] "بقي حوالي %d ساعةً" -msgstr[5] "بقي حوالي %d ساعة" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "بقيت أقلّ من ساعة" -#: template/pkgreq_results.php msgid "Accept" msgstr "اقبل" -#: template/pkgreq_results.php msgid "Locked" msgstr "" -#: template/pkgreq_results.php msgid "Close" msgstr "أغلق" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php msgid "Closed" msgstr "مغلق" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "الاسم، الوصف" -#: template/pkg_search_form.php msgid "Name Only" msgstr "الاسم فقط" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "الاسم بالضّبط" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "أساس الحزمة بالضّبط" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php msgid "All" msgstr "الكلّ" -#: template/pkg_search_form.php msgid "Flagged" msgstr "المعلّمة" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "غير المعلّمة" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "الاسم" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "الشّعبيّة" + msgid "Voted" -msgstr "مصوّت عليها" +msgstr "" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "آخر تعديل" +msgid "Age" +msgstr "العمر" -#: template/pkg_search_form.php msgid "Ascending" msgstr "تصاعديًّا" -#: template/pkg_search_form.php msgid "Descending" msgstr "تنازليًّا" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "أدخل معايير البحث" -#: template/pkg_search_form.php msgid "Search by" msgstr "ابحث حسب" -#: template/pkg_search_form.php template/stats/user_table.php msgid "Out of Date" -msgstr "القديمة" +msgstr "قديمة" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "افرز حسب" -#: template/pkg_search_form.php msgid "Sort order" msgstr "ترتيب الفرز" -#: template/pkg_search_form.php msgid "Per page" msgstr "لكلّ صفحة" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "انطلق" -#: template/pkg_search_form.php msgid "Orphans" msgstr "اليتيمة" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "خطأ في استرجاع قائمة الحزم." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "لا حزم طابقت معايير بحثك." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." -msgstr[0] "لم يُعثر على أيّة حزمة." -msgstr[1] "عُثر على حزمة واحدة." -msgstr[2] "عُثر على حزمتين." -msgstr[3] "عُثر على %d حزم." -msgstr[4] "عُثر على %d حزمةً." -msgstr[5] "عُثر على %d حزمة." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: template/pkg_search_results.php msgid "Version" msgstr "الإصدارة" -#: template/pkg_search_results.php -#, php-format msgid "" "Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." +"weighted with a factor of 0.98 per day since its creation." msgstr "" -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "نعم" -#: template/pkg_search_results.php msgid "orphan" msgstr "يتيمة" -#: template/pkg_search_results.php msgid "Actions" msgstr "الإجراءات" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "علّم كقديمة" + msgid "Unflag Out-of-date" msgstr "أزل التّعليم كقديمة" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "تبنّ الحزم" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "تنازل عن الحزم" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "احذف الحزم" -#: template/pkg_search_results.php msgid "Confirm" msgstr "أكّد" -#: template/search_accounts_form.php msgid "Any type" msgstr "أيّ نوع" -#: template/search_accounts_form.php msgid "Search" msgstr "ابحث" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "الإحصائيّات" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "الحزم اليتيمة" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "الحزم المضافة في السّبعة أيّام الماضية" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "الحزم المحدّثة في السّبعة أيّام الماضية" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "الحزم المضافة في السّنة الماضية" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "الحزم التي لم تحدّث مطلقًا" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "المستخدمون المسجّلون" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "المستخدمون الموثوقون" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "التّحديثات الأخيرة" -#: template/stats/updates_table.php -msgid "more" -msgstr "أخرى" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "إحصائيّاتي" -#: template/tu_details.php -msgid "Proposal Details" -msgstr "تفاصيل الرّأي" +msgid "Packages in unsupported" +msgstr "" + +msgid "Proposal Details" +msgstr "" -#: template/tu_details.php msgid "This vote is still running." msgstr "ما زال هذا التّصويت قائمًا." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" -msgstr "قدّمه (في %s) ‏%s" +msgstr "" -#: template/tu_details.php template/tu_list.php msgid "End" -msgstr "النّهاية" +msgstr "" -#: template/tu_details.php msgid "Result" msgstr "النّتيجة" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "لا" -#: template/tu_details.php msgid "Abstain" -msgstr "الامتناع" +msgstr "" -#: template/tu_details.php msgid "Total" msgstr "المجموع" -#: template/tu_details.php msgid "Participation" -msgstr "المشاركة" +msgstr "" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" -msgstr "آخر التّصويتات لِـ م‌م" +msgstr "" -#: template/tu_last_votes_list.php msgid "Last vote" -msgstr "آخر تصويت" +msgstr "" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "لم يُعثر على أيّ نتيجة." -#: template/tu_list.php msgid "Start" -msgstr "البداية" +msgstr "" -#: template/tu_list.php msgid "Back" -msgstr "السّابق" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." msgstr "" diff --git a/po/ast.po b/po/ast.po index 94e1fd91..1a5c86de 100644 --- a/po/ast.po +++ b/po/ast.po @@ -1,895 +1,577 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# enolp , 2014-2015,2017,2020,2022 -# enolp , 2020 -# Ḷḷumex03, 2014 -# Ḷḷumex03, 2014 -# Pablo Lezaeta Reyes , 2014-2015 +# enolp , 2014-2015 +# Ḷḷumex03 , 2014 +# Pablo Roberto Francisco Lezaeta Reyes , 2014-2015 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: enolp , 2014-2015,2017,2020,2022\n" -"Language-Team: Asturian (http://app.transifex.com/lfleischer/aurweb/language/ast/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Asturian (http://www.transifex.com/projects/p/aur/language/" +"ast/)\n" +"Language: ast\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ast\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" -msgstr "Nun s'atopó la páxina" +msgstr "Nun s'alcontró la páxina" -#: html/404.php msgid "Sorry, the page you've requested does not exist." -msgstr "" +msgstr "Perdón, la páxina que pidisti nun esiste." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php msgid "Service Unavailable" -msgstr "El serviciu nun ta disponible" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." msgstr "" -#: html/account.php msgid "Account" -msgstr "" +msgstr "Cuenta" -#: html/account.php template/header.php msgid "Accounts" -msgstr "" +msgstr "Cuentes" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." -msgstr "" +msgstr "Nun tienes permisu p'acceder a esta area." -#: html/account.php msgid "Could not retrieve information for the specified user." -msgstr "Nun se pudo recuperar la información del usuariu especificáu." +msgstr "Nun pudo recibise la información pal usuariu especificáu." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Nun tienes permisu pa editar esta cuenta." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php msgid "Use this form to search existing accounts." -msgstr "" +msgstr "Usa esti formulariu pa guetar cuentes esistentes." -#: html/account.php msgid "You must log in to view user information." -msgstr "" +msgstr "Tienes d'aniciar sesión pa ver la información del usuariu." + +msgid "Use this form to create an account." +msgstr "Usa esti formulariu pa crear una cuenta." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" -msgstr "" +msgstr "Amestar propuesta" -#: html/addvote.php msgid "Invalid token for user action." -msgstr "" +msgstr "Token non válidu pa la aición del usuariu" -#: html/addvote.php msgid "Username does not exist." -msgstr "" +msgstr "El nome d'usuariu nun esiste." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." -msgstr "" +msgstr "%s yá tien la propuesta que cuerre pa ellos." -#: html/addvote.php msgid "Invalid type." -msgstr "" +msgstr "Triba non válida." -#: html/addvote.php msgid "Proposal cannot be empty." -msgstr "" +msgstr "La propuesta nun pue tar balera" -#: html/addvote.php msgid "New proposal submitted." msgstr "" -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "" -#: html/addvote.php msgid "Applicant/TU" -msgstr "" +msgstr "Aplicante/Usuariu d'Enfotu." -#: html/addvote.php msgid "(empty if not applicable)" msgstr "" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" +msgstr "Triba" + +msgid "Addition of a TU" +msgstr "Añedir un Usuariu d'Enfotu" + +msgid "Removal of a TU" msgstr "" -#: html/addvote.php -msgid "Addition of a Package Maintainer" +msgid "Removal of a TU (undeclared inactivity)" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "" -#: html/addvote.php template/tu_list.php msgid "Proposal" -msgstr "" +msgstr "Propuesta" -#: html/addvote.php msgid "Submit" msgstr "" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php msgid "Home" -msgstr "" +msgstr "Aniciu" -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"¡Bienllegáu al AUR! Llei la %sGuía d'usuariu del AUR%s y la %sGuía d'usuariu " +"TU del AUR%s pa más información." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" msgstr "" +"Los PKGBUILD contribuyíos %stienen%s de ser compatibles col %sEstándar de " +"empaquetado de Arch%s d'otra forma van ser esaniciaos." -#: html/home.php msgid "Remember to vote for your favourite packages!" -msgstr "" +msgstr "¡Recuerda votar los tos paquetes favoritos!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" +msgid "Some packages may be provided as binaries in [community]." +msgstr "Dellos paquetes puen apurrise como binarios en [community]." -#: html/home.php msgid "DISCLAIMER" -msgstr "" +msgstr "ACLARATORIA" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." msgstr "" +"Los paquetes ensin sofitu son producíos polos usuarios. Cualesquier usu de " +"los ficheros apurríos ta sol to propiu riesgu." -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php msgid "Support" msgstr "" -#: html/home.php msgid "Package Requests" msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" msgstr "" -#: html/home.php msgid "Orphan Request" msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." msgstr "" -#: html/home.php msgid "Deletion Request" -msgstr "Solicitú de desaniciu" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Solicitú de mecíu" +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php msgid "Discussion" msgstr "Discutiniu" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" -msgstr "" +msgstr "Informe de fallos" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" -msgstr "" +msgstr "Gueta de paquete" -#: html/index.php msgid "Adopt" msgstr "" -#: html/index.php msgid "Vote" msgstr "" -#: html/index.php msgid "UnVote" msgstr "" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "" -#: html/index.php +msgid "Flag" +msgstr "" + msgid "UnFlag" msgstr "" -#: html/login.php template/header.php msgid "Login" -msgstr "" +msgstr "Aniciar sesión" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "" -#: html/login.php template/header.php msgid "Logout" -msgstr "" +msgstr "Zarrar sesión" -#: html/login.php msgid "Enter login credentials" -msgstr "" +msgstr "Introduz les tos credenciales d'aniuciu sesión" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "Nome d'usuariu" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" -msgstr "" +msgstr "Contraseña" -#: html/login.php msgid "Remember me" -msgstr "" +msgstr "Recordáime" -#: html/login.php msgid "Forgot Password" -msgstr "" +msgstr "Escaecí la contraseña" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." msgstr "" -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" -msgstr "" +msgstr "Criteriu de gueta" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" -msgstr "" +msgstr "Paquetes" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "" -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." -msgstr "" +msgstr "Falta un campu riquíu." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "" -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." -msgstr "" +msgstr "La to contraseña tien de tener polo menos %s carauteres." -#: html/passreset.php msgid "Invalid e-mail." +msgstr "Corréu electrónicu non válidu" + +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." msgstr "" -#: html/passreset.php msgid "Password Reset" -msgstr "" +msgstr "Reaniciu de contraseña" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "" -#: html/passreset.php msgid "Your password has been reset successfully." +msgstr "La to contraseña reanicióse con ésitu." + +msgid "Confirm your e-mail address:" msgstr "" -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php msgid "Enter your new password:" -msgstr "" +msgstr "Introduz la to contraseña nueva:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" +"Si escaecisti la dirección de corréu electrónicu utilizasti pa rexistrar, " +"complacer unviar un mensaxe a la llista de orréu %saur-xeneral%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "Introduz la to direción de corréu:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "" -#: html/pkgdel.php msgid "Package Deletion" -msgstr "" +msgstr "Desaniciu de paquete" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" +#, php-format +msgid "Delete Package: %s" +msgstr "Desaniciar paquete: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " msgstr "" +"Usa esti formulariu pa desaniciar el paquete base %s%s%s y los paquetes " +"siguientes d'AUR:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " -msgstr "" +msgstr "El desaniciu d'un paquete ye permanente." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "" -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "" -#: html/pkgdel.php template/account_delete.php msgid "Delete" +msgstr "Desaniciar" + +msgid "Only Trusted Users and Developers can delete packages." msgstr "" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php msgid "Package Merging" msgstr "" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" +#, php-format +msgid "Merge Package: %s" msgstr "" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "" -#: html/pkgmerge.php msgid "The following packages will be deleted: " -msgstr "" +msgstr "Desaniciaránse los paquetes de darréu:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "" -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "" +msgstr "Introduz el nome del paquete al que deseyes amestar" -#: html/pkgmerge.php msgid "Merge into:" msgstr "" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." msgstr "" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" +msgid "File Request" +msgstr "Solicitú de ficheru" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "" +msgstr "Zarar solicitú" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "" -#: html/pkgreq.php template/header.php msgid "Requests" +msgstr "Solicitúes" + +msgid "Trusted User" msgstr "" -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Acepto los términos y les condiciones d'arriba." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." -msgstr "Nun se pudieron recuperar los detalles de la propuesta." +msgstr "" -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "" -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." +msgid "Only Trusted Users are allowed to vote." msgstr "" -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "" -#: html/tu.php msgid "You've already voted for this proposal." msgstr "" -#: html/tu.php msgid "Vote ID not valid." -msgstr "" +msgstr "Nun ye válida la ID del votu." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "" -#: html/tu.php msgid "Past Votes" msgstr "" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." msgstr "" -#: lib/acctfuncs.inc.php msgid "Missing User ID" -msgstr "" +msgstr "Falta la ID d'usuariu" -#: lib/acctfuncs.inc.php msgid "The username is invalid." -msgstr "" +msgstr "El nome d'usuariu nun ye válidu" -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" -msgstr "" +msgstr "Tien de tar ente %s y %s carauteres de llargor" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "" -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." -msgstr "" +msgstr "La direición de corréu nun ye válida." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." -msgstr "" +msgstr "La buelga de la clave PGP nun ye válida." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "" +msgstr "La clave SSH pública nun ye válida." -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." -msgstr "" +msgstr "Nun puen aumentase los permisos de la cuenta." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." -msgstr "" +msgstr "La llingua nun ta anguaño sofitada." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." -msgstr "" +msgstr "El nome d'usuariu, %s%s%s, yá ta n'usu." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." -msgstr "" +msgstr "La direición, %s%s%s, yá ta n'usu." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" +msgstr "La llave pública SSH, %s%s%s, ye yá n'usu." -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." -msgstr "" +msgstr "Fallu intentando crear la cuenta, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." -msgstr "" +msgstr "La cuenta, %s%s%s, creóse con ésitu." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "" -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." -msgstr "" +msgstr "La cuenta, %s%s%s, modificóse con ésitu." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." msgstr "" -#: lib/acctfuncs.inc.php msgid "Account suspended" -msgstr "" +msgstr "Cuenta suspendida" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " @@ -897,1483 +579,743 @@ msgid "" "please request a reset key on the %sPassword Reset%s page." msgstr "" -#: lib/acctfuncs.inc.php msgid "Bad username or password." -msgstr "" +msgstr "Nome d'usuariu o contraseña incorreutos" -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." -msgstr "" +msgstr "Asocedió un fallu intentando xenerar una sesión d'usuariu." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "" -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "El comentariu nun pue tar baleru." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Tienes d'aniciar la sesión enantes d'editar la información del paquete." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Nun se puen fixar más de 5 comentarios." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Nun tienes permisu pa fixar esti comentariu." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Nun tienes permisu pa lliberar esti comentariu." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "" -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." -msgstr "Nun se pudieron atopar los detalles del paquete." +msgstr "Nun pudieron alcontrase los detalles del paquete." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." -msgstr "" +msgstr "Nun esbillesti dengún ficheru pa desaniciar." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." -msgstr "" +msgstr "Desaniciáronse los paquetes esbillaos." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "" -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "" -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." +msgid "You must be logged in before you can edit package information." msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" +msgid "Missing comment ID." +msgstr "Falta la ID del comentariu." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." -msgstr "" +msgstr "El comentariu amestóse." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" +msgid "You are not allowed to delete this comment." +msgstr "Nun tienes permisu pa desaniciar esti comentariu." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" +msgid "Missing category ID." +msgstr "Falta la ID de la estaya." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" +msgid "Invalid category ID." +msgstr "ID d'estaya non válida" + +msgid "You are not allowed to change this package category." +msgstr "Nun tienes permisu pa camudar la estaya d'esti paquete." + +msgid "Package category changed." +msgstr "La estaya'l paquete camudó." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" -msgstr "" +msgstr "Ver detalles de paquetes pa" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." -msgstr "" +msgstr "El campu del comentariu nun tien de tar baleru." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." -msgstr "" +msgstr "Triba de solicitú non válida." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." -msgstr "" +msgstr "Amestada con ésitu la solicitú." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." -msgstr "" +msgstr "Razón non válida." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." -msgstr "" +msgstr "Solicitú zarrada con ésitu." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" +msgstr "Pues usar esti formulariu pa desaniciar la cuenta del AUR %s dafechu." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." -msgstr "" +msgstr "%sAVISU%s: Esta aición nun pue desfacese." -#: template/account_delete.php msgid "Confirm deletion" -msgstr "" +msgstr "Confirmar desaniciu" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" -msgstr "" +msgstr "Triba de cuenta" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" -msgstr "" +msgstr "Usuariu" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" +msgstr "Desendolcador" + +msgid "Trusted User & Developer" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" -msgstr "" +msgstr "Direición de corréu" -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" -msgstr "" +msgstr "Nome real" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" -msgstr "" +msgstr "Alcuñu nel IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" -msgstr "" +msgstr "Buelga de clave PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" -msgstr "" +msgstr "Estáu" -#: template/account_details.php msgid "Inactive since" -msgstr "" +msgstr "Inactivu dende" -#: template/account_details.php template/account_search_results.php msgid "Active" -msgstr "" +msgstr "Activu" -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php msgid "Last Login" msgstr "" -#: template/account_details.php msgid "Never" -msgstr "" +msgstr "Enxamás" -#: template/account_details.php msgid "View this user's packages" msgstr "" -#: template/account_details.php msgid "Edit this user's account" msgstr "" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" +msgstr "Primi %sequí%s si quies desaniciar esta cuenta dafechu." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" -msgstr "" +msgstr "riquíu" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" -msgstr "" +msgstr "Usuariu normal" + +msgid "Trusted user" +msgstr "Usuariu d'Enfotu" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Account Suspended" -msgstr "" +msgstr "Cuenta suspendida" -#: template/account_edit_form.php msgid "Inactive" -msgstr "" +msgstr "Inactivu" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" -msgstr "" +msgstr "Teclexa de nueves la contraseña" + +msgid "Language" +msgstr "Llingua" -#: template/account_edit_form.php msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" +"La información de darréu namái se rique si quies xubir paquetes al AUR." -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "" +msgstr "Clave SSH pública" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" -msgstr "" +msgstr "Anovar" -#: template/account_edit_form.php msgid "Create" -msgstr "" +msgstr "Crear" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" -msgstr "" +msgstr "Reafitar" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "" -#: template/account_search_results.php msgid "Edit Account" -msgstr "" +msgstr "Editar cuenta" -#: template/account_search_results.php msgid "Suspended" -msgstr "" +msgstr "Suspendíu" -#: template/account_search_results.php msgid "Edit" -msgstr "" +msgstr "Editar" -#: template/account_search_results.php msgid "Less" -msgstr "" +msgstr "Menos" -#: template/account_search_results.php msgid "More" -msgstr "" +msgstr "Más" -#: template/account_search_results.php msgid "No more results to display." msgstr "" -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "Alministra comantenedores: %s" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "" +msgstr "Usuarios" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "" +msgstr "Guardar" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" +msgid "My Packages" +msgstr "Los mios paquetes" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php msgid " My Account" -msgstr "" +msgstr "La mio cuenta" + +msgid "Register" +msgstr "Rexistrase" + +msgid "unknown" +msgstr "Desconocíu" + +msgid "Package Base Details" +msgstr "Detalles del paquete base" -#: template/pkgbase_actions.php msgid "Package Actions" -msgstr "" +msgstr "Aiciones de paquete" -#: template/pkgbase_actions.php msgid "View PKGBUILD" -msgstr "" +msgstr "Ver PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "" +msgstr "Ver camudancies" -#: template/pkgbase_actions.php msgid "Download snapshot" -msgstr "" +msgstr "Baxar instantánea" -#: template/pkgbase_actions.php msgid "Search wiki" -msgstr "" +msgstr "Guetar na wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" +msgid "Flagged out-of-date" +msgstr "Marcar como non actualizáu" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" -msgstr "" +msgstr "Marcáu como non actualizáu" -#: template/pkgbase_actions.php msgid "Unflag package" -msgstr "" +msgstr "Quitar marca de non actualizáu" -#: template/pkgbase_actions.php msgid "Remove vote" -msgstr "" +msgstr "Quitar votu" -#: template/pkgbase_actions.php msgid "Vote for this package" -msgstr "" +msgstr "Votar pol paquete" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" +msgid "Notify of new comments" msgstr "" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "" +msgstr "Alministra comantenedores" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "" msgstr[1] "" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "" + +msgid "Merge Package" +msgstr "" + msgid "Adopt Package" msgstr "" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" -msgstr "" +msgstr "URL pa clonar con Git" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" +msgid "Category" +msgstr "Estaya" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" +msgid "Change category" +msgstr "Camudar estaya" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Pallabres clave" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" +#, php-format +msgid "View account information for %s" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php +msgid "Maintainer" +msgstr "Caltenedor" + msgid "Last Packager" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" -msgstr "" +msgstr "Votos" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" -msgstr "" +msgstr "Amestar comentariu" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" +msgid "Comment has been added." +msgstr "Amestóse'l comentariu." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" +msgid "View all comments" +msgstr "Ver tolos comentarios" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php msgid "Latest Comments" -msgstr "" +msgstr "Comentarios caberos" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php msgid "Delete comment" -msgstr "" +msgstr "Desaniciar comentariu" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" +#, php-format +msgid "Comment by %s" +msgstr "Comentáu por %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" +msgid "Anonymous comment" +msgstr "Comentariu anónimu" + +msgid "deleted" +msgstr "desaniciáu" + +msgid "All comments" +msgstr "Tolos comentarios" -#: template/pkg_details.php msgid "Package Details" -msgstr "" +msgstr "Detalles del paquete" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" -msgstr "" +msgstr "Paquete base" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" -msgstr "" +msgstr "Descripción" -#: template/pkg_details.php msgid "Upstream URL" msgstr "" -#: template/pkg_details.php msgid "Visit the website for" msgstr "" -#: template/pkg_details.php msgid "Licenses" -msgstr "" +msgstr "Llicencies" -#: template/pkg_details.php msgid "Groups" -msgstr "" +msgstr "Grupos" -#: template/pkg_details.php msgid "Conflicts" msgstr "" -#: template/pkg_details.php msgid "Provides" -msgstr "" +msgstr "Apurre" -#: template/pkg_details.php msgid "Replaces" -msgstr "" +msgstr "Troca" -#: template/pkg_details.php msgid "Dependencies" -msgstr "" +msgstr "Dependencies" -#: template/pkg_details.php msgid "Required by" -msgstr "" +msgstr "Riquíu por" -#: template/pkg_details.php msgid "Sources" -msgstr "" +msgstr "Fontes" + +#, php-format +msgid "Close Request: %s" +msgstr "Zarrar solicitú: %s" -#: template/pkgreq_close_form.php #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "" +msgstr "Usa esti formulariu pa zarrar la solicitú pal paquete base %s%s%s." + +msgid "Note" +msgstr "Nota" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." msgstr "" +"El campu de comentarios pue dexase baleru, Por embargu, encamiéntase amestar " +"un comentariu al refugar una solicitú." -#: template/pkgreq_close_form.php msgid "Reason" -msgstr "" +msgstr "Razón" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" -msgstr "" +msgstr "Aceutáu" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" +msgstr "Refugáu" + +msgid "Comments" +msgstr "Comentarios" + +#, php-format +msgid "File Request: %s" msgstr "" -#: template/pkgreq_form.php #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" msgstr "" -#: template/pkgreq_form.php msgid "Request type" -msgstr "" +msgstr "Triba de solicitú" -#: template/pkgreq_form.php msgid "Deletion" -msgstr "" +msgstr "Desaniciu" -#: template/pkgreq_form.php msgid "Orphan" -msgstr "" +msgstr "Güérfanu" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "" msgstr[1] "" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." -msgstr "Páxina %d de %d." +msgstr "Páxina %d de %d" -#: template/pkgreq_results.php msgid "Package" -msgstr "" +msgstr "Paquete" -#: template/pkgreq_results.php msgid "Filed by" msgstr "" -#: template/pkgreq_results.php msgid "Date" -msgstr "" +msgstr "Data" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" +msgid "~%d days left" +msgstr "Falten ~%d díes" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Falta ~%d hora" +msgstr[1] "Falten ~%d hores" -#: template/pkgreq_results.php msgid "<1 hour left" -msgstr "" +msgstr "Falta menos d'una hora" -#: template/pkgreq_results.php msgid "Accept" -msgstr "" +msgstr "Aceutar" -#: template/pkgreq_results.php msgid "Locked" -msgstr "" +msgstr "Bloquiáu" -#: template/pkgreq_results.php msgid "Close" -msgstr "" +msgstr "Zarrar" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php msgid "Closed" -msgstr "" +msgstr "Zarráu" -#: template/pkg_search_form.php msgid "Name, Description" -msgstr "" +msgstr "Nome, descripción" -#: template/pkg_search_form.php msgid "Name Only" -msgstr "" +msgstr "Namái nome" -#: template/pkg_search_form.php msgid "Exact Name" -msgstr "" +msgstr "Nome exautu" -#: template/pkg_search_form.php msgid "Exact Package Base" -msgstr "" +msgstr "Paquete base exautu" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php msgid "All" -msgstr "" +msgstr "Too" -#: template/pkg_search_form.php msgid "Flagged" msgstr "" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" +msgstr "Nome" + +msgid "Popularity" msgstr "" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php msgid "Voted" msgstr "" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" +msgid "Age" +msgstr "Edá" -#: template/pkg_search_form.php msgid "Ascending" -msgstr "" +msgstr "Ascendente" -#: template/pkg_search_form.php msgid "Descending" -msgstr "" +msgstr "Descendente" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "" -#: template/pkg_search_form.php +msgid "Any" +msgstr "" + msgid "Search by" -msgstr "" +msgstr "Guetar per" + +msgid "Keywords" +msgstr "Pallabres clave" -#: template/pkg_search_form.php template/stats/user_table.php msgid "Out of Date" -msgstr "" +msgstr "Ensin anovar" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" -msgstr "" +msgstr "Ordenar per" -#: template/pkg_search_form.php msgid "Sort order" -msgstr "" +msgstr "Mou d'ordenación" -#: template/pkg_search_form.php msgid "Per page" -msgstr "" +msgstr "Per páxina" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" -msgstr "" +msgstr "Dir" -#: template/pkg_search_form.php msgid "Orphans" -msgstr "" +msgstr "Güérfanos" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "" -#: template/pkg_search_results.php msgid "No packages matched your search criteria." -msgstr "" +msgstr "Nun hai paquetes que concasen col criteriu de gueta." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Alcontróse %d paquete." +msgstr[1] "Alcontráronse %d paquetes" -#: template/pkg_search_results.php msgid "Version" -msgstr "" +msgstr "Versión" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" -msgstr "" +msgstr "Sí" -#: template/pkg_search_results.php msgid "orphan" -msgstr "" +msgstr "güérfanu" -#: template/pkg_search_results.php msgid "Actions" +msgstr "Aiciones" + +msgid "Flag Out-of-date" msgstr "" -#: template/pkg_search_results.php msgid "Unflag Out-of-date" msgstr "" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "" -#: template/pkg_search_results.php msgid "Confirm" msgstr "" -#: template/search_accounts_form.php msgid "Any type" msgstr "" -#: template/search_accounts_form.php msgid "Search" msgstr "" -#: template/stats/general_stats_table.php msgid "Statistics" -msgstr "" +msgstr "Estadístiques" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Paquetes güérfanos" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" -msgstr "" +msgstr "Paquetes amestaos nos pasaos 7 díes" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" -msgstr "" +msgstr "Paquetes anovaos nos pasaos 7 díes" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" -msgstr "" +msgstr "Paquetes anovaos nel añu caberu" -#: template/stats/general_stats_table.php msgid "Packages never updated" -msgstr "" +msgstr "Paquetes qu'enxamás s'anovaron" -#: template/stats/general_stats_table.php msgid "Registered Users" -msgstr "Usuarios rexistraos" +msgstr "Usuarios rexistraos." -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Usuarios d'enfotu." -#: template/stats/updates_table.php msgid "Recent Updates" -msgstr "Anovamientos de recién" +msgstr "Anovamientos recientes" -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php msgid "My Statistics" -msgstr "" +msgstr "Les mios estadístiques" + +msgid "Packages in unsupported" +msgstr "Paquetes ensin sofitu" -#: template/tu_details.php msgid "Proposal Details" msgstr "" -#: template/tu_details.php msgid "This vote is still running." msgstr "" -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "" -#: template/tu_details.php template/tu_list.php msgid "End" -msgstr "" +msgstr "Fin" -#: template/tu_details.php msgid "Result" -msgstr "" +msgstr "Resultáu" -#: template/tu_details.php template/tu_list.php msgid "No" -msgstr "" +msgstr "Non" -#: template/tu_details.php msgid "Abstain" -msgstr "" +msgstr "Astención" -#: template/tu_details.php msgid "Total" +msgstr "Total" + +msgid "Participation" msgstr "" -#: template/tu_details.php -msgid "Participation" -msgstr "Participación" - -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." -msgstr "" +msgstr "Nun s'alcontró dengún resultáu." -#: template/tu_list.php msgid "Start" msgstr "" -#: template/tu_list.php msgid "Back" msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "Fallu internu del sirvidor" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "Asocedió un fallu fatal." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/aurweb.pot b/po/aur.pot similarity index 62% rename from po/aurweb.pot rename to po/aur.pot index b1a467e4..f7b9a1bc 100644 --- a/po/aurweb.pot +++ b/po/aur.pot @@ -1,14 +1,14 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. +# This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: AURWEB v4.8.0\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" +"Project-Id-Version: AUR v4.0.0-rc5\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-28 10:09+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -26,24 +26,6 @@ msgstr "" msgid "Sorry, the page you've requested does not exist." msgstr "" -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - #: html/503.php msgid "Service Unavailable" msgstr "" @@ -73,10 +55,6 @@ msgstr "" msgid "You do not have permission to edit this account." msgstr "" -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - #: html/account.php msgid "Use this form to search existing accounts." msgstr "" @@ -132,15 +110,15 @@ msgid "Type" msgstr "" #: html/addvote.php -msgid "Addition of a Package Maintainer" +msgid "Addition of a TU" msgstr "" #: html/addvote.php -msgid "Removal of a Package Maintainer" +msgid "Removal of a TU" msgstr "" #: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" +msgid "Removal of a TU (undeclared inactivity)" msgstr "" #: html/addvote.php @@ -155,52 +133,19 @@ msgstr "" msgid "Submit" msgstr "" -#: html/comaintainers.php template/comaintainers_form.php +#: html/comaintainers.php msgid "Manage Co-maintainers" msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - #: html/home.php template/header.php msgid "Home" msgstr "" -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - #: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" #: html/home.php @@ -215,7 +160,7 @@ msgid "Remember to vote for your favourite packages!" msgstr "" #: html/home.php -msgid "Some packages may be provided as binaries in [extra]." +msgid "Some packages may be provided as binaries in [community]." msgstr "" #: html/home.php @@ -224,8 +169,8 @@ msgstr "" #: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." msgstr "" #: html/home.php @@ -265,7 +210,7 @@ msgstr "" msgid "" "Request a package to be removed from the Arch User Repository. Please do not " "use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." +"the package maintainer and file orphan request if necessary." msgstr "" #: html/home.php @@ -308,7 +253,7 @@ msgstr "" #: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package Maintainer " +"General discussion regarding the Arch User Repository (AUR) and Trusted User " "structure takes place on %saur-general%s. For discussion relating to the " "development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" @@ -321,9 +266,9 @@ msgstr "" #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface " -"%sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" #: html/home.php @@ -350,6 +295,10 @@ msgstr "" msgid "UnNotify" msgstr "" +#: html/index.php +msgid "Flag" +msgstr "" + #: html/index.php msgid "UnFlag" msgstr "" @@ -358,7 +307,7 @@ msgstr "" msgid "Login" msgstr "" -#: html/login.php html/tos.php +#: html/login.php #, php-format msgid "Logged-in as: %s" msgstr "" @@ -371,11 +320,12 @@ msgstr "" msgid "Enter login credentials" msgstr "" -#: html/login.php -msgid "User name or primary email address" +#: html/login.php template/account_details.php template/account_edit_form.php +#: template/account_search_results.php template/search_accounts_form.php +msgid "Username" msgstr "" -#: html/login.php template/account_delete.php template/account_edit_form.php +#: html/login.php template/account_edit_form.php msgid "Password" msgstr "" @@ -398,7 +348,7 @@ msgid "Search Criteria" msgstr "" #: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php +#: template/stats/general_stats_table.php msgid "Packages" msgstr "" @@ -423,6 +373,14 @@ msgstr "" msgid "Invalid e-mail." msgstr "" +#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + #: html/passreset.php msgid "Password Reset" msgstr "" @@ -436,7 +394,7 @@ msgid "Your password has been reset successfully." msgstr "" #: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" +msgid "Confirm your e-mail address:" msgstr "" #: html/passreset.php @@ -447,23 +405,19 @@ msgstr "" msgid "Confirm your new password:" msgstr "" -#: html/passreset.php html/tos.php +#: html/passreset.php msgid "Continue" msgstr "" #: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" #: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" +msgid "Enter your e-mail address:" msgstr "" #: html/pkgbase.php @@ -472,12 +426,6 @@ msgid "" "checkbox." msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - #: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "" @@ -495,8 +443,9 @@ msgstr "" msgid "Package Deletion" msgstr "" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" +#: html/pkgdel.php +#, php-format +msgid "Delete Package: %s" msgstr "" #: html/pkgdel.php @@ -523,7 +472,7 @@ msgid "Delete" msgstr "" #: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." +msgid "Only Trusted Users and Developers can delete packages." msgstr "" #: html/pkgdisown.php template/pkgbase_actions.php @@ -532,15 +481,14 @@ msgstr "" #: html/pkgdisown.php #, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following " -"packages: " +msgid "Disown Package: %s" msgstr "" #: html/pkgdisown.php +#, php-format msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" #: html/pkgdisown.php @@ -564,65 +512,16 @@ msgid "Disown" msgstr "" #: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "This seems to be a VCS package. Please do %snot%s flag " -"it out-of-date if the package version in the AUR does " -"not match the most recent commit. Flagging this package " -"should only be done if the sources moved or changes in " -"the PKGBUILD are required because of recent upstream " -"changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages out-" -"of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" #: html/pkgmerge.php msgid "Package Merging" msgstr "" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" +#: html/pkgmerge.php +#, php-format +msgid "Merge Package: %s" msgstr "" #: html/pkgmerge.php @@ -655,30 +554,30 @@ msgid "Merge" msgstr "" #: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." msgstr "" #: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" +msgid "File Request" msgstr "" #: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php +#: html/pkgreq.php lib/pkgfuncs.inc.php msgid "First" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php +#: html/pkgreq.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php +#: html/pkgreq.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php +#: html/pkgreq.php lib/pkgfuncs.inc.php msgid "Last" msgstr "" @@ -694,26 +593,8 @@ msgstr "" msgid "Use this form to create an account." msgstr "" -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - #: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" +msgid "Trusted User" msgstr "" #: html/tu.php @@ -725,7 +606,7 @@ msgid "Voting is closed for this proposal." msgstr "" #: html/tu.php -msgid "Only Package Maintainers are allowed to vote." +msgid "Only Trusted Users are allowed to vote." msgstr "" #: html/tu.php @@ -779,22 +660,10 @@ msgstr "" msgid "Can contain only one period, underscore or hyphen." msgstr "" -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - #: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "" -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - #: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "" @@ -811,10 +680,6 @@ msgstr "" msgid "Language is not currently supported." msgstr "" -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - #: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." @@ -830,18 +695,6 @@ msgstr "" msgid "The SSH public key, %s%s%s, is already in use." msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - #: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." @@ -853,11 +706,19 @@ msgid "The account, %s%s%s, has been successfully created." msgstr "" #: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." +msgid "Click on the Login link above to use your account." msgstr "" #: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" + +#: lib/acctfuncs.inc.php +msgid "A password reset key has been sent to your e-mail address." msgstr "" #: lib/acctfuncs.inc.php @@ -880,10 +741,6 @@ msgstr "" msgid "Account suspended" msgstr "" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - #: lib/acctfuncs.inc.php #, php-format msgid "" @@ -913,54 +770,6 @@ msgstr "" msgid "View account information for %s" msgstr "" -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - #: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "" @@ -969,30 +778,6 @@ msgstr "" msgid "Package details could not be found." msgstr "" -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - #: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "" @@ -1001,10 +786,6 @@ msgstr "" msgid "You did not select any packages to flag." msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - #: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "" @@ -1029,10 +810,6 @@ msgstr "" msgid "You did not select any packages to delete." msgstr "" -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - #: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "" @@ -1041,18 +818,10 @@ msgstr "" msgid "You must be logged in before you can adopt packages." msgstr "" -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - #: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "" -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - #: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "" @@ -1104,15 +873,11 @@ msgid "You have been removed from the comment notification list for %s." msgstr "" #: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." +msgid "You must be logged in before you can edit package information." msgstr "" #: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." +msgid "Missing comment ID." msgstr "" #: lib/pkgbasefuncs.inc.php @@ -1120,7 +885,7 @@ msgid "Comment has been deleted." msgstr "" #: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." +msgid "You are not allowed to delete this comment." msgstr "" #: lib/pkgbasefuncs.inc.php @@ -1148,11 +913,6 @@ msgstr "" msgid "View packages details for" msgstr "" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - #: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "" @@ -1199,11 +959,6 @@ msgstr "" msgid "Confirm deletion" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - #: template/account_details.php template/account_edit_form.php #: template/search_accounts_form.php msgid "Account Type" @@ -1221,7 +976,7 @@ msgstr "" #: template/account_details.php template/account_edit_form.php #: template/search_accounts_form.php -msgid "Package Maintainer & Developer" +msgid "Trusted User & Developer" msgstr "" #: template/account_details.php template/account_edit_form.php @@ -1229,19 +984,11 @@ msgstr "" msgid "Email Address" msgstr "" -#: template/account_details.php -msgid "hidden" -msgstr "" - #: template/account_details.php template/account_edit_form.php #: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - #: template/account_details.php template/account_edit_form.php #: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" @@ -1265,15 +1012,6 @@ msgstr "" msgid "Active" msgstr "" -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php template/tu_details.php -msgid "unknown" -msgstr "" - #: template/account_details.php msgid "Last Login" msgstr "" @@ -1290,39 +1028,23 @@ msgstr "" msgid "Edit this user's account" msgstr "" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - #: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - #: template/account_edit_form.php msgid "required" msgstr "" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - #: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "" +#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "" + #: template/account_edit_form.php template/search_accounts_form.php msgid "Account Suspended" msgstr "" @@ -1332,115 +1054,23 @@ msgid "Inactive" msgstr "" #: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." +msgid "Re-type password" msgstr "" #: template/account_edit_form.php msgid "Language" msgstr "" -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new " -"password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - #: template/account_edit_form.php msgid "" "The following information is only required if you want to submit packages to " "the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - #: template/account_edit_form.php msgid "SSH Public Key" msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - #: template/account_edit_form.php template/pkgbase_details.php #: template/pkg_details.php msgid "Update" @@ -1482,6 +1112,11 @@ msgstr "" msgid "No more results to display." msgstr "" +#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #: template/comaintainers_form.php #, php-format msgid "" @@ -1492,32 +1127,12 @@ msgstr "" msgid "Users" msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php +#: template/comaintainers_form.php msgid "Save" msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." +#: template/header.php +msgid "My Packages" msgstr "" #: template/header.php @@ -1545,8 +1160,7 @@ msgid "Search wiki" msgstr "" #: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" +msgid "Flagged out-of-date" msgstr "" #: template/pkgbase_actions.php @@ -1565,12 +1179,12 @@ msgstr "" msgid "Vote for this package" msgstr "" -#: template/pkgbase_actions.php scripts/notify.py +#: template/pkgbase_actions.php msgid "Disable notifications" msgstr "" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" +#: template/pkgbase_actions.php +msgid "Notify of new comments" msgstr "" #: template/pkgbase_actions.php @@ -1584,10 +1198,23 @@ msgid_plural "%d pending requests" msgstr[0] "" msgstr[1] "" +#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "" + +#: template/pkgbase_actions.php +msgid "Merge Package" +msgstr "" + #: template/pkgbase_actions.php msgid "Adopt Package" msgstr "" +#: template/pkgbase_details.php template/pkg_details.php +#: template/pkgreq_results.php template/tu_details.php +msgid "unknown" +msgstr "" + #: template/pkgbase_details.php msgid "Package Base Details" msgstr "" @@ -1600,10 +1227,6 @@ msgstr "" msgid "read-only" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - #: template/pkgbase_details.php template/pkg_details.php #: template/pkg_search_form.php msgid "Keywords" @@ -1628,11 +1251,6 @@ msgstr "" msgid "Votes" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - #: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "" @@ -1641,87 +1259,41 @@ msgstr "" msgid "Last Updated" msgstr "" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php +#: template/pkg_comment_form.php msgid "Add Comment" msgstr "" #: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and " -"URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." +msgid "Comment has been added." msgstr "" #: template/pkg_comments.php -msgid "Pinned Comments" +msgid "View all comments" msgstr "" #: template/pkg_comments.php msgid "Latest Comments" msgstr "" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - #: template/pkg_comments.php msgid "Delete comment" msgstr "" #: template/pkg_comments.php -msgid "Pin comment" +#, php-format +msgid "Comment by %s" msgstr "" #: template/pkg_comments.php -msgid "Unpin comment" +msgid "Anonymous comment" +msgstr "" + +#: template/pkg_comments.php +msgid "deleted" +msgstr "" + +#: template/pkg_comments.php +msgid "All comments" msgstr "" #: template/pkg_details.php @@ -1776,11 +1348,20 @@ msgstr "" msgid "Sources" msgstr "" +#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "" + #: template/pkgreq_close_form.php #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "" +#: template/pkgreq_close_form.php +msgid "Note" +msgstr "" + #: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " @@ -1801,6 +1382,16 @@ msgstr "" msgid "Rejected" msgstr "" +#: template/pkgreq_close_form.php template/pkgreq_form.php +#: template/pkgreq_results.php +msgid "Comments" +msgstr "" + +#: template/pkgreq_form.php +#, php-format +msgid "File Request: %s" +msgstr "" + #: template/pkgreq_form.php #, php-format msgid "" @@ -1824,33 +1415,6 @@ msgstr "" msgid "Merge into" msgstr "" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the " -"package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the package " -"base and transfer its votes and comments to another package base. Merging a " -"package does not affect the corresponding Git repositories. Make sure you " -"update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - #: template/pkgreq_results.php #, php-format msgid "%d package request found." @@ -1877,10 +1441,8 @@ msgstr "" #: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" +msgid "~%d days left" +msgstr "" #: template/pkgreq_results.php #, php-format @@ -1905,10 +1467,6 @@ msgstr "" msgid "Close" msgstr "" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - #: template/pkgreq_results.php msgid "Closed" msgstr "" @@ -1929,14 +1487,6 @@ msgstr "" msgid "Exact Package Base" msgstr "" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - #: template/pkg_search_form.php msgid "All" msgstr "" @@ -1953,13 +1503,17 @@ msgstr "" msgid "Name" msgstr "" +#: template/pkg_search_form.php template/pkg_search_results.php +msgid "Popularity" +msgstr "" + #: template/pkg_search_form.php template/pkg_search_results.php #: template/tu_details.php template/tu_list.php msgid "Voted" msgstr "" #: template/pkg_search_form.php -msgid "Last modified" +msgid "Age" msgstr "" #: template/pkg_search_form.php @@ -2022,13 +1576,13 @@ msgid "Version" msgstr "" #: template/pkg_search_results.php -#, php-format msgid "" "Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." +"weighted with a factor of 0.98 per day since its creation." msgstr "" -#: template/pkg_search_results.php template/tu_details.php template/tu_list.php +#: template/pkg_search_results.php template/tu_details.php +#: template/tu_list.php msgid "Yes" msgstr "" @@ -2040,6 +1594,10 @@ msgstr "" msgid "Actions" msgstr "" +#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "" + #: template/pkg_search_results.php msgid "Unflag Out-of-date" msgstr "" @@ -2097,19 +1655,19 @@ msgid "Registered Users" msgstr "" #: template/stats/general_stats_table.php -msgid "Package Maintainers" +msgid "Trusted Users" msgstr "" #: template/stats/updates_table.php msgid "Recent Updates" msgstr "" -#: template/stats/updates_table.php -msgid "more" +#: template/stats/user_table.php +msgid "My Statistics" msgstr "" #: template/stats/user_table.php -msgid "My Statistics" +msgid "Packages in unsupported" msgstr "" #: template/tu_details.php @@ -2168,210 +1726,3 @@ msgstr "" #: template/tu_list.php msgid "Back" msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for " -"your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go " -"to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go " -"to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "Details have been logged and will be reviewed by the postmaster " -"posthaste. We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html -#: templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html -#: templates/packages/delete.html -msgid "This action will close any pending package requests " -"related to it. If %sComments%s are omitted, a closure " -"comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "Note that if you hide your email address, it'll " -"end up on the BCC list for any request notifications. " -"In case someone replies to these notifications, you won't " -"receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Maximum number of characters" -msgstr "" diff --git a/po/az.po b/po/az.po deleted file mode 100644 index 4f8e0ba8..00000000 --- a/po/az.po +++ /dev/null @@ -1,2374 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Azerbaijani (http://app.transifex.com/lfleischer/aurweb/language/az/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: az\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/az_AZ.po b/po/az_AZ.po deleted file mode 100644 index 3f65d694..00000000 --- a/po/az_AZ.po +++ /dev/null @@ -1,2374 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Azerbaijani (Azerbaijan) (http://app.transifex.com/lfleischer/aurweb/language/az_AZ/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: az_AZ\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/bg.po b/po/bg.po deleted file mode 100644 index 22a68d8d..00000000 --- a/po/bg.po +++ /dev/null @@ -1,2374 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Bulgarian (http://app.transifex.com/lfleischer/aurweb/language/bg/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: bg\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/ca.po b/po/ca.po index 10fd8412..ed424f2d 100644 --- a/po/ca.po +++ b/po/ca.po @@ -1,2378 +1,1336 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Adolfo Jayme-Barrientos, 2014 +# Adolfo Jayme Barrientos, 2014 # Hector Mtz-Seara , 2011,2013 -# Ícar , 2021 # Lukas Fleischer , 2011 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Ícar , 2021\n" -"Language-Team: Catalan (http://app.transifex.com/lfleischer/aurweb/language/ca/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/aur/language/" +"ca/)\n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "No s’ha trobat la pàgina" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Ho sentim, la pàgina que ha sol·licitat no existeix." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Nota" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Les URL de clonació del Git no estan destinades a ser obertes en un navegador." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Per clonar el repositori Git de %s, executeu %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Clica %saquí%s per tornar a la pàgina de detalls de %s." - -#: html/503.php msgid "Service Unavailable" -msgstr "Servei no disponible" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "No pateixis! Aquest lloc està caigut a causa d'un manteniment. Tornarem aviat." +msgstr "" -#: html/account.php msgid "Account" +msgstr "" + +msgid "Accounts" msgstr "Compte" -#: html/account.php template/header.php -msgid "Accounts" -msgstr "Comptes" - -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "No esteu autoritzat per a accedir a aquesta àrea." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "No s'ha pogut obtenir la informació de l'usuari especificat." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "No teniu permís per a editar aquest compte." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Contrasenya no vàlida." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Utilitzeu aquest formulari per a cercar comptes existents." -#: html/account.php msgid "You must log in to view user information." msgstr "Heu d'identificar-vos per a veure la inforació de l'usuari." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Utilitzeu aquest formulari per a crear un compte." + msgid "Add Proposal" msgstr "Afegeix proposta" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Element invàlid per acció de l'usuari." -#: html/addvote.php msgid "Username does not exist." msgstr "El nom d’usuari no existeix." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s ja te una proposta corrent per ells." -#: html/addvote.php msgid "Invalid type." msgstr "El tipus no és vàlid." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "La proposta no pot estar buit." -#: html/addvote.php msgid "New proposal submitted." msgstr "Nova proposta presentada." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Presentar una proposta per votar." -#: html/addvote.php msgid "Applicant/TU" msgstr "Sol.licitant / TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(Buit si no s'aplica)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Tipus" -#: html/addvote.php -msgid "Addition of a Package Maintainer" +msgid "Addition of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer" +msgid "Removal of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" +msgid "Removal of a TU (undeclared inactivity)" msgstr "" -#: html/addvote.php msgid "Amendment of Bylaws" -msgstr "Modificació de les lleis" +msgstr "" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Proposta" -#: html/addvote.php msgid "Submit" msgstr "Envia" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Gestiona els co-mantenidors" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Edita el comentari" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Tauler" - -#: html/home.php template/header.php msgid "Home" msgstr "Inici" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Els meus paquets marcats" - -#: html/home.php -msgid "My Requests" -msgstr "Les meves peticions" - -#: html/home.php -msgid "My Packages" -msgstr "Els meus paquets" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Cerca paquets que mantinc" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Paquets co-mantinguts" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Cerca paquets que co-mantinc" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Benvingut a l'AUR! Si us plau, llegiu les %sdirectrius d'usuari d'AUR%s i " +"les %sdirectrius de TU (usuari de confiança) d'AUR%s per més informació." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "És %sobligatori%s que els PKGBUILDs amb que es contribueix s'ajustin als %sEstandars d'empaquetament d'Arc%s, en cas contrari seran esborrats!" +msgstr "" +"És %sobligatori%s que els PKGBUILDs amb que es contribueix s'ajustin als " +"%sEstandars d'empaquetament d'Arc%s, en cas contrari seran esborrats!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Recordeu votar els vostres paquets preferits!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Alguns paquets poden ser oferts com binaris a [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "Alguns paquets poden ser oferts com binaris a [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "Avís legal" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Els paquets de l'AUR són contingut produït per usuaris. Qualsevol ús dels fitxers proporcionats és sota el seu propi risc." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Els paquets sense suport són creats per diferents usuaris. Qualsevol ús " +"d'aquests és sempre sota el seu propi risc." -#: html/home.php -msgid "Learn more..." -msgstr "Més informació..." - -#: html/home.php msgid "Support" -msgstr "Suport" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Sol·licituds de paquets" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Hi ha tres tipus de sol·licituds que es poden presentar al quadre %sAccions del paquet%s a la pàgina de detalls del paquet:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Sol·licitud d'orfenat" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Sol·licita que un paquet sigui renegat, per exemple quan el mantenidor estigui inactiu i el paquet s'ha marcat com a obsolet durant molt de temps." - -#: html/home.php -msgid "Deletion Request" -msgstr "Sol·licitud de supressió" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Sol·licitud de fusió" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Sol·licita que un paquet es fusioni en un altre. Es pot utilitzar quan un paquet s'ha de reanomenar o substituir per un paquet dividit." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Si voleu debatre una sol·licitud, podeu utilitzar la llista de correu %saur-requests%s. No obstant això, si us plau, no utilitzeu aquesta llista per a enviar una petició." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Enviar paquets" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Ara s'utilitza Git a sobre d'SSH per enviar paquets a l'AUR. Feu un cop d'ull a la secció \"%sSubmitting packages%s\" de la pàgina de l'ArchWIki de l'AUR per més detalls." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Les següents empremtes digitals d'SSH són usades per l'AUR:" - -#: html/home.php msgid "Discussion" msgstr "Discussió" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Comunicar errada" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Cercar Paquets" -#: html/index.php msgid "Adopt" -msgstr "Adopta" +msgstr "" -#: html/index.php msgid "Vote" msgstr "Vota" -#: html/index.php msgid "UnVote" msgstr "Lleva el vot" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Notifica" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Lleva notificació" -#: html/index.php +msgid "Flag" +msgstr "Marcar" + msgid "UnFlag" msgstr "Desmarcar" -#: html/login.php template/header.php msgid "Login" msgstr "Entra" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Identificat com: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Surt" -#: html/login.php msgid "Enter login credentials" msgstr "Introduïu les credencials d'inici de sessió" -#: html/login.php -msgid "User name or primary email address" -msgstr "Nom d'usuari o adreça de correu primària" +msgid "Username" +msgstr "Nom d'usuari" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Contrasenya" -#: html/login.php msgid "Remember me" msgstr "Recorda'm" -#: html/login.php msgid "Forgot Password" msgstr "Has oblidat la teva contrasenya" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "L'inici de sessió HTTP està deshabilitat. Si us plau %s canvia a HTTPs %s si voleu iniciar la sessió." +msgstr "" +"L'inici de sessió HTTP està deshabilitat. Si us plau %s canvia a HTTPs %s si " +"voleu iniciar la sessió." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Criteri de cerca" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Paquets" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "S'ha produït un error en obtenir els detalls del paquet." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Manca un camp requerit." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Els camps de contrasenya no coincideixen." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "La seva contrasenya ha de tenir almenys %s caràcters." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Direcció de correu electrònic no vàlida." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Restablir contrasenya" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Revisi el seu correu electrònic per a l'enllaç de confirmació." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "La seva contrasenya s'ha restablert correctament." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Confirmeu el vostre nom d'usuari o l'adreça de correu electrònic primària:" +msgid "Confirm your e-mail address:" +msgstr "Tots" -#: html/passreset.php msgid "Enter your new password:" msgstr "Marcat" -#: html/passreset.php msgid "Confirm your new password:" msgstr "No marcat" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Continuar" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Si heu oblidat el nom d'usuari i l'adreça de correu electrònic primària utilitzada al registrar-vos, si us plau envieu un missatge a la llista de correu %saur-general%s." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Si ha oblidat l'adreça de correu electrònic utilitzada al registrar-se, si " +"us plau envïi un missatge a la llista de correu %saur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Entreu el vostre nom d'usuari o la vostra adreça de correu electrònic primària:" +msgid "Enter your e-mail address:" +msgstr "Introduiu la vostra adreça de correu." -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Bases del paquet" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Els paquets seleccionats no han sigut renegats, marqueu la casella de confirmació." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "No es pot trobar el paquet on combinar vots i comentaris." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." -msgstr "No es pot fusionar la base d'un paquet amb la mateixa." +msgstr "" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Els paquets seleccionats no s'han esborrat, marqui la casella de confirmació." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Els paquets seleccionats no s'han esborrat, marqui la casella de confirmació." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Esborrament Paquet" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Esborrar el paquet" +#, php-format +msgid "Delete Package: %s" +msgstr "Esborrar Paquet: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Utilitzeu aquest formulari per eliminar la base del paquet %s%s%s i els següents paquets de l'AUR:" +msgstr "" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "L'esborrament del paquet és permanent." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Marqueu el quadre de verificació per confirmar l'operació." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Confirmeu l'eliminació del paquet" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Esborra" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." +msgid "Only Trusted Users and Developers can delete packages." msgstr "" +"Només els usuaris de confiança (TUs) i desenvolupadors poden eliminar " +"paquets." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Desposseir-se del paquet" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Comentaris" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Marcar" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Fusió de Paquets" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Fusionar el paquet" +#, php-format +msgid "Merge Package: %s" +msgstr "Fusiona el Paquet: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "" -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Una vegada que el paquet s'ha fusionat que no es pot revertir." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Introdueixi el nom del paquet amb que voleu fusionar aquest paquet." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Fusionar amb:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Confirmi la fusió del paquet" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Fusió" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." +msgstr "" +"Només el usuaris de confiança (TUs) i desenvolupadors poden fusionar paquets." + +msgid "File Request" msgstr "" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Primer" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Anterior" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Següent" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Darrer" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registrar-se" +msgid "Trusted User" +msgstr "Usuari de Confiança" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Utilitzeu aquest formulari per a crear un compte." - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "No es va poder recuperar detalls de la proposta." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "La votació es va tancar per a aquesta proposta." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." +msgid "Only Trusted Users are allowed to vote." msgstr "" -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "No pots votar en una proposta sobre tu." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Ja has votat en aquesta proposta." -#: html/tu.php msgid "Vote ID not valid." msgstr "L'identificador de vot no és vàlid." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Vots actuals" -#: html/tu.php msgid "Past Votes" msgstr "Últims vots" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Votants" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "El registre de comptes ha estat inhabilitat per la seva adreça IP, probablement a causa de continus atacs d'spam. Disculpeu les molèsties." +msgstr "" +"El registre de comptes ha estat inhabilitat per la seva adreça IP, " +"probablement a causa de continus atacs d'spam. Disculpeu les molèsties." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Manca l'identificador de l'usuari" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "El nom d'usuari és icorrecte." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "En número de caràcters ha d'estar entre %s i %s" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Comença i finalitza amb una lletra o número" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Només pot contenir un punt, guió o guió baix." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "L'adreça del correu-e no és vàlida." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "L'empremta de la clau PGP no és vàlida." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "No es possible augmentar els permisos del compte." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "L'idioma no està suportat actualment." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "El nom d'usuari, %s%s%s, ja s'està fent servir." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "L'adressa, %s%s%s, ja s'està fent servir." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Error al intentar crear el compte, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "El compte, %s%s%s, s'ha creat correctament." -#: lib/acctfuncs.inc.php +msgid "Click on the Login link above to use your account." +msgstr "" +"Feu clic a l'enllaç superior d'Inici de sessió per utilitzar el seu compte." + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Benvingut a %s! Per configurar una contrasenya inicial per la seu nou compte " +"feu clic a l'enllaç de sota. Si l'enllaç no funciona, tracti de copiar-lo i " +"enganxar-lo al seu navegador." + msgid "A password reset key has been sent to your e-mail address." msgstr "S'ha enviat una contrasenya nova al seu correu electrònic." -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "Feu clic a l'enllaç superior d'Inici de sessió per utilitzar el seu compte." - -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "No s'han fet canvis al compte, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "El compte, %s%s%s, s'ha modificat correctament." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "El formulari de registre està deshabilitat per la seva adreça IP, probablement a causa de continus atacs d'spam. Disculpeu les molèsties." +msgstr "" +"El formulari de registre està deshabilitat per la seva adreça IP, " +"probablement a causa de continus atacs d'spam. Disculpeu les molèsties." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "La seva contrasenya s'ha restablert. Si acaba de crear un nou compte, si us plau utilitzeu l'enllaç al correu electrònic de confirmació per configurar una contrasenya inicial. En cas contrari, sol·liciti una clau de reinici a la pàgina %s de restabliment de contanenya %s." +msgstr "" +"La seva contrasenya s'ha restablert. Si acaba de crear un nou compte, si us " +"plau utilitzeu l'enllaç al correu electrònic de confirmació per configurar " +"una contrasenya inicial. En cas contrari, sol·liciti una clau de reinici a " +"la pàgina %s de restabliment de contanenya %s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "nom d'usuari o contrasenya incorrectes." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "" -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." -msgstr "Direcció de correu electrònic i combinació de tecles de restabliment no vàlida." +msgstr "" +"Direcció de correu electrònic i combinació de tecles de restabliment no " +"vàlida." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Res" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Veure l'informació del compte per %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "S'ha afegit el comentari." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Heu d'identificar-vos abans d'editar qualsevol informació de paquet." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Manca l'identificador del comentari." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "No s'han pogut obtenir els detalls del paquet." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "No s'han pogut trobar els detalls del paquet." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Heu d'identificar-vos abans de marcar paquets." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "No heu seleccionat cap paquet per a marcar." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Els paquets seleccionats s'han marcat com No-Actualitzats." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Heu d'identificar-vos abans de desmarcar paquets." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "No heu seleccionat cap paquet per a desmarcar." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Els paquets seleccionats s'han desmarcat." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "No té permís per eliminar paquets." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "No heu seleccionat cap paquet per a esborrar." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Els paquets seleccionats s'han esborrat." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Heu d'identificar-vos abans d'apropiar-se paquets." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Heu d'identificar-vos abans de desapropiàr-se paquets." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "No heu seleccionat cap paquet per apropiar-se'n." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "No heu seleccionat cap paquet per desapropiar-se'n." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Els paquets seleccionats s'han apropiat." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Els paquets seleccionats han sigut desapropiats." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Heu d'identificar-vos abans de votar paquets." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Heu d'identificar-vos abans de llevar el vot als paquets." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "No heu seleccionat cap paquet per votar." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Els vostres vots s'han suprimit dels paquets seleccionats." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Els vostres vots s'han enviat per als paquets seleccionats." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "No s'ha pogut afegir a la llista de notificació." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Heu estat afegit a la llista de notificacions de %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Heu sigut esborrat de la llista de notificacions de comentaris de %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" +msgid "You must be logged in before you can edit package information." +msgstr "Heu d'identificar-vos abans d'editar qualsevol informació de paquet." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" +msgid "Missing comment ID." +msgstr "Manca l'identificador del comentari." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "No esteu autoritzat per esborrar aquest comentari." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "S'ha esborrat el comentari." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" +msgid "You are not allowed to delete this comment." +msgstr "No esteu autoritzat per esborrar aquest comentari." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" +msgid "Missing category ID." +msgstr "Manca la identificació de categoria." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" +msgid "Invalid category ID." +msgstr "L'identificador de la categoria no és vàlid." + +msgid "You are not allowed to change this package category." +msgstr "No esteu autoritzats a canviar la categoria del paquet." + +msgid "Package category changed." +msgstr "Ha canviat la categoria del paquet." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Veure els detalls del paquet per" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Nom no vàlid: sols es permet lletres minúscules." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "El tipus de sol·licitud no és vàlid." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "" -#: template/account_delete.php msgid "Confirm deletion" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Nom d'usuari" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Tipus de compte" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Usuari" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Desenvolupador" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" +msgid "Trusted User & Developer" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Adreça de correu-e" -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Nom real" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Nom d'usuari IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Emprempta clau PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Estat" -#: template/account_details.php msgid "Inactive since" msgstr "" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Actiu" -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "desconegut" - -#: template/account_details.php msgid "Last Login" msgstr "" -#: template/account_details.php msgid "Never" msgstr "Mai" -#: template/account_details.php msgid "View this user's packages" msgstr "Visualitza els paquets d'aquest usuari" -#: template/account_details.php msgid "Edit this user's account" msgstr "" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "requerit" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Usuari normal" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Usuari de Confiança" + msgid "Account Suspended" msgstr "El compte s'ha suspès" -#: template/account_edit_form.php msgid "Inactive" msgstr "" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Idioma" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Escriu altre cop la contrasenya" -#: template/account_edit_form.php +msgid "Language" +msgstr "Idioma" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Notificar comentaris nous" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Actualitza" -#: template/account_edit_form.php msgid "Create" msgstr "Crea" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Restaura" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "No s'ha trobat cap coindidència amb els criteris de cerca." -#: template/account_search_results.php msgid "Edit Account" msgstr "Edita compte" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspès" -#: template/account_search_results.php msgid "Edit" msgstr "Editar" -#: template/account_search_results.php msgid "Less" msgstr "Menys" -#: template/account_search_results.php msgid "More" msgstr "Més" -#: template/account_search_results.php msgid "No more results to display." msgstr "No hi ha més resultats per mostrar." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" msgstr "" -#: template/comaintainers_form.php msgid "Users" msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" +msgid "My Packages" +msgstr "Els meus paquets" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php msgid " My Account" msgstr "El meu Compte" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Registrar-se" + +msgid "unknown" +msgstr "desconegut" + +msgid "Package Base Details" +msgstr "" + msgid "Package Actions" msgstr "Accions Paquet" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Veure PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" +msgid "Flagged out-of-date" +msgstr "Marcat com a no-actualitzat" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Marcar el paquet com a no-actualitzat" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Desmarcar el paquet" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "eliminar vot" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Vota per aquest paquet" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Deshabilitar notificacions" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" +msgid "Notify of new comments" +msgstr "Notificar comentaris nous" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "" msgstr[1] "" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Esborrar el paquet" + +msgid "Merge Package" +msgstr "Fusionar el paquet" + msgid "Adopt Package" msgstr "Adoptar Paquet" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" +msgid "Category" +msgstr "Categoria" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" +msgid "Change category" +msgstr "Canvi de categoria" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Paraules Clau" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Remitent" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Veure l'informació del compte per %s" + msgid "Maintainer" msgstr "Mantenidor" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Vots" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Primer enviament" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Última actualització" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Afegir un comentari" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." +msgid "Comment has been added." +msgstr "S'ha afegit el comentari." + +msgid "View all comments" msgstr "" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Darrers Comentaris" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Esborra comentari" -#: template/pkg_comments.php -msgid "Pin comment" +#, php-format +msgid "Comment by %s" +msgstr "Comentari de %s" + +msgid "Anonymous comment" msgstr "" -#: template/pkg_comments.php -msgid "Unpin comment" +msgid "deleted" msgstr "" -#: template/pkg_details.php +msgid "All comments" +msgstr "Tots el comentaris" + msgid "Package Details" msgstr "Detalls del paquet" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Descripció" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Enllaç URL Upstream" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Visiti la pàgina web per" -#: template/pkg_details.php msgid "Licenses" msgstr "" -#: template/pkg_details.php msgid "Groups" msgstr "" -#: template/pkg_details.php msgid "Conflicts" msgstr "" -#: template/pkg_details.php msgid "Provides" msgstr "" -#: template/pkg_details.php msgid "Replaces" msgstr "" -#: template/pkg_details.php msgid "Dependencies" msgstr "Dependències" -#: template/pkg_details.php msgid "Required by" msgstr "Requerit per" -#: template/pkg_details.php msgid "Sources" msgstr "Fonts" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "" + #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "" -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." msgstr "" -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Motiu" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Acceptat" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Rebutjat" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Comentaris" + +#, php-format +msgid "File Request: %s" +msgstr "" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" msgstr "" -#: template/pkgreq_form.php msgid "Request type" msgstr "" -#: template/pkgreq_form.php msgid "Deletion" msgstr "" -#: template/pkgreq_form.php msgid "Orphan" msgstr "" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Combinar amb" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "" msgstr[1] "" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Pàgina %d de %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Paquet" -#: template/pkgreq_results.php msgid "Filed by" msgstr "" -#: template/pkgreq_results.php msgid "Date" msgstr "Data" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" +msgid "~%d days left" +msgstr "" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "" msgstr[1] "" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "" -#: template/pkgreq_results.php msgid "Accept" msgstr "" -#: template/pkgreq_results.php msgid "Locked" msgstr "" -#: template/pkgreq_results.php msgid "Close" msgstr "" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php msgid "Closed" msgstr "" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Nom, Descripció" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Només nom" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php msgid "All" msgstr "Tots" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Marcat" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "No Marcat" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Nom" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Votat" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" +msgid "Age" +msgstr "Antiguitat" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Ascendent" -#: template/pkg_search_form.php msgid "Descending" msgstr "Descendent" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Introdueixi in criteri de cerca" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Cap" + msgid "Search by" msgstr "Cerca per" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Paraules Clau" + msgid "Out of Date" msgstr "No-Actualitzat" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Ordena per" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Ordena en sentit" -#: template/pkg_search_form.php msgid "Per page" msgstr "Per pàgina" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Vés" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Orfes" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "S'ha produït un error en obtenir la llista de paquets." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "No s'ha trobat cap coincidència amb el teu criteri de cerca." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "" msgstr[1] "" -#: template/pkg_search_results.php msgid "Version" msgstr "Versió" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Sí" -#: template/pkg_search_results.php msgid "orphan" msgstr "orfe" -#: template/pkg_search_results.php msgid "Actions" msgstr "Accions" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Marca com No-Actualitzat" + msgid "Unflag Out-of-date" msgstr "Desmarca No-Actualitzat" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Apròpia paquets" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Desapròpia els paquets" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Esborra paquet" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Confirmar" -#: template/search_accounts_form.php msgid "Any type" msgstr "Qualsevol tipus" -#: template/search_accounts_form.php msgid "Search" msgstr "Cerca" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Estadístiques" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Paquets orfes" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Paquets afegits en els darrers 7 dies" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Paquets actualitzats en els darrers 7 dies" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Paquets actualitzats en l'últim any" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Paquets mai actualitzats" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Usuaris registrats" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Usuaris de Confiança" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Actualitzacions recents" -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Les meves estadístiques" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Paquets a \"unsupported\"" + msgid "Proposal Details" msgstr "Detalls de la proposta" -#: template/tu_details.php msgid "This vote is still running." msgstr "Aquesta votació encara es troba en funcionament." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Enviat: %s per %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Fi" -#: template/tu_details.php msgid "Result" msgstr "" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "No" -#: template/tu_details.php msgid "Abstain" msgstr "Abstenir-se" -#: template/tu_details.php msgid "Total" msgstr "Nom exacte" -#: template/tu_details.php msgid "Participation" msgstr "" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "No s'han trobat resultats." -#: template/tu_list.php msgid "Start" msgstr "Inici" -#: template/tu_list.php msgid "Back" msgstr "Enrere" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/ca_ES.po b/po/ca_ES.po deleted file mode 100644 index 3927d5a2..00000000 --- a/po/ca_ES.po +++ /dev/null @@ -1,2374 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Catalan (Spain) (http://app.transifex.com/lfleischer/aurweb/language/ca_ES/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ca_ES\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/cs.po b/po/cs.po index f12e07ab..933bfb72 100644 --- a/po/cs.po +++ b/po/cs.po @@ -1,2393 +1,1317 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Daniel Milde , 2017 -# Daniel Peukert , 2021 -# Daniel Peukert , 2021-2022 -# Jaroslav Lichtblau , 2015-2016 -# Jaroslav Lichtblau , 2014 -# Appukonrad , 2017-2018 +# Jaroslav Lichtblau , 2015 +# Jaroslav Lichtblau , 2014 # Lukas Fleischer , 2011 -# Lukáš Kucharczyk , 2020 # Pavel Ševeček , 2014 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Daniel Peukert , 2021-2022\n" -"Language-Team: Czech (http://app.transifex.com/lfleischer/aurweb/language/cs/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Czech (http://www.transifex.com/projects/p/aur/language/cs/)\n" +"Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: html/404.php msgid "Page Not Found" msgstr "Stránka nenalezena" -#: html/404.php msgid "Sorry, the page you've requested does not exist." -msgstr "Omlouváme se, ale požadovaná stránka neexistuje." +msgstr "Omlouváme se, požadovaná stránka neexistuje." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Poznámka" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "URL adresy pro klonování Git repozitáře nejsou určeny k otevření v prohlížeči." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Pro naklonování Git repozitáře %s použijte příkaz %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Klikněte %s zde %s pro návrat na stránku o balíčku %s. " - -#: html/503.php msgid "Service Unavailable" -msgstr "Služba nedostupná" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Nepanikařte! Na tomto webu probíhá údržba. Brzy budeme zpět." +msgstr "" -#: html/account.php msgid "Account" msgstr "Účet" -#: html/account.php template/header.php msgid "Accounts" msgstr "Účty" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Zde nemáte povolený přístup." -#: html/account.php msgid "Could not retrieve information for the specified user." -msgstr "Načtení informací o daném uživateli se nezdařilo." +msgstr "Nelze obdržet informace pro vybraného uživatele." -#: html/account.php msgid "You do not have permission to edit this account." -msgstr "Pro úpravu tohoto účtu nemáte oprávnění. " +msgstr "Nemáte oprávnění pro úpravu tohoto účtu." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Neplatné heslo." - -#: html/account.php msgid "Use this form to search existing accounts." -msgstr "Tento formulář použijte pro vyhledání existujících účtů." +msgstr "Pro vyhledání existujících účtů použíte tento formulář." -#: html/account.php msgid "You must log in to view user information." -msgstr "Pro zobrazení informací o uživateli se musíte přihlásit." +msgstr "Musíte se přihlásit, pro zobrazení informací o uživateli." + +msgid "Use this form to create an account." +msgstr "Použíte tento formulář k založení účtu." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "Přidat návrh" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Chybný token uživatelské akce." -#: html/addvote.php msgid "Username does not exist." msgstr "Uživatelské jméno neexistuje." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." -msgstr "Pro %s již existuje návrh." +msgstr "Pro %s se již hlasuje." -#: html/addvote.php msgid "Invalid type." msgstr "Chybný typ." -#: html/addvote.php msgid "Proposal cannot be empty." -msgstr "Návrh nesmí být prázdný." +msgstr "Návrh nemůže být prázdný." -#: html/addvote.php msgid "New proposal submitted." -msgstr "Nový návrh předložen." +msgstr "Nový návrh podán." -#: html/addvote.php msgid "Submit a proposal to vote on." -msgstr "Předložit návrh k hlasování." +msgstr "Předložit návrh na hlasování." -#: html/addvote.php msgid "Applicant/TU" -msgstr "Uchazeč/důvěryhodný uživatel" +msgstr "Uchazeč/TU" -#: html/addvote.php msgid "(empty if not applicable)" -msgstr "(nevyhovující přeskočte)" +msgstr "(vynechat pokud neni vhodný)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Typ" -#: html/addvote.php -msgid "Addition of a Package Maintainer" +msgid "Addition of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer" +msgid "Removal of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" +msgid "Removal of a TU (undeclared inactivity)" msgstr "" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Úprava směrnic" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Návrh" -#: html/addvote.php msgid "Submit" msgstr "Odeslat" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Správa spolusprávců" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Upravit komentář" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Nástěnka" - -#: html/home.php template/header.php -msgid "Home" -msgstr "hlavní stránka" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "Moje označené balíčky" - -#: html/home.php -msgid "My Requests" -msgstr "Moje žádosti" - -#: html/home.php -msgid "My Packages" -msgstr "Moje balíčky" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Hledat balíčky, které spravuji" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Spoluspravované balíčky" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Hledat balíčky, které spoluspravuji" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." msgstr "" -#: html/home.php +msgid "Home" +msgstr "Domů" + +#, php-format +msgid "" +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." +msgstr "" + #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Nahrané soubory PKGBUILD %smusí%s dodržovat %sstandardy balíčků systému Arch%s, jinak budou smazány!" +msgstr "" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Nezapomeň hlasovat pro svoje oblíbené balíčky!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Některé balíčky mohou být poskytnuty v binární podobě v repozitáři [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"Některé balíčky mohou být poskytnuty v binární podobě v repozitáři " +"[community]." -#: html/home.php msgid "DISCLAIMER" -msgstr "UPOZORNĚNÍ" +msgstr "" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Obsah balíčků v repozitáři AUR je tvořen uživateli. Použití zde nalezených souborů je na vlastní nebezpečí." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" -#: html/home.php -msgid "Learn more..." -msgstr "Další informace ..." - -#: html/home.php msgid "Support" -msgstr "Podpora" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Žádosti související s balíčky" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Existují tři typy žádostí, které je možné vybrat v nabídce %sAkce balíčku%s na stránce balíčku:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Žádost o odebrání vlastnictví" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Požádá o zrušení vlastnictví, např. pokud je správce neaktivní a balíček je již dlouho označen za neaktuální." - -#: html/home.php -msgid "Deletion Request" -msgstr "Žádost o smazání" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Žádost o sloučení" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Požádá o sloučení balíčku s jiným balíčkem. Může být použito, pokud je nutné balíček přejmenovat nebo nahradit rozděleným balíčkem." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Pokud chcete nějakou žádost prodiskutovat, použijte poštovní konferenci %saur-requests%s. Žádosti samotné tam však nepatří." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Tvorba balíčků" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Pro odesílání balíčků do repozitáře AUR se nyní používá git přes SSH. Další informace naleznete na wiki v sekci %so přidávání balíčků%s na stránce o uživatelském repozitáři systému Arch Linux." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Pro repozitář AUR se používají následující otisky SSH:" - -#: html/home.php msgid "Discussion" msgstr "Diskuze" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Hlášení chyb" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Vyhledávání balíčků" -#: html/index.php msgid "Adopt" -msgstr "Převzít balíček" +msgstr "Adoptovat" -#: html/index.php msgid "Vote" -msgstr "Dát hlas balíčku" +msgstr "Hlasovat" -#: html/index.php msgid "UnVote" msgstr "Odebrat hlas" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" -msgstr "Sledovat" +msgstr "Oznamovat" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" -msgstr "Nesledovat" +msgstr "Neoznamovat" + +msgid "Flag" +msgstr "Označit" -#: html/index.php msgid "UnFlag" msgstr "Odznačit" -#: html/login.php template/header.php msgid "Login" -msgstr "Přihlášení" +msgstr "Přihlašovací jméno" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Přihlášen jako: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Odhlásit" -#: html/login.php msgid "Enter login credentials" -msgstr "Zadejte přihlašovací údaje:" +msgstr "Vložit přihlašovací údaje" -#: html/login.php -msgid "User name or primary email address" -msgstr "Uživatelské jméno nebo hlavní emailová adresa" +msgid "Username" +msgstr "Uživatelské jméno" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Heslo" -#: html/login.php msgid "Remember me" -msgstr "Zapamatovat přihlášení" +msgstr "Pamatuj si mě" -#: html/login.php msgid "Forgot Password" msgstr "Zapomenuté heslo" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Přihlášení přes HTTP je zakázáno. . Pokud se chcete přihlásit, prosíme %spřejděte na HTTPs%s ." +msgstr "" -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Vyhledávací kritéria" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Balíčky" -#: html/packages.php msgid "Error trying to retrieve package details." -msgstr "Při získávání informací o balíčku došlo k chybě." +msgstr "Došlo k chybě při získávání detailů balíčku." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Chybí povinný údaj." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." -msgstr "Hesla se neshodují." +msgstr "Hesla se neshodují" -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Heslo musí mít nejméně %s znaků." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Neplatný e-mail." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Reset hesla" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." -msgstr "Pro potvrzovací odkaz zkontrolujte e-mail." +msgstr "" -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Heslo bylo úspěšně resetováno." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Potvrďte uživatelské jméno nebo hlavní emailovou adresu:" +msgid "Confirm your e-mail address:" +msgstr "Potvrďte svou e-mailovou adresu:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Zadejte nové heslo:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Potvrďte nové heslo:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Pokračovat" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Pokud jste zapomněli, jaké uživatelské jméno nebo hlavní emailovou adresu jste při registraci použili, pošlete nám zprávu do poštovní konference %saur-general%s." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Pokud jste zapomněli emailovou adresu použitou při registraci, pošlete " +"zprávu na %saur-general%s mailing list." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Zadejte uživatelské jméno nebo hlavní emailovou adresu:" +msgid "Enter your e-mail address:" +msgstr "Zadejte emailovou adresu:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Základní balíčky" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Zřeknutí se daných balíčků nebylo provedeno. Zřeknutí se je nutné potvrdit zaškrtnutím políčka." +msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "Dané balíčky nebyly převzaty. Převzetí je nutné potvrdit zaškrtnutím políčka." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Nelze najít balíček pro sloučení hlasů a komentářů." +msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." -msgstr "Základní balíček není možné sloučit do sebe." +msgstr "" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Dané balíčky nebyly smazány. Smazání je nutné potvrdit zaškrtnutím políčka." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" -#: html/pkgdel.php msgid "Package Deletion" msgstr "Smazání balíčku" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Smazat balíček" +#, php-format +msgid "Delete Package: %s" +msgstr "Smazat balíček: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Pomocí tohoto formuláře je možné z repozitáře AUR odstranit základní balíček %s%s%s a tyto související balíčky:" +msgstr "" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Smazání balíčku je trvalé." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Zaškrtnout políčko pro potvrzení akce." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Potvrdit smazání balíčku" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Smazat" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." +msgid "Only Trusted Users and Developers can delete packages." msgstr "" -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" -msgstr "Zřeknout se balíčku" +msgstr "" + +#, php-format +msgid "Disown Package: %s" +msgstr "" -#: html/pkgdisown.php #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Pomocí tohoto formuláře je možné zřeknout se základního balíčku %s%s%s, který obsahuje tyto další balíčky:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "Zaškrtnutím potvrzujete, že již nadále nechte být spolusprávcem balíčku." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Zaškrtnutím potvrzujete, že se chcete zřeknout balíčku a předat ho uživateli %s%s%s." - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Zaškrtnutím potvrzujete, že se chcete zřeknout balíčku." - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "Potvrzuji, že se zříkám balíčku" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "Odebrat vlastnictví" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Označit komentář za nevhodný" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Označit balíček za neaktuální" - -#: templates/packages/flag.html msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "Tento balíček je pravděpodobně typu VCS. Prosíme, %sneoznačujte ho%s za neaktuální jen kvůli tomu, že verze balíčku v repozitáři AUR neodpovídá nejnovějšímu commitu. Balíček by měl být označen za neaktuální pouze pokud došlo ke změně umístění zdroje nebo pokud je následkem změn v upstreamu nutná úprava souboru PKGBUILD." +"By selecting the checkbox, you confirm that you want to disown the package." +msgstr "" -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Pomocí tohoto formuláře je možné označit základní balíček %s%s%s a další tyto balíčky za neaktuální:" +msgid "Confirm to disown the package" +msgstr "" -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Tento formulář %sneslouží%s k hlášení chyb. O těch napište komentář k balíčku." +msgid "Disown" +msgstr "" -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Uveďte, proč si myslíte, že je balíček neaktuální. Nejlépe přijdete i odkaz na oznámení o nové verzi nebo odkaz na zdrojový tarball." +msgid "Only Trusted Users and Developers can disown packages." +msgstr "" -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Komentáře" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Označit" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Pouze registrovaní uživatelé mohou označovat balíčky za neaktuální." - -#: html/pkgmerge.php msgid "Package Merging" -msgstr "Sloučení balíčku" +msgstr "Spojení balíčku" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Sloučit balíček" +#, php-format +msgid "Merge Package: %s" +msgstr "" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Pomocí tohoto formuláře je možné sloučit základní balíček %s%s%s do jiného balíčku." +msgstr "" -#: html/pkgmerge.php msgid "The following packages will be deleted: " -msgstr "Následující balíčky budou smazány:" +msgstr "" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " -msgstr "Po sloučení již není možné tento úkon vrátit zpět." +msgstr "" -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "Zadejte název balíčku, do kterého chcete tento balíček sloučit." +msgstr "" -#: html/pkgmerge.php msgid "Merge into:" -msgstr "Sloučit do:" +msgstr "" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Potvrdit spojení balíčku" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Spojit" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." msgstr "" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Odeslat žádost" +msgid "File Request" +msgstr "Zadat požadavek" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "Uzavřít žádost" +msgstr "Uzavřít požadavek" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "První" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Předchozí" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Další" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Poslední" -#: html/pkgreq.php template/header.php msgid "Requests" -msgstr "Žádosti" +msgstr "Požadavky" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registrace" +msgid "Trusted User" +msgstr "Důvěryhodný uživatel" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Tento formulář použijte k vytvoření účtu." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Podmínky užívání" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Následující dokumenty byly aktualizovány. Pozorně si je prosím přečtěte:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "revize %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Souhlasím s výše uvedenými podmínkami." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." -msgstr "Načtení informací o návrhu se nezdařilo." +msgstr "Nelze obdržet navrhované detaily." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Toto hlasování již skončilo." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." +msgid "Only Trusted Users are allowed to vote." msgstr "" -#: html/tu.php msgid "You cannot vote in an proposal about you." -msgstr "Hlasovat pro sebe se nesmí." +msgstr "Nemůžete volit sami pro sebe." -#: html/tu.php msgid "You've already voted for this proposal." -msgstr "Pro tento návrh jsi již hlasoval/a." +msgstr "Již jste hlasoval." -#: html/tu.php msgid "Vote ID not valid." -msgstr "ID hlasování není platné." +msgstr "Nesprávné ID hlasování." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Současný počet hlasů" -#: html/tu.php msgid "Past Votes" msgstr "Předešlá hlasování" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Hlasující" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Registrace účtu byla pro vaši IP adresu zakázána, pravděpodobně kvůli trvalým spamovým útokům. Za nepříjemnosti se omlouváme." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Missing User ID" -msgstr "Chybí ID uživatele" +msgstr "Chybějící Uživateské ID" -#: lib/acctfuncs.inc.php msgid "The username is invalid." -msgstr "Uživatelské jméno není platné." +msgstr "Chybně zadané uživatelské jméno" -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Délka musí být %s až %s znaků" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Začíná a končí písmenem nebo číslicí" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Může obsahovat pouze jednu tečku, podtržítko nebo spojovník." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Potvrďte své nové heslo:" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." -msgstr "Emailová adresa není platná." +msgstr "Vadná emailová adresa." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "Záložní emailová adresa není platná." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "Domovská stránka je neplatná, zadejte úplnou adresu URL HTTP(s)." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." -msgstr "PGP otisk je neplatný." +msgstr "" -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "Neplatný veřejný klíč SSH." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." -msgstr "Nelze zvýšit oprávnění účtu." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Jazyk není momentálné podporován." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Časové pásmo momentálně není podporováno." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." -msgstr "Uživatelské jméno, %s%s%s, je již používáno." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." -msgstr "Adresa, %s%s%s, je již použita." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "Veřejný SSH klíč, %s%s%s, je již použit." +msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "Chybí vyplněná CAPTCHA." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "Platnost CAPTCHA vypršela. Zkuste to znovu." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "Zadaná CAPTCHA není platná." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." -msgstr "Chyba při vytváření účtu, %s%s%s." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." -msgstr "Účet, %s%s%s, byl úspěšně vytvořen." +msgstr "" -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Na vaši e-mailovou adresu byl odeslán klíč pro obnovení hesla." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." -msgstr "Pro použití svého účtu klikněte na výše uvedený odkaz Přihlášení." +msgstr "" + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." -msgstr "Na účtu nebyly provedeny žádné změny,, %s%s%s." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." -msgstr "Účet, %s%s%s, byl úspěšně změněn." +msgstr "" -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Přihlášení je momentálně pro vaši IP adresu zakázáno. Důvodem je nejspíše opakované zasílání spamu z této adresy. Za nepříjemnosti se omlouváme." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Účet pozastaven" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "Nemáte oprávnění k pozastavení účtů." - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Vaše heslo bylo resetováno. Pokud jste právě vytvořili nový účet, použijte odkaz z potvrzovacího e-mailu a nastavte počáteční heslo. V opačném případě požádejte o resetovací klíč na stránce %s Reset hesla %s ." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Chybné uživatelské jméno nebo heslo." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." -msgstr "Došlo k chybě při pokusu generovat uživatelskou relaci." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." -msgstr "Neplatná kombinace resetovacího klíče a e-mailu." +msgstr "" -#: lib/aur.inc.php template/pkg_details.php msgid "None" -msgstr "Žádný" +msgstr "" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Zobrazení informací o účtu pro %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Chybí ID nebo název základního balíčku." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Nemáte oprávnění upravit tento komentář." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Komentář neexistuje." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Komentář nemůže být prázdný." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Komentář byl přidán" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Pro úpravu informací o balíčcích je nutné se přihlásit." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Chybí ID komentáře." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Nelze připnout více než 5 komentářů." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Nemáte oprávnění připnout tento komentář." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Nemáte oprávnění odepnout tento komentář." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Komentář byl připnut." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Zrušeno připnutí komentáře." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." -msgstr "Načtení informací o balíčku se nezdařilo." +msgstr "Došlo k chybě při získávání detailů o balíčku." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." -msgstr "Informace o balíčku nebyly nalezeny." +msgstr "Detailní informace o balíčku nejsou dostupné." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "Chybná hlavička Referer" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "Nevybrali jste žádné balíčky pro zapnutí oznámení." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "Oznámení pro vybrané balíčky byla zapnuta." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "Nevybrali jste žádné balíčky pro vypnutí oznámení." - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "Vybraný balíček nemá zapnutá oznámení." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "Oznámení pro vybrané balíčky byla vypnuta." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." -msgstr "Před označením balíčku se musíte přihlásit." +msgstr "Před nastavením příznaku balíčků se musíte přihlásit." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." -msgstr "Nebyly vybrány žádné balíčky k označení." +msgstr "Nezvolili jste žádný balíček k označení." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Vybrané balíčky nebyly označeny. Zadejte komentář." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." -msgstr "Vybrané balíčky byly označeny za neaktuální." +msgstr "Zvoleným balíčkům byl nastaven příznak zastaralé." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." -msgstr "Před zrušením označení se musíte přihlásit." +msgstr "Musíte být příhlášeni, abyste mohli odznačit balíčky." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." -msgstr "Nevybrali jste žádné balíčky, jejichž označení chcete zrušit." +msgstr "Nevybrali jste žádne balíčky k odebrání příznaku." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." -msgstr "Označení vybraných balíčků bylo zrušeno." +msgstr "Zvoleným bálíčkům bylo odebráno označení." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." -msgstr "Nemáte oprávnění k odstranění balíčků." +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." -msgstr "Nebyly vybrány žádné balíčky ke smazání." +msgstr "Nevybrali jste žádné balíčky ke smazání." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "Některý z vybraných balíčků neexistuje." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." -msgstr "Vybrané balíčky byly smazány." +msgstr "Zvolené balíčky byly smazány." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." -msgstr "Pro převzetí balíčku je nutné se přihlásit." +msgstr "Musíte být přihlášeni, než si budete moci osvojit balíčky." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "Nemáte oprávnění převzít některý z vybraných balíčků." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." -msgstr "Pro odebrání vlastnictví balíčku je nutné se přihlásit." +msgstr "Musíte být přihlášeni, pro odebrání vlastnictví u svých balíčků." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "Nemáte oprávnění zřeknout se některého z vybraných balíčků." - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." -msgstr "Nevybrali jste žádný balíček k převzetí." +msgstr "Nevybrali jste žádný balíček k osvojení." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." -msgstr "Nebyl vybrán žádný balíček k odebrání vlastnictví." +msgstr "Nevybrali jste žádný balíček pro odebrání vlastnictví." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." -msgstr "Vybrané balíčky byly převzaty." +msgstr "Zvolené balíčky byly osvojeny." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." -msgstr "Vlastnictví vybraných balíčků bylo odebráno." +msgstr "Vybraným balíčkům bylo odebráno vlastnictví." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." -msgstr "Pro hlasování pro balíček je nutné se přihlásit." +msgstr "Před hlasováním se musíte přihlásit." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." -msgstr "Pro odebrání hlasu balíčku je nutné se přihlásit." +msgstr "Musíte být přihlášeni, než budete moci odebrat hlasování pro balíčky." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." -msgstr "Nebyly vybrány žádné balíčky pro hlasování." +msgstr "Nezvolili jste žádné balíčky k hlasování." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." -msgstr "Vybraným balíčkům byl odebrán hlas." +msgstr "Vaše hlasování bylo odebráno vybraným balíčkům." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." -msgstr "Vybraným balíčkům byl přidán hlas." +msgstr "Vaše hlasování bylo započteno pro vybrané balíčky." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." -msgstr "Nelze přidat do seznamu uživatelů k obeznámení." +msgstr "Nelze přidat do seznamu upozornění." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." -msgstr "Byly jste přidáni do seznamu uživatelů k obeznámení o balíčku %s." +msgstr "Byly jste přidáni do seznamu oznámení ohledně %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." -msgstr "Byli jste odebráni ze seznamu uživatelů k obeznámení o balíčku %s." +msgstr "Byli jste odebrání ze seznamu upozornění ohledně %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Nemáte oprávnění k obnovení tohoto komentáře." +msgid "You must be logged in before you can edit package information." +msgstr "" +"Musíte být přihlášeni, než budete moci upravovat informace o balíčcích." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Komentář byl obnoven." +msgid "Missing comment ID." +msgstr "Chybějící ID komentáře." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Pro smazání tohoto komentáře nemáte oprávnění." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Komentář byl smazán." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Komentář byl upraven." +msgid "You are not allowed to delete this comment." +msgstr "Nemáte oprávnění pro smazání tohoto komentáře." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Nemáte oprávnění upravit klíčová slova tohoto balíčku." +msgid "Missing category ID." +msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Klíčová slova základního balíčku byla aktualizována." +msgid "Invalid category ID." +msgstr "Chybné ID kategorie." + +msgid "You are not allowed to change this package category." +msgstr "" + +msgid "Package category changed." +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Nemáte oprávnění spravovat spolusprávce tohoto balíčku." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Neplatné uživatelské jméno: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "Spolusprávci základního balíčku byli aktualizováni." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" -msgstr "Zobrazit podrobnosti o balíčcích pro" +msgstr "" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "vyžaduje %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." -msgstr "Před podáním žádosti se musíte přihlásit." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." -msgstr "Neplatný název: jsou povolena pouze malá písmena." +msgstr "Chybný název: jsou povolena pouze malá písmena." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." -msgstr "Pole s komentáři nesmí být prázdné." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." -msgstr "Neplatný typ požadavku." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." -msgstr "Žádost byla úspěšně přidána." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." -msgstr "Neplatný důvod." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." -msgstr "Pouze důvěryhodní uživatelé a vývojáři mohou zavírat žádosti." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." -msgstr "Žádost byla úspěšně uzavřena." +msgstr "" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Tento formulář můžete použít k trvalému odstranění účtu repozitáře AUR %s." +msgstr "" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." -msgstr "%sVAROVÁNÍ%s: Tuto akci nelze vrátit zpět." +msgstr "" -#: template/account_delete.php msgid "Confirm deletion" -msgstr "Potvrdit smazání" +msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Uživatelské jméno" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Typ účtu" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Uživatel" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Vyvojář" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" +msgid "Trusted User & Developer" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Emailová adresa" -#: template/account_details.php -msgid "hidden" -msgstr "skrytý" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Skutečné jméno" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Domovská stránka" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" -msgstr "Přezdívka na IRC" +msgstr "IRC přezdívka" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" -msgstr "Otisk klíče PGP" +msgstr "" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" -msgstr "Stav" +msgstr "Status" -#: template/account_details.php msgid "Inactive since" msgstr "Neaktivní od" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Aktivní" -#: template/account_details.php -msgid "Registration date:" -msgstr "Datum registrace:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "neznámý" - -#: template/account_details.php msgid "Last Login" msgstr "Poslední přihlášení" -#: template/account_details.php msgid "Never" msgstr "Nikdy" -#: template/account_details.php msgid "View this user's packages" msgstr "Zobrazit balíčky tohoto uživatele" -#: template/account_details.php msgid "Edit this user's account" msgstr "Upravit tento uživatelský účet" -#: template/account_details.php -msgid "List this user's comments" -msgstr "Zobrazit komentáře tohoto uživatele" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." -msgstr "Pokud chcete trvale smazat tento účet, klikněte %szde%s." +msgstr "" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Podrobnosti o uživateli naleznete %szde%s." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Komentáře tohoto účtu naleznete %szde%s." - -#: template/account_edit_form.php msgid "required" -msgstr "povinný údaj" +msgstr "vyžadováno" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Vaše uživatelské jméno je vaše přihlašovací jméno. Je veřejně viditelné i v případě neaktivního účtu." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" -msgstr "Běžný uživatel" +msgstr "Obyčejný uživatel" + +msgid "Trusted user" +msgstr "Důvěryhodný uživatel" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Account Suspended" msgstr "Účet pozastaven" -#: template/account_edit_form.php msgid "Inactive" msgstr "Neaktivní" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Ujistěte se, že jste správně zadali svou e-mailovou adresu, jinak budete zablokováni." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Skrýt email" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "Pokud svou emailovou adresu neskryjete, bude viditelná všem registrovaným uživatelům repozitáře AUR. Skrytá emailová adresa je viditelná pouze správcům systému Arch Linux." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Záložní emailová adresa" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "Volitelná záložní adresa, pomocí které je možné obnovit přístup k účtu do repozitáře AUR i bez přístupu k hlavní emailové adrese." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "Odkazy na obnovení hesla jsou vždy zasílány na hlavní i záložní emailovou adresu." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "Záložní emailová adresa je vždy viditelná jen správcům systému Arch Linux, bez ohledu na nastavení %s." - -#: template/account_edit_form.php -msgid "Language" -msgstr "Jazyk" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Časové pásmo" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Pokud chcete své heslo změnit, zadejte nové heslo a pak nové heslo ještě jednou pro potvrzení." - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Heslo znovu" -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Následující informace jsou požadovány pouze v případě, že máte v plánu do uživatelského repozitáře systému Arch Linux přidávat balíčky." +msgid "Language" +msgstr "Jazyk" -#: templates/partials/account_form.html msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "Veřejný SSH klíč" +msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Nastavení oznámení" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Oznamovat nové komentáře" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Oznamovat aktualizace balíčků" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Oznamovat změny vlastnictví" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "Pro potvrzení změn profilu zadejte své aktuální heslo:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "Vaše aktuální heslo:" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "Abychom zamezili automatizované tvorbě účtů v repozitáři AUR, laskavě žádáme uživatele, aby zadali výstup z následujícího příkazu:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Odpovědět" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Aktualizovat" -#: template/account_edit_form.php msgid "Create" msgstr "Vytvořit" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Reset" -#: template/account_search_results.php msgid "No results matched your search criteria." -msgstr "Zadaným kritériím neodpovídají žádné výsledky." +msgstr "Pro Váš dotaz nebyl nalezen žádný odpovídající výsledek." -#: template/account_search_results.php msgid "Edit Account" msgstr "Upravit účet" -#: template/account_search_results.php msgid "Suspended" msgstr "Pozastavený" -#: template/account_search_results.php msgid "Edit" msgstr "Upravit" -#: template/account_search_results.php msgid "Less" msgstr "Méně" -#: template/account_search_results.php msgid "More" msgstr "Více" -#: template/account_search_results.php msgid "No more results to display." msgstr "Žádné další výsledky." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Pomocí tohoto formuláře je možné přidat spolusprávce pro %s%s%s (jedno uživatelské jméno na řádek):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "Uživatelé" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "Uložit" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Komentář k označení za neaktuální: %s" +msgid "My Packages" +msgstr "Moje balíčky" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "Uživatel %s%s%s označil balíček %s%s%s za neaktuální dne %s%s%s z následujícího důvodu:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "Balíček %s%s%s nebyl označen za neaktuální." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Zpět na podrobnosti balíčku" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Autorská práva %s 2004-%d vývojový tým aurweb." - -#: template/header.php msgid " My Account" msgstr "Můj účet" -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "Akce balíčku" +msgid "Register" +msgstr "Registrovat" + +msgid "unknown" +msgstr "neznámý" + +msgid "Package Base Details" +msgstr "" + +msgid "Package Actions" +msgstr "" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Zobrazit PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "Zobrazit změny" +msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" -msgstr "Stáhnout snímek" +msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Prohledat wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Označeno za neaktuální (%s)" +msgid "Flagged out-of-date" +msgstr "Označeno jako zastaralé" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" -msgstr "Označit balíček za neaktuální" +msgstr "Označit balíček jako zastaralý" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Zrušit označení balíčku" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Vzít zpět hlas" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Hlasovat pro tento balíček" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Vypnout oznámení" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Zapnout oznámení" +msgid "Notify of new comments" +msgstr "Oznamovat nové komentáře" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "Spravovat spolusprávce" +msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" -msgstr[0] "%d žádost na vyřízení" +msgstr[0] "%d čekající požadavek" msgstr[1] "%d čekající požadavky" -msgstr[2] "%d žádostí na vyřízení" -msgstr[3] "%d žádostí na vyřízení" +msgstr[2] "%d čekajících požadavků" + +msgid "Delete Package" +msgstr "Smazat balíček" + +msgid "Merge Package" +msgstr "" -#: template/pkgbase_actions.php msgid "Adopt Package" -msgstr "Převzít balíček" +msgstr "Adoptovat balíček" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Informace o základním balíčku" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" -msgstr "URL pro příkaz git clone" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "jen pro čtení" +msgid "Category" +msgstr "Kategorie" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "kliknutím zkopírujete" +msgid "Change category" +msgstr "Upravit kategorii" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Klíčová slova" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" -msgstr "Vytvořil" +msgstr "" + +#, php-format +msgid "View account information for %s" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Maintainer" msgstr "Správce" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" -msgstr "Naposledy zabalil" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Hlasy" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularita" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" -msgstr "Poprvé vytvořil" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Naposledy aktualizováno" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Upravit komentář pro: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Přidat komentář" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "Identifikátory git commitů v repozitáři AUR a URL jsou automaticky převáděny na klikatelné odkazy." +msgid "Comment has been added." +msgstr "Komentář byl přidán" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "Značkovací %ssyntaxe Markdown%s je částěčně podporována." +msgid "View all comments" +msgstr "Zobrazit všechny komentáře" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Připnuté komentáře" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Nejnovější komentáře" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Komentáře uživatele" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s přidal komentář %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Anonymní komentář dne %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "Okomentoval balíček %s dne %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "smazáno dne %s uživatelem %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "smazáno dne %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "upraveno %s upravil %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "upraveno %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Zrušit smazání komentáře" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Smazat komentář" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Připnout komentář" +#, php-format +msgid "Comment by %s" +msgstr "" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Odepnout komentář" +msgid "Anonymous comment" +msgstr "Anonymní komentář" + +msgid "deleted" +msgstr "smazáno" + +msgid "All comments" +msgstr "Všechny komentáře" -#: template/pkg_details.php msgid "Package Details" -msgstr "Informace o balíčku" +msgstr "Detaily balíčku" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" -msgstr "Základní balíček" +msgstr "" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Popis" -#: template/pkg_details.php msgid "Upstream URL" -msgstr "URL pro upstream" +msgstr "" -#: template/pkg_details.php msgid "Visit the website for" -msgstr "Navštívit web pro" +msgstr "" -#: template/pkg_details.php msgid "Licenses" msgstr "Licence" -#: template/pkg_details.php msgid "Groups" msgstr "Skupiny" -#: template/pkg_details.php msgid "Conflicts" msgstr "Konflikty" -#: template/pkg_details.php msgid "Provides" msgstr "Poskytuje" -#: template/pkg_details.php msgid "Replaces" msgstr "Nahrazuje" -#: template/pkg_details.php msgid "Dependencies" -msgstr "Vyžadované balíčky" +msgstr "Závislosti" -#: template/pkg_details.php msgid "Required by" -msgstr "Vyžadováno balíčky" +msgstr "Vyžadováno" -#: template/pkg_details.php msgid "Sources" msgstr "Zdroje" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Zavřít požadavek: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Pomocí tohoto formuláře je možné zavřít požadavek pro základní balíček %s%s%s." +msgstr "" + +msgid "Note" +msgstr "" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Pole pro komentáře může být prázdné. Silně se však doporučuje nějaký komentář přidat, pokud požadavek odmítáte." +msgstr "" -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Důvod" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Přijato" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Zamítnuto" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Komentáře" + +#, php-format +msgid "File Request: %s" +msgstr "Zadat požadavek: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Pomocí tohoto formuláře je možné vytvořit požadavek pro základní balíček %s%s%s, který obsahuje tyto další balíčky:" +msgstr "" -#: template/pkgreq_form.php msgid "Request type" -msgstr "Typ žádosti" +msgstr "Typ požadavku" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Smazání" -#: template/pkgreq_form.php msgid "Orphan" -msgstr "Odebrání vlastnictví" +msgstr "" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" -msgstr "Sloučení" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." msgstr "" -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Žádné žádosti neodpovídaly vašim kritériím vyhledávání." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." -msgstr[0] "Byl nalezen %d požadavek na balíček." -msgstr[1] "Byly nalezeny %d požadavky na balíček." -msgstr[2] "Bylo nalezeno %d požadavků na balíček." -msgstr[3] "Bylo nalezeno %d požadavků na balíček." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." -msgstr "Stránka %d z %d." +msgstr "" -#: template/pkgreq_results.php msgid "Package" -msgstr "Balíček" +msgstr "" -#: template/pkgreq_results.php msgid "Filed by" -msgstr "Zadal" +msgstr "" -#: template/pkgreq_results.php msgid "Date" msgstr "Datum" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "Zbývá asi %dden" -msgstr[1] "Zbývají asi %d dny" -msgstr[2] "Zbývá asi %d dní" -msgstr[3] "Zbývá asi %d dní" +msgid "~%d days left" +msgstr "" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" -msgstr[0] "Zbývá asi %d hodina" -msgstr[1] "Zbývají asi %d hodiny" -msgstr[2] "Zbývá asi %d hodin" -msgstr[3] "Zbývá asi %d hodin" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: template/pkgreq_results.php msgid "<1 hour left" -msgstr "Zbývá méně než 1 hodina" +msgstr "" -#: template/pkgreq_results.php msgid "Accept" msgstr "Přijmout" -#: template/pkgreq_results.php msgid "Locked" msgstr "Zamčeno" -#: template/pkgreq_results.php msgid "Close" msgstr "Uzavřít" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Čeká na vyřízení" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Uzavřeno" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Jméno, popis" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Pouze jméno" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Přesné jméno" -#: template/pkg_search_form.php msgid "Exact Package Base" -msgstr "Přesný název základního balíčku" +msgstr "" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Spolusprávce" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Správce, spolusprávce" - -#: template/pkg_search_form.php msgid "All" msgstr "Vše" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Označené" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Neoznačené" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Název" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" -msgstr "Hlasoval/a jsem" +msgstr "Hlasováno" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Naposledy změněno" +msgid "Age" +msgstr "Stáří" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Vzestupně" -#: template/pkg_search_form.php msgid "Descending" msgstr "Sestupně" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Zadat kritéria vyhledávání" -#: template/pkg_search_form.php +msgid "Any" +msgstr "jakákoliv" + msgid "Search by" msgstr "Vyhledat dle" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Klíčová slova" + msgid "Out of Date" -msgstr "Neaktuální" +msgstr "Zastaralé" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" -msgstr "Řadit dle" +msgstr "Seřadit dle" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Řadit" -#: template/pkg_search_form.php msgid "Per page" -msgstr "Výsledků na stránku" +msgstr "Na jedné stránce" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" -msgstr "Hledat" +msgstr "Jdi" -#: template/pkg_search_form.php msgid "Orphans" -msgstr "Bez vlastníka" +msgstr "Sirotci" -#: template/pkg_search_results.php msgid "Error retrieving package list." -msgstr "Načtení seznamu balíčků se nezdařilo." +msgstr "Chyba při získávání seznamu balíčků." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." -msgstr "Zadaným kritériím neodpovídá žádný balíček." +msgstr "Žádný balíček neodpovídá zadaným kritériím." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "Nalezen %d balíček." msgstr[1] "Nalezeny %d balíčky." msgstr[2] "Nalezeno %d balíčků." -msgstr[3] "Nalezeno %d balíčků." -#: template/pkg_search_results.php msgid "Version" msgstr "Verze" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Popularita je vypočtena jako součet všech hlasů, přičemž každý hlas je vážen faktorem %.2f za den od jeho vytvoření.." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Ano" -#: template/pkg_search_results.php msgid "orphan" -msgstr "bez vlastníka" +msgstr "sirotek" -#: template/pkg_search_results.php msgid "Actions" msgstr "Akce" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Označit jako zastaralý" + msgid "Unflag Out-of-date" -msgstr "Zrušit označení za neaktuální" +msgstr "Odebrat příznak zastaralý" -#: template/pkg_search_results.php msgid "Adopt Packages" -msgstr "Převzít balíčky" +msgstr "Osvojit balíček" -#: template/pkg_search_results.php msgid "Disown Packages" -msgstr "Zřeknout se balíčků" +msgstr "Odebrat vlastnictví" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Smazat balíčky" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Potvrdit" -#: template/search_accounts_form.php msgid "Any type" msgstr "Jakýkoliv" -#: template/search_accounts_form.php msgid "Search" msgstr "Hledat" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Statistiky" -#: template/stats/general_stats_table.php msgid "Orphan Packages" -msgstr "Bez vlastníka" +msgstr "Balíčků bez správce" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" -msgstr "Přidáno (poslední týden)" +msgstr "Přidaných balíčků za posledních 7 dní" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" -msgstr "Aktualizováno (poslední týden)" +msgstr "Aktualizovaných balíčků za posledních 7 dní" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" -msgstr "Aktualizováno (poslední rok)" +msgstr "Aktualizovaných balíčků v posledním roce" -#: template/stats/general_stats_table.php msgid "Packages never updated" -msgstr "Nikdy neaktualizováno" +msgstr "Balíčků, které nebyly nikdy aktualizovány" -#: template/stats/general_stats_table.php msgid "Registered Users" -msgstr "Registrovaní uživatelé" +msgstr "Registrovaných uživatelů" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Důvěryhodných uživatelů" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Nedávné aktualizace" -#: template/stats/updates_table.php -msgid "more" -msgstr "více" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Moje statistiky" -#: template/tu_details.php -msgid "Proposal Details" -msgstr "Informace o návrhu" +msgid "Packages in unsupported" +msgstr "" + +msgid "Proposal Details" +msgstr "Detaily návrhu" -#: template/tu_details.php msgid "This vote is still running." msgstr "Hlasování stále probíhá." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" -msgstr "Vytvořeno: %s od %s" +msgstr "Vloženo: %s od %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Konec" -#: template/tu_details.php msgid "Result" msgstr "Výsledek" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Ne" -#: template/tu_details.php msgid "Abstain" msgstr "Zdržet se" -#: template/tu_details.php msgid "Total" msgstr "Celkem" -#: template/tu_details.php msgid "Participation" msgstr "Účast" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" -msgstr "Poslední hlasy důvěryhodného uživatele" +msgstr "" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Naposledy hlasováno" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." -msgstr "Nebyly nalezeny žádné výsledky." +msgstr "Žádné výsledky." -#: template/tu_list.php msgid "Start" msgstr "Začátek" -#: template/tu_list.php msgid "Back" msgstr "Zpět" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "Obnovení hesla k účtu repozitáře AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "Obdrželi jsme žádost o obnovení hesla k účtu {user}, který je spojen s touto emailovou adresou. Pokud chcete heslo obnovit, použijte níže uvedený odkaz [1]. V opačném případě tuto zprávu ignorujte a ke žádné změně nedojde." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Vítejte v repozitáři AUR, uživatelském repozitáři systému Arch Linux" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Vítejte v uživatelském repozitáři systému Arch Linux! Pro nastavení počátečního heslo nového účtu použijte níže uvedený odkaz [1]. Pokud odkaz nefunguje, zkuste ho zkopírovat a vložit prohlížeče." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "Komentář na webu AUR u balíčku {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "Uživatel {user} [1] přidal k balíčku {pkgbase} [2] následující komentář:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Pokud již nechcete dostávat oznámení související s tímto balíčkem, na stránce balíčku [2] vyberte možnost \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "Aktualizace balíčku na webu AUR: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "Uživatel {user} [1] provedl aktualizaci balíčku {pkgbase} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "Oznámení o neaktuálním stavu balíčku {pkgbase} na webu AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Váš balíček {pkgbase} [1] byl uživatel {user} [2] označen za neaktuální:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "Oznámení o změně vlastnictví balíčku {pkgbase} na webu AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "Balíček {pkgbase} [1] byl převzat uživatelem {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "Uživatel {user} [2] se zřekl balíčku {pkgbase} [1] a tento balíček je tak nyní bez vlastníka." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "Oznámení o spolusprávě balíčku {pkgbase} na webu AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "Byli jste přidáni jako spolusprávce balíčku {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "Byli jste odebráni ze seznamu spolusprávců balíčku {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "Smazání balíčku {pkgbase} na webu AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "Uživatel {user} [1] sloučil balíček {old} [2] do balíčku {new} [3].\n\n-- \nPokud již nechcete dostávat oznámení související s tímto balíčkem, na stránce balíčku [3] vyberte možnost \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "Uživatel {user} [1] smazal balíček {pkgbase} [2].\n\nNadále již nebude dostávat oznámení související s tímto balíčkem." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Nezapomeňte prosím hlasovat o návrhu {id} [1]. Hlasování končí za méně než 48 hodin." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "Poskytnutý typ účtu je neplatný." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "Nemáte oprávnění ke změnám typů účtů." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "Pro změnu typu tohoto účtu na %s nemáte oprávnění." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "Žádné žádosti o odebrání vlastnictví balíčku %s momentálně neexistují." - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "Interní chyba serveru" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "Došlo k fatální chybě." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "Detaily chyby byly zalogovány a budou co nejdříve zkontrolovány administrátorem. Za jakékoli způsobené nepříjemnosti se omlouváme." - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "Chyba serveru AUR" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "Komentáře k uzavření žádostí vztahujících se k tomuto balíčku..." - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "Tato akce uzavře všechny žádosti čekající na vyřízení vztahující se k tomuto balíčku. Pokud není vyplněno textové Pole %sKomentáře\"%s, komentář k uzavření žádostí bude vygenerován automaticky." - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/da.po b/po/da.po index b8768beb..b43917c7 100644 --- a/po/da.po +++ b/po/da.po @@ -1,893 +1,565 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Linuxbruger , 2018 -# Louis Tim Larsen , 2015 # Lukas Fleischer , 2011 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Linuxbruger , 2018\n" -"Language-Team: Danish (http://app.transifex.com/lfleischer/aurweb/language/da/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Danish (http://www.transifex.com/projects/p/aur/language/" +"da/)\n" +"Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" -msgstr "Side ikke fundet" +msgstr "" -#: html/404.php msgid "Sorry, the page you've requested does not exist." -msgstr "Beklager, den forespurgte side eksisterer ikke." +msgstr "" -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Note" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Git klone URL'er, er ikke ment til at blive åbnet i en browser." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "For at klone Git lageret af %s, kør %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Klik %sher%s for at vende tilbage til %s detalje siden." - -#: html/503.php msgid "Service Unavailable" -msgstr "Service utilgængelig" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Lad vær med at gå i panik! Denne side er nede på grund af vedligeholdelse. Vi vil være tilbage snart." +msgstr "" -#: html/account.php msgid "Account" -msgstr "Konto" +msgstr "" -#: html/account.php template/header.php msgid "Accounts" msgstr "Konti" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Du har ikke tilladelse til dette område." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Kunne ikke hente information om den specifikke bruger." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Du har ikke tilladelse til at redigere denne konto." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Brug denne formular til at søge i eksisterende konti." -#: html/account.php msgid "You must log in to view user information." msgstr "Du skal være logget ind for at se brugerinformation." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Brug denne formular til at oprette en konto." + msgid "Add Proposal" -msgstr "Tilføj Forslag" +msgstr "" -#: html/addvote.php msgid "Invalid token for user action." -msgstr "Ugyldigt tegn for bruger handling." +msgstr "" -#: html/addvote.php msgid "Username does not exist." msgstr "Brugernavnet findes ikke." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s har allerede et forslag kørende for dem." -#: html/addvote.php msgid "Invalid type." -msgstr "Ugyldig type." +msgstr "" -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Forslag må ikke være tomt." -#: html/addvote.php msgid "New proposal submitted." msgstr "Nyt forslag tilføjet." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Fremsæt et forslag til afstemning." -#: html/addvote.php msgid "Applicant/TU" -msgstr "Ansøger/TU" +msgstr "" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(tomt hvis ikke relevant)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Type" -#: html/addvote.php -msgid "Addition of a Package Maintainer" +msgid "Addition of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer" +msgid "Removal of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" +msgid "Removal of a TU (undeclared inactivity)" msgstr "" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Forslag" -#: html/addvote.php msgid "Submit" msgstr "Tilføj" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Håndter Co-vedligeholdere" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Rediger kommentar" - -#: html/home.php template/header.php -msgid "Dashboard" msgstr "" -#: html/home.php template/header.php msgid "Home" msgstr "Hjem" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Mine Markerede Pakker" - -#: html/home.php -msgid "My Requests" -msgstr "Mine forespørgelser" - -#: html/home.php -msgid "My Packages" -msgstr "Mine Pakker" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Søg efter pakker jeg vedligeholder" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Co-Vedligeholdt Pakker" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Søg efter pakker jeg co-vedligeholder" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Bidragede PKGBUILDs %sskal%s være i overensstemmelse med %sArch Pakke Standarder%s ellers vil de blive slettet!" +msgstr "" -#: html/home.php msgid "Remember to vote for your favourite packages!" -msgstr "Husk at stemme for dine favorit pakker!" +msgstr "" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Nogle pakker kan være stillet til rådighed som binær i (fællesskab)." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" -#: html/home.php msgid "DISCLAIMER" -msgstr "ANSVARSFRASKRIVELSE" +msgstr "" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "AUR pakker er bruger produceret materiale. Hvilken som helst brug af de filer der er stillet til rådighed er på din egen risiko." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" -#: html/home.php -msgid "Learn more..." -msgstr "Lær mere..." - -#: html/home.php msgid "Support" -msgstr "Support" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Pakke Forespørgelser" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Der er tre typer af forespørgelser der kan udfyldes i%sPakke Handlinger%s boxen på pakke detaljer siden:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Forespørg en pakke til at blive forstødt, f.eks når vedligeholderen er inaktiv og pakkerne er blevet markeret som dato-udløbet i lang tid." - -#: html/home.php -msgid "Deletion Request" -msgstr "Sletning Forespørgsel" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + msgid "Merge Request" msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php msgid "Discussion" msgstr "Diskussion" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" -msgstr "Pakkesøgning" +msgstr "" -#: html/index.php msgid "Adopt" -msgstr "Adopter" +msgstr "" -#: html/index.php msgid "Vote" msgstr "Stem" -#: html/index.php msgid "UnVote" msgstr "Tilbagetræk stemme" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Påmindelse" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Ingen påmindelse" -#: html/index.php +msgid "Flag" +msgstr "" + msgid "UnFlag" msgstr "" -#: html/login.php template/header.php msgid "Login" msgstr "Log ind" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Logget ind som: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Log ud" -#: html/login.php msgid "Enter login credentials" msgstr "" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "Brugernavn" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Adgangskode" -#: html/login.php msgid "Remember me" msgstr "Husk mig" -#: html/login.php msgid "Forgot Password" -msgstr "Glemt adgangskode" +msgstr "" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." msgstr "" -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Søgekriterier" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Pakker" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Fejl ved modtagning af pakkedetaljer." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Du mangler at udfylde et påkrævet felt." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Adgangskoderne stemmer ikke overens." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Din adgangskode skal være mindst %s tegn." -#: html/passreset.php msgid "Invalid e-mail." -msgstr "Ugyldig mail." - -#: html/passreset.php -msgid "Password Reset" -msgstr "Nulstil adgangskode" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "Tjek din mail for bekræftelses-link." - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "Din adgangskode blev nulstillet." - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" msgstr "" -#: html/passreset.php -msgid "Enter your new password:" -msgstr "Indtast din nye adgangskode:" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "Bekræft din nye adgangskode:" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "Forsæt" - -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." msgstr "" -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" +msgid "Password Reset" msgstr "" -#: html/pkgbase.php -msgid "Package Bases" +msgid "Check your e-mail for the confirmation link." +msgstr "" + +msgid "Your password has been reset successfully." +msgstr "" + +msgid "Confirm your e-mail address:" +msgstr "" + +msgid "Enter your new password:" +msgstr "" + +msgid "Confirm your new password:" +msgstr "" + +msgid "Continue" +msgstr "" + +#, php-format +msgid "" +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" + +msgid "Enter your e-mail address:" msgstr "" -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "" -#: html/pkgdel.php msgid "Package Deletion" msgstr "" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Slet pakke" +#, php-format +msgid "Delete Package: %s" +msgstr "" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " msgstr "" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " -msgstr "Sletning af en pakke er permanent" +msgstr "" -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "" -#: html/pkgdel.php msgid "Confirm package deletion" -msgstr "Bekræft sletning af pakke" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "Slet" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." msgstr "" -#: html/pkgdisown.php template/pkgbase_actions.php +msgid "Delete" +msgstr "" + +msgid "Only Trusted Users and Developers can delete packages." +msgstr "" + msgid "Disown Package" msgstr "" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Kommentarer" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php msgid "Package Merging" msgstr "" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" +#, php-format +msgid "Merge Package: %s" msgstr "" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "" -#: html/pkgmerge.php msgid "The following packages will be deleted: " -msgstr "Følgende pakker vil blive slettet:" +msgstr "" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "" -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "" -#: html/pkgmerge.php msgid "Merge into:" msgstr "" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." msgstr "" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" +msgid "File Request" msgstr "" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "Luk forspørgsel" +msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" -msgstr "Første" +msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" -msgstr "Tidligere" +msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Næste" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" -msgstr "Sidste" +msgstr "" -#: html/pkgreq.php template/header.php msgid "Requests" -msgstr "Forspørgelser" - -#: html/register.php template/header.php -msgid "Register" -msgstr "Register" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "Brug denne formular til at oprette en konto." - -#: html/tos.php -msgid "Terms of Service" msgstr "" -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" +msgid "Trusted User" +msgstr "Betroet bruger (TU)" -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Kunne ikke hente detaljer om forslaget." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Afstemningen er lukket for dette forslag." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." +msgid "Only Trusted Users are allowed to vote." msgstr "" -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Du kan ikke stemme i et forslag om dig selv." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Du har allerede stemt ved dette forslag." -#: html/tu.php msgid "Vote ID not valid." msgstr "Stemme ID er ikke gyldigt." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Aktuelle stemmer" -#: html/tu.php msgid "Past Votes" msgstr "" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." msgstr "" -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Manglende bruger-ID" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Brugernavnet er ugyldigt." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Skal være mellem %s og %s tegn." -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Start og slut med et bogstav eller tal" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Kan kun indeholde ét punktum, én bundstreg eller én bindestreg." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "E-mail adressen er ugyldig." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "" -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "" -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Sproget er ikke understøttet på nuværende tidspunkt." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "" -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "" -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "" -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." msgstr "" -#: lib/acctfuncs.inc.php msgid "Account suspended" -msgstr "Konto suspenderet" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " @@ -895,1483 +567,740 @@ msgid "" "please request a reset key on the %sPassword Reset%s page." msgstr "" -#: lib/acctfuncs.inc.php msgid "Bad username or password." -msgstr "Forkert brugernavn eller adgangskode" +msgstr "" -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "" -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "" -#: lib/aur.inc.php template/pkg_details.php msgid "None" -msgstr "Ingen" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" msgstr "" -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Kommentaren blev tilføjet" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Du skal være logget ind for at redigere pakkeoplysninger." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Manglende kommentar ID." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Fejl ved modtagelse af pakkedetaljer." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Kunne ikke finde pakkedetaljerne.." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Du skal være logget ind for at markere pakker." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Du har ikke valgt nogle pakker at markere." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "De valgte pakker er markeret forældet." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Du skal være logget ind for at afmarkere pakker." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Du har ikke valgt nogle at afmarkere." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "De valgte pakker er afmarkeret." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." -msgstr "Du har ikke tilladelse til, at slette pakker." +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Du har ikke valgt nogle pakker at slette." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "De valgte pakker er blevet slettet." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Du skal være logget ind for at adoptere pakker." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Du skal være logget ind for at opgive ejerskabet for pakker." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Du har ikke valgt nogle pakker at adoptere." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Du har ikke valgt nogle pakker at opgive ejerskabet for." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "De valgte pakker er adopteret." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "De valgte pakker er blevet efterladt." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Du skal være logget ind for at stemme på pakker." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Du skal være logget ind for at fjerne din stemme fra pakker." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Du har ikke valgt nogle pakker at stemme på." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Dine stemmer er fjernet fra de valgte pakker." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Din stemme er afgivet for de valgte pakker." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Kunne ikke tilføje til listen over påmindelser." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Du vil nu modtage besked, når der kommer nye kommentarer til %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Du vil ikke længere modtage besked ved nye kommentarer for %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" +msgid "You must be logged in before you can edit package information." +msgstr "Du skal være logget ind for at redigere pakkeoplysninger." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" +msgid "Missing comment ID." +msgstr "Manglende kommentar ID." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Du har ikke rettigheder til at slette denne kommentar." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Kommentaren er slettet." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." +msgid "You are not allowed to delete this comment." +msgstr "Du har ikke rettigheder til at slette denne kommentar." + +msgid "Missing category ID." msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." +msgid "Invalid category ID." +msgstr "Ugyldigt kategori ID." + +msgid "You are not allowed to change this package category." msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." +msgid "Package category changed." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Ugyldigt brugernavn: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" -msgstr "Vis pakkedeltaljer for" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Ugyldigt navn: kun små bogstaver er tilladt." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." -msgstr "Ugyldig årsag" +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "" -#: template/account_delete.php msgid "Confirm deletion" -msgstr "Bekræft sletning" +msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Brugernavn" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Kontotype" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Bruger" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Udvikler" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" +msgid "Trusted User & Developer" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "E-mail adresse" -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Rigtigt navn" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC kaldenavn" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Status" -#: template/account_details.php msgid "Inactive since" -msgstr "Inaktiv siden" +msgstr "" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Aktiv" -#: template/account_details.php -msgid "Registration date:" +msgid "Last Login" msgstr "" -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "ukendt" - -#: template/account_details.php -msgid "Last Login" -msgstr "Sidste login" - -#: template/account_details.php msgid "Never" msgstr "Aldrig" -#: template/account_details.php msgid "View this user's packages" msgstr "Vis pakker fra denne bruger" -#: template/account_details.php msgid "Edit this user's account" msgstr "" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "påkrævet" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Normal bruger" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Betroet bruger (TU)" + msgid "Account Suspended" msgstr "Konto suspenderet" -#: template/account_edit_form.php msgid "Inactive" -msgstr "Inaktiv" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." msgstr "" -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Sprog" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Bekræft adgangskode" -#: template/account_edit_form.php +msgid "Language" +msgstr "Sprog" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Opdater" -#: template/account_edit_form.php msgid "Create" msgstr "Opret" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Nulstil" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Ingen resultater opfyldte dine søgekriterier." -#: template/account_search_results.php msgid "Edit Account" msgstr "Rediger konto" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspenderet" -#: template/account_search_results.php msgid "Edit" msgstr "" -#: template/account_search_results.php msgid "Less" msgstr "Færre" -#: template/account_search_results.php msgid "More" msgstr "Flere" -#: template/account_search_results.php msgid "No more results to display." msgstr "Ikke flere resultater at vise." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "Brugere" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "Gem" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" msgstr "" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" +msgid "My Packages" +msgstr "Mine pakker" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php msgid " My Account" -msgstr "Min konto" +msgstr "" + +msgid "Register" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "Package Base Details" +msgstr "" -#: template/pkgbase_actions.php msgid "Package Actions" msgstr "" -#: template/pkgbase_actions.php msgid "View PKGBUILD" -msgstr "Vis PKGBUILD" +msgstr "" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "Vis ændringer" +msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" +msgid "Flagged out-of-date" msgstr "" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "" -#: template/pkgbase_actions.php msgid "Remove vote" -msgstr "Fjern stemme" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "Stem på denne pakke" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "Deaktiver notifikationer" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" msgstr "" -#: template/pkgbase_actions.php +msgid "Vote for this package" +msgstr "" + +msgid "Disable notifications" +msgstr "" + +msgid "Notify of new comments" +msgstr "" + msgid "Manage Co-Maintainers" msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "" msgstr[1] "" -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "Adopter pakke" - -#: template/pkgbase_details.php -msgid "Package Base Details" +msgid "Delete Package" +msgstr "" + +msgid "Merge Package" +msgstr "" + +msgid "Adopt Package" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" +msgid "Category" +msgstr "Kategori" + +msgid "Change category" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Nøgleord" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" -msgstr "Indsender" +msgstr "" + +#, php-format +msgid "View account information for %s" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Maintainer" msgstr "Ejer" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" -msgstr "Sidste pakker" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Stemmer" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularitet" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" -msgstr "Først tilføjet" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" -msgstr "Sidst opdateret" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" msgstr "" -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" -msgstr "Tilføj kommentar" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." msgstr "" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." +msgid "Comment has been added." msgstr "" -#: template/pkg_comments.php -msgid "Pinned Comments" +msgid "View all comments" msgstr "" -#: template/pkg_comments.php msgid "Latest Comments" -msgstr "Seneste kommentarer" - -#: template/pkg_comments.php -msgid "Comments for" msgstr "" -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Slet kommentar" -#: template/pkg_comments.php -msgid "Pin comment" +#, php-format +msgid "Comment by %s" msgstr "" -#: template/pkg_comments.php -msgid "Unpin comment" +msgid "Anonymous comment" +msgstr "" + +msgid "deleted" +msgstr "" + +msgid "All comments" msgstr "" -#: template/pkg_details.php msgid "Package Details" msgstr "Detaljer om pakken" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Beskrivelse" -#: template/pkg_details.php msgid "Upstream URL" msgstr "" -#: template/pkg_details.php msgid "Visit the website for" -msgstr "Besøg hjemmesiden for" +msgstr "" -#: template/pkg_details.php msgid "Licenses" -msgstr "Licenser" +msgstr "" -#: template/pkg_details.php msgid "Groups" -msgstr "Grupper" +msgstr "" -#: template/pkg_details.php msgid "Conflicts" -msgstr "Konflikter" +msgstr "" -#: template/pkg_details.php msgid "Provides" -msgstr "Tilbyder" +msgstr "" -#: template/pkg_details.php msgid "Replaces" -msgstr "Erstatter" +msgstr "" -#: template/pkg_details.php msgid "Dependencies" msgstr "Afhængigheder" -#: template/pkg_details.php msgid "Required by" msgstr "Påkrævet af" -#: template/pkg_details.php msgid "Sources" -msgstr "Kilder" +msgstr "" + +#, php-format +msgid "Close Request: %s" +msgstr "" -#: template/pkgreq_close_form.php #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "" -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." msgstr "" -#: template/pkgreq_close_form.php msgid "Reason" msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" -msgstr "Accepteret" +msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" -msgstr "Afvist" +msgstr "" + +msgid "Comments" +msgstr "" + +#, php-format +msgid "File Request: %s" +msgstr "" -#: template/pkgreq_form.php #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" msgstr "" -#: template/pkgreq_form.php msgid "Request type" msgstr "" -#: template/pkgreq_form.php msgid "Deletion" -msgstr "Sletning" +msgstr "" -#: template/pkgreq_form.php msgid "Orphan" -msgstr "Forladt" +msgstr "" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "" msgstr[1] "" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." -msgstr "Side %d af %d." +msgstr "" -#: template/pkgreq_results.php msgid "Package" -msgstr "Pakke" +msgstr "" -#: template/pkgreq_results.php msgid "Filed by" -msgstr "Udfyldt af" +msgstr "" -#: template/pkgreq_results.php msgid "Date" -msgstr "Dato" +msgstr "" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" +msgid "~%d days left" +msgstr "" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" -msgstr[0] "~%d time tilbage" -msgstr[1] "~%d timer tilbage" +msgstr[0] "" +msgstr[1] "" -#: template/pkgreq_results.php msgid "<1 hour left" -msgstr "<1 time tilbage" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "Accepter" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "Låst" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "Luk" - -#: template/pkgreq_results.php -msgid "Pending" msgstr "" -#: template/pkgreq_results.php +msgid "Accept" +msgstr "" + +msgid "Locked" +msgstr "" + +msgid "Close" +msgstr "" + msgid "Closed" -msgstr "Lukket" +msgstr "" -#: template/pkg_search_form.php msgid "Name, Description" -msgstr "Navn, beskrivelse" +msgstr "" -#: template/pkg_search_form.php msgid "Name Only" -msgstr "Kun navn" +msgstr "" -#: template/pkg_search_form.php msgid "Exact Name" -msgstr "Præcist navn" +msgstr "" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php msgid "All" -msgstr "Alle" +msgstr "" -#: template/pkg_search_form.php msgid "Flagged" msgstr "" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Navn" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Stemt" -#: template/pkg_search_form.php -msgid "Last modified" +msgid "Age" msgstr "" -#: template/pkg_search_form.php msgid "Ascending" msgstr "" -#: template/pkg_search_form.php msgid "Descending" msgstr "" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Alle" + msgid "Search by" msgstr "Søg efter" -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "Forældet" +msgid "Keywords" +msgstr "" + +msgid "Out of Date" +msgstr "" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Sortér efter" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Sorter efter" -#: template/pkg_search_form.php msgid "Per page" msgstr "Per side" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Søg" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Forladt" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Fejl ved modtagelse af pakkeliste." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Ingen pakker opfylder dine søgekriterier." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." -msgstr[0] "%d pakke fundet." -msgstr[1] "%d pakker fundet." +msgstr[0] "" +msgstr[1] "" -#: template/pkg_search_results.php msgid "Version" -msgstr "Version" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." msgstr "" -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Ja" -#: template/pkg_search_results.php msgid "orphan" msgstr "forladt" -#: template/pkg_search_results.php msgid "Actions" msgstr "Handlinger" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Marker forældet" + msgid "Unflag Out-of-date" msgstr "Afmarker forældet" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adopter pakker" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Fjern ejerskab for pakker" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Slet pakker" -#: template/pkg_search_results.php msgid "Confirm" -msgstr "Forsæt" +msgstr "" -#: template/search_accounts_form.php msgid "Any type" msgstr "Vilkårlig type" -#: template/search_accounts_form.php msgid "Search" msgstr "Søg" -#: template/stats/general_stats_table.php msgid "Statistics" -msgstr "Statistikker" +msgstr "" -#: template/stats/general_stats_table.php msgid "Orphan Packages" -msgstr "Forladte pakker" +msgstr "" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" -msgstr "Pakker tilføjet indenfor de seneste 7 dage" +msgstr "" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" -msgstr "Pakker opdateret indenfor de seneste 7 dage" +msgstr "" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" -msgstr "Pakker opdateret indenfor det seneste år" +msgstr "" -#: template/stats/general_stats_table.php msgid "Packages never updated" -msgstr "Pakker aldrig opdateret" +msgstr "" -#: template/stats/general_stats_table.php msgid "Registered Users" -msgstr "Registerede brugere" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" msgstr "" -#: template/stats/updates_table.php +msgid "Trusted Users" +msgstr "" + msgid "Recent Updates" -msgstr "Seneste opdateringer" - -#: template/stats/updates_table.php -msgid "more" msgstr "" -#: template/stats/user_table.php msgid "My Statistics" -msgstr "Mine statistikker" +msgstr "" + +msgid "Packages in unsupported" +msgstr "" -#: template/tu_details.php msgid "Proposal Details" msgstr "Detaljer om forslag" -#: template/tu_details.php msgid "This vote is still running." msgstr "Denne afstemning er stadig aktiv." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Tilføjet: %s af %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Slut" -#: template/tu_details.php msgid "Result" -msgstr "Resultat" +msgstr "" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Nej" -#: template/tu_details.php msgid "Abstain" msgstr "Undlad at stemme" -#: template/tu_details.php msgid "Total" msgstr "Total" -#: template/tu_details.php msgid "Participation" -msgstr "Deltagelse" +msgstr "" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "" -#: template/tu_last_votes_list.php msgid "Last vote" -msgstr "Sidste stemme" +msgstr "" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Ingen resultater fundet." -#: template/tu_list.php msgid "Start" msgstr "Start" -#: template/tu_list.php msgid "Back" msgstr "Tilbage" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/de.po b/po/de.po index 39326eac..e7cb4c06 100644 --- a/po/de.po +++ b/po/de.po @@ -1,2395 +1,1383 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# 9d91e189c22376bb4ee81489bc27fc28, 2013 -# 9d91e189c22376bb4ee81489bc27fc28, 2013-2014 +# Alexander Griesbaum , 2013 +# Alexander Griesbaum , 2013-2014 # bjo , 2013 # FabianS_ , 2012 -# go2sh , 2015-2016 # FabianS_ , 2012 -# Giuliano Schneider , 2015-2016 -# go2sh , 2015 +# Giuliano Schneider , 2015 # Lukas Fleischer , 2011 # Mark Gerlach, 2015 -# a980e5e9ed6813c0751cebb84f7948a8_ff57647, 2015 +# Mark Gerlach, 2015 # Matthias Gorissen , 2012 # Nuc1eoN , 2014 # Nuc1eoN , 2014 -# Simon Legner , 2018 # Simon Schneider , 2011 -# Stefan Auditor , 2021 -# Stefan Auditor , 2017-2018,2020 -# Thomas_Do , 2013-2014 -# Thomas_Do , 2012-2013 -# Yunus Kahveci, 2021 +# Thomas_Do , 2013-2014 +# Thomas_Do , 2012-2013 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Stefan Auditor , 2021\n" -"Language-Team: German (http://app.transifex.com/lfleischer/aurweb/language/de/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: German (http://www.transifex.com/projects/p/aur/language/" +"de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Seite nicht gefunden" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Die angeforderte Seite existiert leider nicht." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Anmerkung" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Git clone URLs sind nicht dafür gedacht im Browser geöffnet zu werden." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Um das Git-Repository von %s zu clonen, führe %s aus." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Klicke %shere%s um zur %s Detailseite zurückzukehren." - -#: html/503.php msgid "Service Unavailable" -msgstr "Dienst nicht verfügbar" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Keine Panik! Diese Seite ist wegen Wartungsarbeiten geschlossen. Wir werden gleich zurück sein." +msgstr "" -#: html/account.php msgid "Account" msgstr "Konto" -#: html/account.php template/header.php msgid "Accounts" msgstr "Konten" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Es ist Dir nicht erlaubt, auf diesen Bereich zuzugreifen." -#: html/account.php msgid "Could not retrieve information for the specified user." -msgstr "Es konnten keine Informationen für den angegebenen Benutzer geladen werden." +msgstr "" +"Es konnten keine Informationen für den angegebenen Benutzer geladen werden." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Du hast keine Berechtigung, dieses Konto zu ändern." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Passwort ungültig." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Benutze dieses Formular, um vorhandene Konten zu suchen." -#: html/account.php msgid "You must log in to view user information." -msgstr "Du musst Dich anmelden, um Benutzer-Informationen anzusehen." +msgstr "Du musst Dich anmelden, um Benutzerinformationen anzusehen." + +msgid "Use this form to create an account." +msgstr "Benutze dieses Formular, um ein Konto zu erstellen." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "Vorschlag hinzufügen" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Ungültiges Zeichen für eine Benutzer-Aktion." -#: html/addvote.php msgid "Username does not exist." -msgstr "Der Benutzername existiert nicht." +msgstr "Der Nutzername existiert nicht." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "Es läuft bereits ein Vorschlag für %s." -#: html/addvote.php msgid "Invalid type." msgstr "Ungültiger Typ." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Vorschlag darf nicht leer sein." -#: html/addvote.php msgid "New proposal submitted." msgstr "Neuer Vorschlag eingereicht." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Reiche einen Vorschlag zur Abstimmung ein." -#: html/addvote.php msgid "Applicant/TU" msgstr "Bewerber/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(leer, falls nicht zutreffend)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Typ" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "TU hinzugefügt" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "TU entfernt" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "TU entfernt (unerklärte Inaktivität)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Änderung der Bestimmungen" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Vorschlag" -#: html/addvote.php msgid "Submit" msgstr "Abschicken" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Verwalte Co-Maintainer" +msgstr "Verwalte Ko-Maintainer" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Kommentar bearbeiten" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Dashboard" - -#: html/home.php template/header.php msgid "Home" msgstr "Startseite" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Meine markierten Pakete" - -#: html/home.php -msgid "My Requests" -msgstr "Meine Anfragen" - -#: html/home.php -msgid "My Packages" -msgstr "Meine Pakete" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Suche nach Paketen die ich betreue" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Mitbetreute Pakete" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Suche nach Paketen die ich mitbetreue" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Willkommen im AUR! Für weitere Informationen lies bitte die %sAUR User " +"Guidelines%s und die %sAUR TU Guidelines%s." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Alle hier eingereichten PKGBUILDs %smüssen%s den %sArch Packaging Standards%s entsprechen. Andernfalls werden sie entfernt!" +msgstr "" +"Alle hier eingereichten PKGBUILDs %smüssen%s den %sArch Packaging Standards" +"%s entsprechen. Andernfalls werden sie entfernt!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Denk daran, für Deine bevorzugten Pakete zu stimmen!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Manche Pakete könnten als Binär-Pakete in [extra] bereitgestellt sein." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"Manche Pakete könnten als Binär-Pakete in [community] bereitgestellt sein." -#: html/home.php msgid "DISCLAIMER" -msgstr "DISCLAIMER: Offiziell nicht unterstützte PKGBUILDS werden von den Benutzern erstellt - durch den Download willigt man ein, diese auf eigene Gefahr zu benutzen." +msgstr "" +"DISCLAIMER: Offiziell nicht unterstützte PKGBUILDS werden von den Benutzern " +"erstellt - durch den Download willigt man ein, diese auf eigene Gefahr zu " +"benutzen." -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "AUR Pakete sind von Benutzern erstellter Inhalt. Die Benutzung der angebotenen Dateien erfolgt auf eigenes Risiko." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Nicht unterstützte Pakete sind von Benutzern erzeugte Inhalte. Jegliche " +"Nutzung der zur Verfügung gestellten Dateien erfolgt auf eigene Gefahr." -#: html/home.php -msgid "Learn more..." -msgstr "Erfahre mehr ..." - -#: html/home.php msgid "Support" -msgstr "Untersttzung" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Paketanfragen" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Es gibt drei Arten von Anfragen, die in der %sPaketaktionen%s Box auf der Paketdetailseite eingereicht werden können:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Verwaisanfrage" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Anfrage eine Paket abzugeben, z.B. wenn der Maintainer nicht aktiv ist und das Paket vor einer ganzen Weile als veraltet markiert wurde." - -#: html/home.php -msgid "Deletion Request" -msgstr "Löschanfrage" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Zusammenführungsanfrage" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Anfrage ein Paket mit einem anderen zusammenzuführen. Wird benutzt, wenn ein Paket umbenannt werden muss oder durch ein geteiltes Paket ersetzt wird." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Wenn Du eine Anfrage diskutieren willst, kannst Du die %saur-requests%s Mailingliste benutzen. Benutze diese jedoch nicht um Anfragen einzureichen." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Pakete einreichen" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Git über SSH wird jetzt benutzt um Pakete in das AUR einzureichen. Siehe die %sEinreichen von Paketen%s Sektion von der Arch User Repository ArchWiki Seite für mehr Details." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Die folgenden SSH Fingerabdrücke werden für das AUR benutzt:" - -#: html/home.php msgid "Discussion" msgstr "Diskussion" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Fehler melden" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Paketsuche" -#: html/index.php msgid "Adopt" msgstr "Übernimm Paket" -#: html/index.php msgid "Vote" msgstr "Abstimmen" -#: html/index.php msgid "UnVote" msgstr "Stimme zurückziehen" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Benachrichtigen" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Nicht mehr benachrichtigen" -#: html/index.php +msgid "Flag" +msgstr "Markieren" + msgid "UnFlag" msgstr "Markierung aufheben" -#: html/login.php template/header.php msgid "Login" msgstr "Anmelden" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Angemeldet als: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Abmelden" -#: html/login.php msgid "Enter login credentials" msgstr "Zugangsdaten eingeben" -#: html/login.php -msgid "User name or primary email address" -msgstr "Benutzername oder primäre E-Mail-Adresse" +msgid "Username" +msgstr "Nutzername" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Passwort" -#: html/login.php msgid "Remember me" msgstr "Angemeldet bleiben" -#: html/login.php msgid "Forgot Password" msgstr "Passwort vergessen" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Die Anmeldung über HTTP wurde deaktiviert. Zum Anmelden %swechsle bitte zu HTTPS%s." +msgstr "" +"Die Anmeldung über HTTP wurde deaktiviert. Zum Anmelden %swechsle bitte zu " +"HTTPS%s." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Suchkriterien" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Pakete" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Während des Empfangs der Paket-Details ist ein Fehler aufgetreten." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Ein benötigtes Feld ist nicht ausgefüllt." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Passwort-Felder sind unterschiedlich." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Dein Passwort muss mindestens %s Zeichen lang sein." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Ungültige E-Mail-Adresse." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" +"Es wurde ein Passwort-Reset für den Account %s, der mit dieser E-Mail-" +"Adresse verknüpft ist, angefordert. Wenn Du Dein Passwort zurücksetzen " +"möchtest, folge dem untenstehenden Link, ansonsten kannst Du diese Nachricht " +"ignorieren und nichts wird geschehen." + msgid "Password Reset" msgstr "Passwort zurücksetzen" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Überprüfe Dein E-Mail-Postfach hinsichtlich des Bestätigungslinks." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Dein Passwort wurde erfolgreich zurückgesetzt." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Benutzername oder primäre E-Mail-Adresse bestätigen:" +msgid "Confirm your e-mail address:" +msgstr "Bestätige Deine E-Mail-Adresse:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Gib Dein neues Passwort ein:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Bestätige Dein neues Passwort:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Weiter" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Wenn Du den bei der Registrierung vernwendeten Benutzernamen und primäre E-Mail-Adresse vergessen hast, sende bitte eine Nachricht an die %saur-general%s Mailingliste." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Wenn Du die E-Mail-Adresse vergessen hast, die Du für Deine Registrierung " +"benutzt hast, sende bitte eine Nachricht an die %saur-general%s Mailing-" +"Liste." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Benutzername oder primäre E-Mail-Adresse eingeben:" +msgid "Enter your e-mail address:" +msgstr "Gib Deine E-Mail-Adresse ein:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Paketbasis" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Die Betreuung der ausgewählten Pakete wurde nicht abgegeben, überprüfe die Bestätigungs-Checkbox." +msgstr "" +"Die Betreuung der ausgewählten Pakete wurde nicht abgegeben, überprüfe die " +"Bestätigungs-Checkbox." -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "Die ausgewählten Pakete wurden nicht übernommen, überprüfe die Bestätigungs-Checkbox." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Das Paket, in das die Stimmen und Kommentare übernommen werden sollen, kann nicht gefunden werden." +msgstr "" +"Das Paket, in das die Stimmen und Kommentare übernommen werden sollen, kann " +"nicht gefunden werden." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Eine Paketbasis kann nicht mit sich selbst verschmolzen werden." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Die ausgewählten Pakete wurden nicht gelöscht, bitte aktiviere die Bestätigungs-Checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Die ausgewählten Pakete wurden nicht gelöscht, bitte aktiviere die " +"Bestätigungs-Checkbox." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Pakete entfernen" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Paket löschen" +#, php-format +msgid "Delete Package: %s" +msgstr "Paket löschen: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Benutze dieses Formular um die Paketbasis %s%s%s und die folgenden Pakete vom AUR zu löschen:" +msgstr "" +"Benutze dieses Formular um die Paketbasis %s%s%s und die folgenden Pakete " +"vom AUR zu löschen:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Die Löschung eines Pakets ist endgültig." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Wähle ein Kästchen aus, um die Aktion zu bestätigen." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Bestätige das Löschen des Pakets" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Löschen" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Nur vertrauenswürdige Benutzer und Entwickler können Pakete löschen." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Paket abgeben" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "Paket-Betreuung abgeben: %s" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Benutze dieses Formular um die Paketbasis %s%s%s, welche die folgenden Pakete enhält, abzugeben:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "Durch Auswahl dieser Checkbox bestätigst Du, dass Du nicht mehr Co-Maintainer dieses Pakets sein willst." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Durch das markieren des Kontrollkästchen bestätigtst Du, dass Du das Paket abegen und den Besitz an %s%s%s übergeben willst." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Durch Auswahl dieser Checkbox bestätigst du, dass du die Betreuung dieses Pakets abgeben willst." +msgstr "" +"Durch Auswahl dieser Checkbox bestätigst du, dass du die Betreuung dieses " +"Paketes abgeben willst." -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "Bestätige die Abgabe der Paket-Betreuung" -#: html/pkgdisown.php msgid "Disown" msgstr "Gebe Paket ab" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" +msgid "Only Trusted Users and Developers can disown packages." +msgstr "Nur Tus und Developer können die Paket-Betreuung abgeben." -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Kommentar markieren" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Paket als \"veraltet\" markieren" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "Dies ist scheinbar ein VCS Paket. Bitte markiere es %snicht%s als veraltet, wenn die Paket-Version im AUR nicht dem letzten Commit entspricht. Dieses Paket sollte nur dann markiert werden, wenn die Quellen verschoben wurden oder Änderungen aufgrund kürzlicher Änderungen Upstream im PKGBUILD notwendig sind." - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Benutze dieses Formular, um die Paketbasis %s%s%s und die folgenden Pakete als \"veraltet\" zu markieren." - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Bitte benutze dieses Formular %snicht%s, um Fehler zu melden. Benutze stattdessen die Paketkommentare." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Beschreibe genauer, warum das Paket \"veraltet\" ist, vorzugsweise mit Links zu der Veröffentlichungsankündigung oder dem Release-Tar-Archive." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Kommentare" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Markieren" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Nur registrierte Benutzer können Pakete als \"veraltet\" markieren." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Pakete verschmelzen" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Paket verschmelzen" +#, php-format +msgid "Merge Package: %s" +msgstr "Verschmelze Paket: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Benutze dieses Formular um die Paketbasis %s%s%s in ein anderes Paket zu verschmelzen." +msgstr "" +"Benutze dieses Formular um die Paketbasis %s%s%s in ein anderes Paket zu " +"verschmelzen." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Die folgenden Pakete werden gelöscht:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " -msgstr "Wenn das Paket einmal verschmolzen ist, kann diese Aktion nicht mehr revidiert werden." +msgstr "" +"Wenn das Paket einmal verschmolzen ist, kann diese Aktion nicht mehr " +"revidiert werden." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "Trag den Namen des Pakets ein, in welches Du das vorliegende Paket verschmelzen willst." +msgstr "" +"Trag den Namen des Pakets ein, in welches Du das vorliegende Paket " +"verschmelzen willst." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Verschmelze in:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Bestätige Verschmelzung der Pakete" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Verschmelzen" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." msgstr "" +"Nur vertrauenswürdige Benutzer und Entwickler können Pakete verschmelzen." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Anfrage absenden" +msgid "File Request" +msgstr "Datei Anfrage" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Anfrage schließen" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Erste" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Zurück" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Weiter" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Letzte" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Anfragen" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registrieren" +msgid "Trusted User" +msgstr "Vertrauenswürdiger Benutzer (TU)" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Benutze dieses Formular, um ein Konto zu erstellen." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Nutzungsbedingungen" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Die folgenden Dokumente wurden aktualisiert, bitte aufmerksam überprüfen:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "Revision %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Ich akzeptiere die obigen Nutzungsbedingungen." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Es konnten keine Vorschlag-Details ermittelt werden." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Die Abstimmungsphase für diesen Vorschlag ist beendet." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Nur Trusted User dürfen wählen." -#: html/tu.php msgid "You cannot vote in an proposal about you." -msgstr "Du kannst über einen Vorschlag, der dich selbst betrifft, nicht abstimmen." +msgstr "" +"Du kannst über einen Vorschlag, der dich selbst betrifft, nicht abstimmen." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Du hast über diesen Vorschlag bereits abgestimmt." -#: html/tu.php msgid "Vote ID not valid." msgstr "Ungültige Abstimmungs-ID." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Laufende Abstimmungen" -#: html/tu.php msgid "Past Votes" msgstr "Abgeschlossene Abstimmungen" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Abstimmende" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Die Registrierung ist aktuell für deine IP-Adresse deaktiviert. Ein möglicher Grund können anhaltende Spam-Attacken sein. Bitte entschuldige die Unannehmlichkeiten." +msgstr "" +"Die Registrierung ist aktuell für deine IP-Adresse deaktiviert. Ein " +"möglicher Grund können anhaltende Spam-Attacken sein. Bitte entschuldige die " +"Unannehmlichkeiten." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Benutzer-ID fehlt" -#: lib/acctfuncs.inc.php msgid "The username is invalid." -msgstr "Der Benutzername ist ungültig." +msgstr "Der Nutzername ist ungültig." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Er muss zwischen %s und %s Zeichen lang sein." -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Muss mit einem Buchstaben oder einer Zahl beginnen und enden" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Kann nur einen Punkt, Unter- oder Bindestrich enthalten." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Bitte das neue Passwort bestätigen." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "Die E-Mail-Adresse ist ungültig." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "Die sicherungs E-Mail-Adresse ist ungültig." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "Diese Adresse ist ungültig, bitte eine vollständige HTTP(S) URL angeben." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "Der PGP-Schlüssel-Fingerabdruck ist ungültig." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "Der öffentliche SSH Schlüssel ist ungültig." -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Die Zugriffsrechte des Kontos können nicht erweitert werden." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Diese Sprache wird momentan noch nicht unterstützt." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Diese Zeitzone wird momentan noch nicht unterstützt." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." -msgstr "Der Benutzername %s%s%s ist bereits vergeben." +msgstr "Der Nutzername %s%s%s ist bereits vergeben." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "Die Adresse %s%s%s wird bereits verwendet." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "Der öffentliche SSH Schlüssel, %s%s%s, ist bereits in Benutzung." -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "Das CPATCHA fehlt." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "Das CAPTCHA ist abgelaufen. Bitte versuche es noch einmal." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "Die eingegebene CAPTCHA Antwort ist ungültig." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Beim Erstellen des Kontos %s%s%s ist ein Fehler aufgetreten." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "Das Konto %s%s%s wurde erfolgreich erstellt." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Ein Rücksetzungscode wurde an deine E-Mail-Adresse gesendet." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Klicke zur Anmeldung bitte oben auf den Login-Link." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Willkommen bei %s! Um ein Passwort für dein neues Konto festzulegen, klick " +"bitte auf den unten stehenden Link. Sollte das nicht funktionieren, versuche " +"den Link zu kopieren und in deinem Browser einzufügen." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "Ein Rücksetzungscode wurde an deine E-Mail-Adresse gesendet." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Es wurden keine Änderungen am Konto %s%s%s vorgenommen." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "Das Konto %s%s%s wurde erfolgreich bearbeitet." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Das Loginformular ist aktuell für deine IP-Adresse deaktiviert. Ein möglicher Grund können anhaltende Spam-Attacken sein. Bitte entschuldige die Unannehmlichkeiten." +msgstr "" +"Das Loginformular ist aktuell für deine IP-Adresse deaktiviert. Ein " +"möglicher Grund können anhaltende Spam-Attacken sein. Bitte entschuldige die " +"Unannehmlichkeiten." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Konto aufgehoben" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "Du hast keine Berechtigung Kontos zu sperren." - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Dein Passwort wurde zurückgesetzt. Solltest du ein neues Konto erstellt haben, verwende bitte den Bestätigungslink aus der E-Mail, um dein Passwort festzulegen. Fordere andernfalls bitte einen Rücksetzungscode über die %sPasswort zurücksetzen%s Seite an." +msgstr "" +"Dein Passwort wurde zurückgesetzt. Solltest du ein neues Konto erstellt " +"haben, verwende bitte den Bestätigungslink aus der E-Mail, um dein Passwort " +"festzulegen. Fordere andernfalls bitte einen Rücksetzungscode über die " +"%sPasswort zurücksetzen%s Seite an." -#: lib/acctfuncs.inc.php msgid "Bad username or password." -msgstr "Falscher Benutzername oder falsches Passwort." +msgstr "Falscher Nutzername oder falsches Passwort." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Es geschah ein Fehler beim Versuch eine Nutzersitzung zu erstellen." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Ungültige Kombination aus E-Mail und Reset-Schlüssel." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Keine" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Konto-Informationen aufrufen für %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Paketbasis ID oder Paketbasis Name fehlen." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Du bist nicht berechtigt diesen Kommentar zu ändern." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Kommentar existiert nicht" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Kommentar darf nicht leer sein." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Kommentar wurde hinzugefügt." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Du musst angemeldet sein, um Paket-Informationen zu bearbeiten." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Kommentar-ID fehlt." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Mehr als 5 Kommentare können nicht angeheftet werden." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Du bist nicht berechtigt diesen Kommentar anzuheften." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Du bist nicht berechtigt diesen Kommentar loszuheften." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Kommentar wurde angeheftet." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Kommentar wurde losgeheftet." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Fehler beim Aufrufen der Paket-Details." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Paket-Details konnten nicht gefunden werden." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "Du hast keine Pakete ausgewählt über die Du benachrichtigt werden möchtest." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "Die Benachrichtigungen wurden für das ausgewählte Paket aktiviert." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "Du hast keine Pakete ausgewählt über die Du nicht mehr benachrichtigt werden möchtest." - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "Ein Paket das Du ausgewählt hast hat keine Benachrichtigungen aktiviert." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "Die Benachrichtigungen wurden für das ausgewählte Paket entfernt." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Du musst Dich anmelden, um Pakete markieren zu können." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Du hast kein Paket zum Markieren ausgewählt." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Die gewählten Pakete wurden nicht markiert, bitte einen Kommentar eingeben." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Die gewählten Pakete wurden als \"veraltet\" markiert." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." -msgstr "Du musst Dich anmelden, um die Markierung von Paketen entfernen zu können." +msgstr "" +"Du musst Dich anmelden, um die Markierung von Paketen entfernen zu können." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Du hast kein Paket für das Entfernen der Markierung ausgewählt." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Die Markierungen der gewählten Pakete wurden entfernt." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Du hast keine Berechtigung zum Löschen von Paketen." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Du hast keine Pakete zum Löschen ausgewählt." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "Eines der ausgewählten Pakete existiert nicht." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Die gewählten Pakete wurden gelöscht." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Du musst angemeldet sein, um Pakete übernehmen zu können." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "Du hast keine Berechtigung eines der ausgewählten Pakete zu übernehmen." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." -msgstr "Du musst anmeldet sein, um die Betreuung eines Pakets abzugeben." +msgstr "Du musst anmeldet sein, um die Betreuung eines Paketes abzugeben." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "Du hast keine Berechtigung eines der ausgewählten Pakete abzugeben." - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Du hast keine Pakete zum Übernehmen gewählt." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Du hast keine Pakete gewählt, deren Betreuung Du abgeben willst." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Die gewählten Pakete wurde übernommen." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Die Betreuung der gewählten Pakete wurde abgegeben." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Du musst angemeldet sein, um für Pakete stimmen zu können." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Du musst angemeldet sein, um Pakete abwählen zu können." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Du hast keine Pakete zum Wählen markiert." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Deine Stimmen wurden von den markierten Paketen entfernt." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Deine Stimmen wurden für die markierten Pakete gezählt." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Es konnte nichts zur Benachrichtigungsliste hinzugefügt werden." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Du wurdest zur Benachrichtigungliste für %s hinzugefügt." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Du wurdest von der Benachrichtigungsliste für %s entfernt." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Du bist nicht berechtigt diesen Kommentar wiederherzustellen." +msgid "You must be logged in before you can edit package information." +msgstr "Du musst angemeldet sein, um Paket-Informationen zu bearbeiten." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Kommentar wurde wiederhergestellt." +msgid "Missing comment ID." +msgstr "Kommentar-ID fehlt." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Du darfst diesen Kommentar nicht löschen." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Kommentar wurde gelöscht." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Kommentar wurde geändert." +msgid "You are not allowed to delete this comment." +msgstr "Du darfst diesen Kommentar nicht löschen." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Du bist nicht berechtigt die Schlagworte dieser Paketbasis zu ändern." +msgid "Missing category ID." +msgstr "Kategorie-ID fehlt." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Die Schlagwörter der Paketbasis wurden aktualisiert." +msgid "Invalid category ID." +msgstr "Kategorie-ID ungültig." + +msgid "You are not allowed to change this package category." +msgstr "Du darfst diese Paketkategorie nicht ändern." + +msgid "Package category changed." +msgstr "Die Kategorie des Pakets wurde verändert." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Du darfst die Co-Maintainer für diese Paketbasis nicht verwalten." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Ungültiger Benutzername: %s" +msgstr "Ungültiger Nutzername: %s" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "Die Co-Maintainer der Paketbasis wurden aktualisiert." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Paket-Informationen aufrufen für" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "Benötigt %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." -msgstr "Du musst angemeldet sein, um Paketanfragen einreichen zu können." +msgstr "Du musst angemeldet sein, um ein Paket anfordern zu können." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Ungültiger Name: Es dürfen nur Kleinbuchstaben verwendet werden." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "Das Kommentarfeld darf nicht leer sein." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Ungültiger Anfragetyp." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Anfrage erfolgreich hinzugefügt." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Ungültiger Grund." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "Nur Entwicker und TUs können Anfragen schließen." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Anfrage erfolgreich geschlossen." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Du kannst dieses Formular verwenden, um den AUR Account unwiderruflich zu entfernen %s." +msgstr "" +"Du kannst dieses Formular verwenden, um den AUR Account unwiderruflich zu " +"entfernen %s." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sWARNUNG%s: Diese Aktion kann nicht rückgängig gemacht werden." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Bestätige das Entfernen" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Benutzername" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Konto-Typ" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Benutzer" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Entwickler" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Vertrauenswürdiger Benutzer & Entwickler" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "E-Mail-Adresse" -#: template/account_details.php -msgid "hidden" -msgstr "versteckt" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Echter Name" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Homepage" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC-Name" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "PGP-Schlüssel-Fingerabdruck" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Status" -#: template/account_details.php msgid "Inactive since" msgstr "Nicht aktiv seit" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Aktiv" -#: template/account_details.php -msgid "Registration date:" -msgstr "Registrierungsdatum:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "unbekannt" - -#: template/account_details.php msgid "Last Login" msgstr "Letzter Login" -#: template/account_details.php msgid "Never" msgstr "Niemals" -#: template/account_details.php msgid "View this user's packages" msgstr "Alle Pakete dieses Benutzers anzeigen" -#: template/account_details.php msgid "Edit this user's account" -msgstr "Konto dieses Benutzers bearbeiten" +msgstr "Konto dieses Nutzers bearbeiten" -#: template/account_details.php -msgid "List this user's comments" -msgstr "Die Kommentare des Benutzers anzeigen" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." -msgstr "Klicke %shier%s, wenn du diesen Account unwiderruflich entfernen möchtest." +msgstr "" +"Klicke %shier%s, wenn du diesen Account unwiderruflich entfernen möchtest." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Klicke %shere%s für Benutzerdetails." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Klicke %shier%s um die Kommentare aufzulisten, die dieser Benutzer gemacht hat." - -#: template/account_edit_form.php msgid "required" msgstr "Notwendig" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Der Benutzername ist der Name, der für die Anmeldung benutzt wird. Er ist öffentlich sichtbar, auch wenn das Konto inaktiv ist." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Normaler Benutzer" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Vertrauenswürdiger Benutzer (TU)" + msgid "Account Suspended" msgstr "Konto gesperrt" -#: template/account_edit_form.php msgid "Inactive" msgstr "Inaktiv" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Bitte stell sicher, dass du deine E-Mail korrekt eingegeben hast, sonst wirst du dich aussperren." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Verstecke E-Mail-Adresse" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "Wenn Du Deine E-Mail-Adresse nicht versteckst, ist sie für alle registrierten AUR Benutzer sichtbar. Wenn Du sie versteckst, ist sie nur für Arch Linux Mitarbeiter sichtbar." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Sicherungs E-Mail-Adresse" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "Gib optional eine sekundäre E-Mail-Adresse an, mit der Du Dein Konto wiederherstellen kannst, falls der Zugriff auf die primäre E-Mail-Adresse verloren geht." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "Links zum Zurücksetzen des Passworts werden immer sowohl an die primäre als auch an die Backup-E-Mail-Adresse gesendet." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "Die Backup-E-Mail-Adresse nur für die Arch Linux Mitarbeiter sichtbar, unabhängig von der %s-Einstellung." - -#: template/account_edit_form.php -msgid "Language" -msgstr "Sprache" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Zeitzone" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Willst Du das Passwort ändern, gib ein neues Passwort ein und bestätige das neue Passwort durch erneute Eingabe." - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Bestätige das Passwort" -#: template/account_edit_form.php +msgid "Language" +msgstr "Sprache" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Die folgende Information wird nur benötigt, wenn du Pakete beim Arch User Repository einreichen willst." - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" +"Die folgende Information wird nur benötigt, wenn du Pakete beim Arch User " +"Repository einreichen willst." -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "Öffentlicher SSH Schlüssel" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Benachrichtigungseinstellungen" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Über neue Kommentare benachrichtigen" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Benachrichtige Paketaktualisierungen" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Benachrichtige Besitzeränderungen" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "Um die Änderungen an deinem Profil zu bestätigen, gib bitte Dein aktuelles Paswort ein:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "Dein aktuelles Passwort" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "Um das AUR gegen automatische Benutzer-Erstellung zu schützen, gib bitte die Ausgabe folgenden Befehls an:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Antwort" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Aktualisieren" -#: template/account_edit_form.php msgid "Create" msgstr "Erstellen" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Zurücksetzen" -#: template/account_search_results.php msgid "No results matched your search criteria." -msgstr "Die Suchkriterien erzielten keine Treffer." +msgstr "Deine Suche enthält leider keine Ergebnisse." -#: template/account_search_results.php msgid "Edit Account" msgstr "Konto bearbeiten" -#: template/account_search_results.php msgid "Suspended" msgstr "Gesperrt" -#: template/account_search_results.php msgid "Edit" msgstr "Ändern" -#: template/account_search_results.php msgid "Less" msgstr "Weniger" -#: template/account_search_results.php msgid "More" msgstr "Mehr" -#: template/account_search_results.php msgid "No more results to display." msgstr "Keine weiteren Ergebnisse." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "Verwalte Ko-Maintainer: %s" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Benutze dieses Formular um Co-Maintainer für %s%s%s hinzuzufügen (ein Benutzername pro Zeile):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" msgstr "Benutzer" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "Speichern" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Kommentar der \"veraltet\"-Markierung: %s" +msgid "My Packages" +msgstr "Meine Pakete" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s markiert %s%s%s als veraltet am %s%s%s aufgrund von:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s wurde nicht als \"veraltet\" markiert." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Zu den Details zurückkehren" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d aurweb Development Team." - -#: template/header.php msgid " My Account" msgstr "Mein Konto" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Registrieren" + +msgid "unknown" +msgstr "unbekannt" + +msgid "Package Base Details" +msgstr "Paketbasis Details" + msgid "Package Actions" msgstr "Paketaktionen" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "PKGBUILD ansehen" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "Änderungen betrachten" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "Schnappschuss herunterladen" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Durchsuche Wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Als \"veraltet\" markiert (%s)" +msgid "Flagged out-of-date" +msgstr "Als \"veraltet\" markiert" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Paket als \"veraltet\" markieren" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Paketmarkierung entfernen" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Stimme entfernen" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Für dieses Paket stimmen" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Benachrichtigungen deaktivieren" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Benachrichtigungen aktivieren" +msgid "Notify of new comments" +msgstr "Über neue Kommentare benachrichtigen" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "Verwalte Co-Maintainer" +msgstr "Verwalte Ko-Maintainer" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d ausstehende Anfrage" msgstr[1] "%d ausstehende Anfragen" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Paket löschen" + +msgid "Merge Package" +msgstr "Paket verschmelzen" + msgid "Adopt Package" msgstr "Paket übernehmen" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Paketbasis Details" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "Git Clone URL" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "nur lesen" +msgid "Category" +msgstr "Kategorie" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "kopieren" +msgid "Change category" +msgstr "Kategorie wechseln" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Schlüsselwörter" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Eingereicht von" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "Maintainer" +#, php-format +msgid "View account information for %s" +msgstr "Konto-Informationen aufrufen für %s" + +msgid "Maintainer" +msgstr "Betreuer" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Letzter Paketierer" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Stimmen" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Beliebtheit" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Zuerst eingereicht am" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Letzte Aktualisierung" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Bearbeite Kommentar für: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Kommentar hinzufügen" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "Git Commit-Kennungen, die einen Commit in einem AUR Paket referenzieren und URLs werden automatisch in Links umgewandelt." +msgid "Comment has been added." +msgstr "Kommentar wurde hinzugefügt." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "%sMarkdown syntax%s wird teilweise unterstützt." +msgid "View all comments" +msgstr "Zeige alle Kommentare" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Angeheftete Kommentare" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Neueste Kommentare" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Kommentare für" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s kommentierte %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Anonym kommentierte %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "Kommentiert auf Paket %s am %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "gelöscht am %s von %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "gelöscht am %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "geändert am %s von %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "geändert am %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Kommentar wiederherstellen" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Kommentar löschen" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Kommentar anheften" +#, php-format +msgid "Comment by %s" +msgstr "Kommentar von %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Kommentar losheften" +msgid "Anonymous comment" +msgstr "Anonymer Kommentar" + +msgid "deleted" +msgstr "gelöscht" + +msgid "All comments" +msgstr "Alle Kommentare" -#: template/pkg_details.php msgid "Package Details" msgstr "Paket-Details" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Paketbasis" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Beschreibung" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Upstream URL" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Besuche die Web-Seite für" -#: template/pkg_details.php msgid "Licenses" msgstr "Lizenzen" -#: template/pkg_details.php msgid "Groups" msgstr "Gruppen" -#: template/pkg_details.php msgid "Conflicts" msgstr "Konflikte" -#: template/pkg_details.php msgid "Provides" msgstr "Liefert" -#: template/pkg_details.php msgid "Replaces" msgstr "Ersetzt" -#: template/pkg_details.php msgid "Dependencies" msgstr "Abhängigkeiten" -#: template/pkg_details.php msgid "Required by" msgstr "Benötigt von" -#: template/pkg_details.php msgid "Sources" msgstr "Quellen" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Anfrage schließen: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Benutze dieses Formular, um die Anfrage für die Paketbasis %s%s%s zu schließen." +msgstr "" +"Benutze dieses Formular, um die Anfrage für die Paketbasis %s%s%s zu " +"schließen." + +msgid "Note" +msgstr "Anmerkung" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Das Kommentarfeld kann leer gelassen werden, es wird jedoch strengstens empfohlen, beim Ablehnen einer Anfrage einen Kommentar hinzuzufügen." +msgstr "" +"Das Kommentarfeld kann leer gelassen werden, es wird jedoch strengstens " +"empfohlen, beim Ablehnen einer Anfrage einen Kommentar hinzuzufügen." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Grund" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Akzeptiert" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Zurückgewiesen" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Kommentare" + +#, php-format +msgid "File Request: %s" +msgstr "Dateianfrage: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Benutze dieses Formular um eine Anfrage für die Paketbasis %s%s%s einzureichen, welche die folgenden Pakete enthält:" +msgstr "" +"Benutze dieses Formular um eine Anfrage für die Paketbasis %s%s%s " +"einzureichen, welche die folgenden Pakete enthält:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Anfragetyp" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Löschung" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Verwaist" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Verschmelzen mit" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Die Suchkriterien erzielten keine Treffer in Anfragen." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "%d Paket gefunden." msgstr[1] "%d Paketanfragen gefunden." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Seite %d von %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Paket" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Eingereicht von" -#: template/pkgreq_results.php msgid "Date" msgstr "Datum" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "noch ~%d Tag" -msgstr[1] "noch ~%d Tage" +msgid "~%d days left" +msgstr "~%d Tage verbleibend" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "~%d Stunde verbleibend" msgstr[1] "~%d Stunden verbleibend" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "<1 Stunde verbleibend" -#: template/pkgreq_results.php msgid "Accept" msgstr "Akzeptieren" -#: template/pkgreq_results.php msgid "Locked" msgstr "Gesperrt" -#: template/pkgreq_results.php msgid "Close" msgstr "Schließen" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Ausstehend" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Geschlossen" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Name, Beschreibung" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Nur Name" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Exakter Name" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Exakte Paketbasis" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Co-Maintainer" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Maintainer, Co-Maintainer" - -#: template/pkg_search_form.php msgid "All" msgstr "Alle" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Markiert" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Nicht markiert" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Name" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Abgestimmt" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Zuletzt geändert" +msgid "Age" +msgstr "Alter" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Aufsteigend" -#: template/pkg_search_form.php msgid "Descending" msgstr "Absteigend" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Suchkriterien eingeben" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Alle" + msgid "Search by" msgstr "Suche nach" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Schlüsselwörter" + msgid "Out of Date" msgstr "Veraltet" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Sortieren nach" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Neu ordnen" -#: template/pkg_search_form.php msgid "Per page" msgstr "Pro Seite" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Los" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Verwaiste Pakete" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Fehler beim Aufrufen der Paket-Liste." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." -msgstr "Die Suchkriterien erzielten keine Treffer in Pakete." +msgstr "Keine Pakete entsprachen deinen Suchkriterien." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "%d Paket gefunden." msgstr[1] "%d Pakete gefunden." -#: template/pkg_search_results.php msgid "Version" msgstr "Version" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Die Beliebtheit wird als die Summe aller Stimmen berechnet, wobei jede Stimme mit dem Faktor %.2f pro Tag seit der Erstellung gewichtet wird." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Ja" -#: template/pkg_search_results.php msgid "orphan" msgstr "Verwaist" -#: template/pkg_search_results.php msgid "Actions" msgstr "Aktionen" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Als \"veraltet\" markieren" + msgid "Unflag Out-of-date" msgstr "\"veraltet\"-Markierung entfernen" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Pakete übernehmen" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Betreuung der Pakete abgeben" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Pakete löschen" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Bestätige" -#: template/search_accounts_form.php msgid "Any type" msgstr "Beliebiger Typ" -#: template/search_accounts_form.php msgid "Search" msgstr "Suche" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Statistiken" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Verwaiste Pakete" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Pakete, die in den letzten 7 Tagen hinzugefügt wurden" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Pakete, die in den letzten 7 Tagen aktualisiert wurden" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Pakete, die im letzten Jahr aktualisiert wurden" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Pakete, die nie aktualisiert wurden" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Registrierte Benutzer" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Vertrauenswürdige Benutzer (TU)" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Letzte Aktualisierungen" -#: template/stats/updates_table.php -msgid "more" -msgstr "mehr" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Meine Statistiken" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Pakete in \"unsupported\"" + msgid "Proposal Details" msgstr "Vorschlag-Details" -#: template/tu_details.php msgid "This vote is still running." msgstr "Diese Abstimmung läuft noch." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Eingereicht: %s von %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Ende" -#: template/tu_details.php msgid "Result" msgstr "Ergebnis" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Nein" -#: template/tu_details.php msgid "Abstain" msgstr "Enthalten" -#: template/tu_details.php msgid "Total" msgstr "Insgesamt" -#: template/tu_details.php msgid "Participation" msgstr "Teilnahme" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Letzte Stimme vom TU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Letzte Stimme" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Keine Ergebnisse gefunden" -#: template/tu_list.php msgid "Start" msgstr "Beginn" -#: template/tu_list.php msgid "Back" msgstr "Zurück" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "AUR Passwort-Reset" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "Eine Passwort-Reset wurde für den Account {user}, der mit dieser E-Mail-Adresse verknüpft ist, angefordert. Wenn Du Dein Passwort zurücksetzen möchtest, folge dem untenstehenden Link [1], ansonsten kannst Du diese Nachricht ignorieren und nichts wird geschehen." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Willkommen im Arch User Repository" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Willkommen im Arch User Repository! Um ein Passwort für dein neues Konto festzulegen, klicke bitte auf den unten stehenden Link [1]. Sollte das nicht funktionieren, versuche den Link zu kopieren und in deinem Browser einzufügen." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "AUR Kommentar für {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] hat einen Kommentar zu {pkgbase} [2] erstellt:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Wenn Du keine weiteren Benachrichtigungen für dieses Paket erhalten willst, wähle \"{label}\" auf der Seite des Pakets [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "AUR Paket-Update: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] hat einen neuen Commit in {pkgbase} [2] gepushed." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "AUR Out-of-date Benachrichtigung für {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Dein Paket {pkgbase} [1] wurde von {user} [2] als veraltet markiert:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "AUR Besitzer Benachrichtigung für {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "Das Paket {pkgbase} [1] wurde von {user} [2] übernommen." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "Das Paket {pkgbase} [1] wurde von {user} [2] verstoßen." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "AUR Co-Maintainer Benachrichtigung für {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "Du wurdest in die Liste der Co-Maintainer für {pkgbase} [1] aufgenommen." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "Du wurdest von der liste der Co-Maintainer für {pkgbase} [1] entfernt." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "AUR Paket gelöscht: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] führte {old} [2] in {new} [3] zusammen.\n\n-- \nWenn Du Benachrichtigungen über das neue Paket nicht mehr erhalten möchtest, gehe bitte auf [3] und klicke \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] hat {pkgbase} [2] gelöscht.\n\nDu wirst keine weiteren Benachrichtigungen über dieses Paket erhalten." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Bitte denke daran für Vorschlag {id} [1] deine Stimme anzugeben. Die Abstimmungspriode endet in weniger als 48 Stunden." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "Ungültiger Account-Typ bereitgestellt." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "Du hast keine Berechtigung Konto-Typen zu ändern." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "Du hast keine Berechtigung, den Konto-Typ dieses Benutzers zu %s zu ändern." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/el.po b/po/el.po index cbb2e32f..e1f8263a 100644 --- a/po/el.po +++ b/po/el.po @@ -1,2382 +1,1348 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: # Achilleas Pipinellis, 2014 # Achilleas Pipinellis, 2013 # Achilleas Pipinellis, 2013 # Achilleas Pipinellis, 2011 # Achilleas Pipinellis, 2012 -# Leonidas Spyropoulos, 2021-2023 # Lukas Fleischer , 2011 # flamelab , 2011 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Leonidas Spyropoulos, 2021-2023\n" -"Language-Team: Greek (http://app.transifex.com/lfleischer/aurweb/language/el/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Greek (http://www.transifex.com/projects/p/aur/language/el/)\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Η σελίδα δε βρέθηκε" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Μας συγχωρείτε, η σελίδα που ζητήσατε δεν υπάρχει." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Σημείωση" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php msgid "Service Unavailable" msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." msgstr "" -#: html/account.php msgid "Account" -msgstr "Λογαριασμός" +msgstr "" -#: html/account.php template/header.php msgid "Accounts" msgstr "Λογαριασμοί" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Δεν σας επιτρέπεται η πρόσβαση σε αυτήν την περιοχή." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Δεν ήταν δυνατή η λήψη πληροφοριών για αυτόν τον χρήστη." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Δεν έχετε την άδεια να επεξεργαστείτε αυτόν τον λογαριασμό." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Άκυρος κωδικός" - -#: html/account.php msgid "Use this form to search existing accounts." -msgstr "Χρησιμοποιήστε αυτή τη φόρμα για να αναζητήσετε υπάρχοντες λογαριασμούς." +msgstr "" +"Χρησιμοποιήστε αυτή τη φόρμα για να αναζητήσετε υπάρχοντες λογαριασμούς." -#: html/account.php msgid "You must log in to view user information." msgstr "Πρέπει να συνδεθείτε για να δείτε πληροφορίες χρήστη." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Χρησιμοποιήστε αυτή τη φόρμα για να δημιουργήσετε λογαριασμό." + msgid "Add Proposal" msgstr "Προσθέστε Πρόταση" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Μη έγκυρο διακριτικό για την ενέργεια του χρήστη." -#: html/addvote.php msgid "Username does not exist." msgstr "Αυτό το όνομα χρήστη δεν υπάρχει." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s έχει ήδη πρόταση σε εξέλιξη για αυτό το θέμα." -#: html/addvote.php msgid "Invalid type." msgstr "Άκυρος τύπος." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Η πρόταση δεν μπορεί να είναι κενή." -#: html/addvote.php msgid "New proposal submitted." msgstr "Υποβλήθηκε νέα πρόταση." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Υποβάλετε μία πρόταση προς ψήφιση." -#: html/addvote.php msgid "Applicant/TU" msgstr "Αιτών / TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(κενό εάν δεν είναι εφαρμόσιμο)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Είδος" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Προσθήκη ενός TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Αφαίρεση ενός TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Αφαίρεση ενός TU (αδήλωτη αδράνεια)" -#: html/addvote.php msgid "Amendment of Bylaws" -msgstr "Τροποποίηση των Bylaws" +msgstr "Τροποποίηση των " -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Πρόταση" -#: html/addvote.php msgid "Submit" msgstr "Υποβολή" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php msgid "Home" msgstr "Αρχική" -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "Τα πακέτα μου" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Καλωσήρθατε στο AUR! Διαβάστε παρακαλώ τον %sOδηγό Χρηστών του AUR%s και τον " +"%sΟδηγό των Trusted Users%s για περισσότερες πληροφορίες. " -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Τα συνεισφέροντα PKGBUILDs %sπρέπει%s να ακολουθούν τα %sΠρότυπα δημιουργίας πακέτων του Arch%s αλλιώς θα διαγράφονται! " +msgstr "" +"Τα συνεισφέροντα PKGBUILDs %sπρέπει%s να ακολουθούν τα %sΠρότυπα δημιουργίας " +"πακέτων του Arch%s αλλιώς θα διαγράφονται! " -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Θυμηθείτε να ψηφίσετε τα αγαπημένα σας πακέτα!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Ορισμένα πακέτα μπορεί να μεταφερθούν ως binaries στο [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "Ορισμένα πακέτα μπορεί να μεταφερθούν ως binaries στο [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "ΑΠΟΠΟΙΗΣΗ ΕΥΘΥΝΗΣ" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Τα πακέτα στο \"Unsupported\" έχουν περιεχόμενο που παρέχεται απο τους " +"χρήστες. Χρησιμοποιήστε τα με δική σας ευθύνη." + +msgid "Support" msgstr "" -#: html/home.php -msgid "Learn more..." -msgstr "Μάθετε περισσότερα..." - -#: html/home.php -msgid "Support" -msgstr "Υποστήριξη" - -#: html/home.php msgid "Package Requests" msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" msgstr "" -#: html/home.php msgid "Orphan Request" msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." msgstr "" -#: html/home.php msgid "Deletion Request" msgstr "" -#: html/home.php msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." msgstr "" -#: html/home.php msgid "Merge Request" msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php msgid "Discussion" msgstr "Συζήτηση" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Αναφορά Σφαλμάτων" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Αναζήτηση Πακέτου" -#: html/index.php msgid "Adopt" msgstr "Υιοθέτηση" -#: html/index.php msgid "Vote" msgstr "Ψηφίστε" -#: html/index.php msgid "UnVote" msgstr "Αναίρεση ψήφου" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Ειδοποίηση" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Διακοπή Ειδοποίησης" -#: html/index.php +msgid "Flag" +msgstr "Επισήμανση" + msgid "UnFlag" msgstr "Αποχαρακτήριση" -#: html/login.php template/header.php msgid "Login" msgstr "Σύνδεση" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Έχετε συνδεθεί ως: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Αποσύνδεση" -#: html/login.php msgid "Enter login credentials" msgstr "Εισάγετε πιστοποιητικά εισόδου" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "Όνομα χρήστη" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Κωδικός" -#: html/login.php msgid "Remember me" msgstr "Θυμήσου με" -#: html/login.php msgid "Forgot Password" msgstr "Ξεχάσατε τον κωδικό σας" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Το HTTP είναι απενεργοποιημένο. Παρακαλώ %sγυρίστε σε HTTPs%s αν θέλετε να εισέλθετε." +msgstr "" +"Το HTTP είναι απενεργοποιημένο. Παρακαλώ %sγυρίστε σε HTTPs%s αν θέλετε να " +"εισέλθετε." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Κριτήρια Αναζήτησης" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Πακέτα" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Σφάλμα στη διαδικασία λήψης των πληροφοριών του πακέτου." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Λείπει ένα απαραίτητο πεδίο." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." -msgstr "Οι τιμές που εισαγάγατε στα πεδία “κωδικού” και “επιβεβαίωσης κωδικού” δεν είναι ίδιες." +msgstr "" +"Οι τιμές που εισαγάγατε στα πεδία “κωδικού” και “επιβεβαίωσης κωδικού” δεν " +"είναι ίδιες." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Ο κωδικός πρέπει να αποτελείται τουλάχιστον %s χαρακτήρες." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Μη έγκυρο e-mail." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Επαναφορά Κωδικού" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Ελέγξτε το e-mail σας για το σύνδεσμο επιβεβαίωσης." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Το συνθηματικό σας έχει επαναφερθεί με επιτυχία." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" +msgid "Confirm your e-mail address:" +msgstr "Παρακαλώ επιβεβαιώστε την διεύθυνση e-mail σας:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Εισάγετε νέο κωδικό" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Επιβεβαιώστε το νέο σας συνθηματικό:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Συνεχίστε" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" +"Εάν έχετε ξεχάσει την ηλεκτρονική διεύθυνση που χρησιμοποιήσατε για να " +"εγγραφείτε, παρακαλώ στείλτε ένα μήνυμα στη λίστα ταχυδρομείου %saur-general" +"%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "Εισάγετε την διεύθυνση e-mail σας:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "Δεν μπορεί να βρεθεί το πακέτο για τη συγχώνευση ψήφων και σχόλιων" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Τα επιλεγμένα πακέτα δεν έχουν διαγραφεί, παρακαλώ ελέγξτε το κουτάκι επιβεβαίωσης." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Τα επιλεγμένα πακέτα δεν έχουν διαγραφεί, παρακαλώ ελέγξτε το κουτάκι " +"επιβεβαίωσης." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Διαγραφή Πακέτου" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Διαγράψτε πακέτο" +#, php-format +msgid "Delete Package: %s" +msgstr "Διαγράψτε Πακέτο: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " msgstr "" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Η διαγραφή ενός πακέτου είναι μόνιμη." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Επιλέξτε το κουτάκι για να επιβεβαιώσετε." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Επιβεβαιώστε τη διαγραφή του πακέτου" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Διαγράψτε" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Μόνο οι Trusted Users και οι Developers μπορούν να διαγράψουν πακέτα." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Aποδεσμεύστε το Πακέτο" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "Αποδέσμευση" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Σχόλια" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Επισήμανση" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Συγχώνευση Πακέτου" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Συγχώνευση πακέτου" +#, php-format +msgid "Merge Package: %s" +msgstr "Συγχώνευσε Πακέτο: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "" -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Μόλις το πακέτο συγχωνευτεί, η διαδικασία δεν μπορεί να αντιστραφεί." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "Εισάγετε το όνομα του πακέτου με το οποίο επιθυμείτε να συγχωνεύσετε το τρέχον πακέτο." +msgstr "" +"Εισάγετε το όνομα του πακέτου με το οποίο επιθυμείτε να συγχωνεύσετε το " +"τρέχον πακέτο." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Συγχωνεύστε σε:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Επιβεβαιώστε τη συγχώνευση του πακέτου" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Συγχώνευση" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." +msgstr "" +"Μόνο οι Trusted Users και οι Developers μπορούν να συγχωνεύσουν πακέτα." + +msgid "File Request" msgstr "" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Δημιουργία αιτήματος" - -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "Κλείσιμο αιτήματος" +msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Πρώτο" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Προηγούμενο" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Επόμενο" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Τελευταίο" -#: html/pkgreq.php template/header.php msgid "Requests" -msgstr "Αιτήματα" - -#: html/register.php template/header.php -msgid "Register" -msgstr "Εγγραφείτε" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "Χρησιμοποιήστε αυτή τη φόρμα για να δημιουργήσετε λογαριασμό." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Όροι χρήσης" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" msgstr "" -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" +msgid "Trusted User" +msgstr "Trusted User" -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Αποδέχομαι τους παραπάνω όρους χρήσης." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Δεν ήταν δυνατή η ανάκτηση των στοιχείων της πρότασης." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Η ψηφοφορία έχει κλείσει για αυτή την πρόταση." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Μόνο οι Trusted Users έχουν δικαίωμα ψήφου." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Δεν μπορείτε να ψηφίσετε σε μία πρόταση που αφορά σε εσάς." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Έχετε ήδη ψηφίσει για αυτή τη πρόταση." -#: html/tu.php msgid "Vote ID not valid." msgstr "Το ID της ψήφου δεν είναι έγκυρο." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Τρέχουσες ψήφοι" -#: html/tu.php msgid "Past Votes" msgstr "Παρελθόντες ψήφοι" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Ψηφίσαντες" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Η εγγραφή λογαριασμών έχει απενεργοποιηθεί για την IP σας, πιθανόν λόγω επιθέσεων spam. Μας συγχωρείτε για την ενόχληση." +msgstr "" +"Η εγγραφή λογαριασμών έχει απενεργοποιηθεί για την IP σας, πιθανόν λόγω " +"επιθέσεων spam. Μας συγχωρείτε για την ενόχληση." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Λείπει το ID Χρήστη" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Το όνομα χρήστη δεν είναι έγκυρο." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Πρέπει να αποτελείται από %s έως %s χαρακτήρες" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Ξεκινήστε και τελειώστε με γράμμα ή αριθμό" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Μπορεί να περιλαμβάνει μόνο μία τελεία, κάτω παύλα ή παύλα." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Παρακαλώ επαληθεύστε τον κωδικό σας." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "Αυτή η διεύθυνση email δεν είναι έγκυρη." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "Το fingerprint του PGP κλειδιού δεν είναι έγκυρο." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Δε γίνεται να αυξηθούν τα δικαιώματα του λογαριασμού" -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Η γλώσσα αυτή δεν υποστηρίζεται ακόμη." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "Το όνομα, %s%s%s, χρησιμοποιείται ήδη." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "Η διεύθυνση, %s%s%s, χρησιμοποιείται ήδη." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Σφάλμα κατά τη δημιουργία του λογαριασμού, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "Ο λογαριασμός, %s%s%s, δημιουργήθηκε επιτυχώς." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Ένα κλειδί επαναφοράς του κωδικού έχει σταλεί στην ηλεκτρονική σας διεύθυνση." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." -msgstr "Πατήστε στον παραπάνω σύνδεσμο Σύνδεση για να χρησιμοποιήσετε το λογαριασμό σας." +msgstr "" +"Πατήστε στον παραπάνω σύνδεσμο Σύνδεση για να χρησιμοποιήσετε το λογαριασμό " +"σας." + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Καλώς ήρθατε στο %s! Για να ορίσετε έναν αρχικό κωδικό για το νέο σας " +"λογαριασμό, παρακαλώ πατήστε τον παρακάτω σύνδεσμο. Αν ο σύνδεσμος δε " +"δουλέψει προσπαθήστε να τον κάνετε αντιγραφή και επικόλληση στον browser σας." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" +"Ένα κλειδί επαναφοράς του κωδικού έχει σταλεί στην ηλεκτρονική σας διεύθυνση." -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Δεν έγιναν αλλαγές στο λογαριασμό, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "Ο λογαριασμός, %s%s%s, τροποποποιήθηκε επιτυχώς." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Η σύνδεση στο λογαριασμό σας έχει απενεργοποιηθεί για την IP σας, πιθανόν λόγω επιθέσεων spam. Μας συγχωρείτε για την ταλαιπωρία." +msgstr "" +"Η σύνδεση στο λογαριασμό σας έχει απενεργοποιηθεί για την IP σας, πιθανόν " +"λόγω επιθέσεων spam. Μας συγχωρείτε για την ταλαιπωρία." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Ο λογαριασμός έχει ανασταλεί" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Η επαναφορά του κωδικού σας έχει πραγματοποιηθεί. Αν μόλις δημιουργήσατε ένα νέο λογαρισμό, παρακαλώ χρησιμοποιείστε τον σύνδεσμο από το email ενεργοποίησης για να ορίσετε έναν αρχικό κωδικό. Διαφορετικά, παρακαλείσθε να ζητήσετε ένα κλειδί επαναφοράς στη σελίδα %sPassword Reset%s." +msgstr "" +"Η επαναφορά του κωδικού σας έχει πραγματοποιηθεί. Αν μόλις δημιουργήσατε ένα " +"νέο λογαρισμό, παρακαλώ χρησιμοποιείστε τον σύνδεσμο από το email " +"ενεργοποίησης για να ορίσετε έναν αρχικό κωδικό. Διαφορετικά, παρακαλείσθε " +"να ζητήσετε ένα κλειδί επαναφοράς στη σελίδα %sPassword Reset%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Λάθος όνομα χρήστη ή συνθηματικό." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Ένα σφάλμα προέκυψε προσπαθώντας να δημιουργήσετε μια συνεδρία χρήστη." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Μη έγκυρο e-mail και συνδυασμός κλειδιού επαναφοράς" -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Κανένα" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Δείτε τις πληροφορίες λογαριασμού του %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Το σχόλιο έχει προστεθεί." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Πρέπει να έχετε συνδεθεί για να προσπαθήσετε να επεξεργαστείτε τις πληροφορίες του πακέτου." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Λείπει το ID του σχολίου." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Σφάλμα κατά τη διάρκεια φόρτωσης των πληροφοριών του πακέτου." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Οι πληροφορίες του πακέτου δεν μπόρεσαν να βρεθούν." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Πρέπει να έχετε συνδεθεί για να επισημάνετε τα πακέτα." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Δεν επιλέξατε κάποιο πακέτο για επισήμανση." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Τα συγκεκριμένα πακέτα έχουν επισημανθεί ως παρωχημένα." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Πρέπει να έχετε συνδεθεί για να μπορέσετε να αποχαρακτηρίσετε πακέτα." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Δεν επιλέξατε κάποιο πακέτο για να αποχαρακτηρίσετε." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Τα συγκεκριμένα πακέτα έχουν αποεπισημανθεί." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Δεν έχετε τα απαραίτητα δικαιώματα για να διαγράψετε τα πακέτα." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Δεν επιλέξατε κάποιο πακέτο για να διαγράψετε." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Tα επιλεγμένα πακέτα έχουν διαγραφεί." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Πρέπει να έχετε συνδεθεί για να μπορέσετε να υιοθετήσετε πακέτα." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Πρέπει να έχετε συνδεθεί για να μπορέσετε να αποδεσμεύσετε πακέτα." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Δεν επιλέξατε κανένα πακέτο για να υιοθετήσετε." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Δεν επιλέξατε κάποιο πακέτο για απόρριψη." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Τα επιλεγμένα πακέτα έχουν υιοθετηθεί." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Τα επιλεγμένα πακέτα έχουν αποδεσμευθεί." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Πρέπει να έχετε συνδεθεί για να μπορέσετε να ψηφίσετε για πακέτα." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." -msgstr "Πρέπει να έχετε συνδεθεί για να μπορέσετε να ακυρώσετε την ψήφο σας για πακέτα." +msgstr "" +"Πρέπει να έχετε συνδεθεί για να μπορέσετε να ακυρώσετε την ψήφο σας για " +"πακέτα." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Δεν επιλέξατε κάποιο πακέτο για να το ψηφίσετε." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Οι ψήφοι σας έχουν αφαιρεθεί από τα επιλεγμένα πακέτα." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Οι ψήφοι σας προστέθηκαν στα επιλεγμένα πακέτα." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Δεν ήταν δυνατή η προσθήκη του στη λίστα ειδοποίησης." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Έχετε προστεθεί στη λίστα ειδοποίησης σχολίων για το %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Έχετε αφαιρεθεί από τη λίστα ειδοποίησης σχολίων για το %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." +msgid "You must be logged in before you can edit package information." msgstr "" +"Πρέπει να έχετε συνδεθεί για να προσπαθήσετε να επεξεργαστείτε τις " +"πληροφορίες του πακέτου." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" +msgid "Missing comment ID." +msgstr "Λείπει το ID του σχολίου." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Δεν σας επιτρέπεται να διαγράψετε αυτό το σχόλιο." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Το σχόλιο έχει διαγραφεί." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" +msgid "You are not allowed to delete this comment." +msgstr "Δεν σας επιτρέπεται να διαγράψετε αυτό το σχόλιο." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" +msgid "Missing category ID." +msgstr "Μη υπαρκτό ID κατηγορίας." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" +msgid "Invalid category ID." +msgstr "Μη έγκυρο ID κατηγορίας." + +msgid "You are not allowed to change this package category." +msgstr "Δεν σας επιτρέπεται να αλλάξετε την κατηγορία αυτού του πακέτου." + +msgid "Package category changed." +msgstr "Έγινε αλλαγή κατηγορίας πακέτου." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Δείτε τις λεπτομέρειες πακέτου για το" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Μη έγκυρο όνομα: μόνο πεζοί χαρακτήρες επιτρέπονται." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "" -#: template/account_delete.php msgid "Confirm deletion" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Όνομα χρήστη" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Είδος λογαριασμού" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Χρήστης" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Developer" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" +msgid "Trusted User & Developer" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Διεύθυνση email" -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Πραγματικό 'Ονομα" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Ψευδώνυμο IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "PGP Key Fingerprint" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Κατάσταση" -#: template/account_details.php msgid "Inactive since" msgstr "Αδρανής από" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Ενεργός" -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "άγνωστο" - -#: template/account_details.php msgid "Last Login" msgstr "Τελευταία σύνδεση" -#: template/account_details.php msgid "Never" msgstr "Ποτέ" -#: template/account_details.php msgid "View this user's packages" msgstr "Δείτε τα πακέτα αυτού του χρήστη" -#: template/account_details.php msgid "Edit this user's account" msgstr "Τροποποιήστε το λογαριασμό αυτού του χρήστη" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "απαιτούμενο" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Απλός χρήστης" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Αξιόπιστος χρήστης" + msgid "Account Suspended" msgstr "Ο Λογαριασμός έχει Ανασταλεί." -#: template/account_edit_form.php msgid "Inactive" msgstr "Αδρανής" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Γλώσσα" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Πληκτρολογήστε ξανά τον κωδικό σας." -#: template/account_edit_form.php +msgid "Language" +msgstr "Γλώσσα" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Ειδοποίησε για νέα σχόλια" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Eνημέρωση" -#: template/account_edit_form.php msgid "Create" msgstr "Δημιουργήστε" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Επαναφορά" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Δε βρέθηκε αποτέλεσμα που να ικανοποιεί τα κριτήρια αναζήτησης." -#: template/account_search_results.php msgid "Edit Account" msgstr "Τροποποίηση Λογαριασμού" -#: template/account_search_results.php msgid "Suspended" msgstr "Έχει ανασταλεί" -#: template/account_search_results.php msgid "Edit" msgstr "Επεξεργασία" -#: template/account_search_results.php msgid "Less" msgstr "Λιγότερο" -#: template/account_search_results.php msgid "More" msgstr "Περισσότερα" -#: template/account_search_results.php msgid "No more results to display." msgstr "Δεν υπάρχουν άλλα αποτελέσματα για να δείτε." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" msgstr "" -#: template/comaintainers_form.php msgid "Users" msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" +msgid "My Packages" +msgstr "Τα πακέτα μου" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php msgid " My Account" msgstr "Ο λογαριασμός μου" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Εγγραφείτε" + +msgid "unknown" +msgstr "άγνωστο" + +msgid "Package Base Details" +msgstr "" + msgid "Package Actions" msgstr "Ενέργειες Πακέτου" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Δείτε το PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" +msgid "Flagged out-of-date" +msgstr "Επισημάνθηκε ως παρωχημένο" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Επισημάνετε ως παρωχημένο" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Αποχαρακτηρίστε ως παρωχημένο" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Αφαιρέστε ψήφο" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Ψηφίστε για αυτό το πακέτο" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Απενεργοποιήστε τις ειδοποιήσεις" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" +msgid "Notify of new comments" +msgstr "Ειδοποίησε για νέα σχόλια" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "" msgstr[1] "" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Διαγράψτε πακέτο" + +msgid "Merge Package" +msgstr "Συγχώνευση πακέτου" + msgid "Adopt Package" msgstr "Υιοθετήστε το Πακέτο" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" +msgid "Category" +msgstr "Κατηγορία" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" +msgid "Change category" +msgstr "Αλλαγή κατηγορίας" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Λέξεις κλειδιά" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Υποβάλλων" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Δείτε τις πληροφορίες λογαριασμού του %s" + msgid "Maintainer" msgstr "Συντηρητής" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Ψήφοι" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Πρώτη Υποβολή" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Τελευταία Ενημέρωση" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Προσθέστε σχόλιο" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." +msgid "Comment has been added." +msgstr "Το σχόλιο έχει προστεθεί." + +msgid "View all comments" msgstr "" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Τελευταία σχόλια" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Διαγράψτε το σχόλιο" -#: template/pkg_comments.php -msgid "Pin comment" +#, php-format +msgid "Comment by %s" +msgstr "Σχόλιο από %s" + +msgid "Anonymous comment" +msgstr "Ανώνυμο σχόλιο" + +msgid "deleted" msgstr "" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" +msgid "All comments" +msgstr "Όλα τα σχόλια" -#: template/pkg_details.php msgid "Package Details" msgstr "Πληροφορίες Πακέτου" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Περιγραφή" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Upstream URL" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Επισκεφτείτε την ιστοσελίδα για " -#: template/pkg_details.php msgid "Licenses" msgstr "" -#: template/pkg_details.php msgid "Groups" msgstr "" -#: template/pkg_details.php msgid "Conflicts" msgstr "" -#: template/pkg_details.php msgid "Provides" msgstr "" -#: template/pkg_details.php msgid "Replaces" msgstr "" -#: template/pkg_details.php msgid "Dependencies" msgstr "Εξαρτήσεις" -#: template/pkg_details.php msgid "Required by" msgstr "Απαιτείται από" -#: template/pkg_details.php msgid "Sources" msgstr "Πηγές" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "" + #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "" -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." msgstr "" -#: template/pkgreq_close_form.php msgid "Reason" msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Δεκτός" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Απορριπτέος" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "" + +#, php-format +msgid "File Request: %s" +msgstr "" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" msgstr "" -#: template/pkgreq_form.php msgid "Request type" msgstr "" -#: template/pkgreq_form.php msgid "Deletion" msgstr "" -#: template/pkgreq_form.php msgid "Orphan" msgstr "" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Συγχώνευση σε" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "" msgstr[1] "" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "" -#: template/pkgreq_results.php msgid "Package" msgstr "" -#: template/pkgreq_results.php msgid "Filed by" msgstr "" -#: template/pkgreq_results.php msgid "Date" msgstr "" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" +msgid "~%d days left" +msgstr "" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "" msgstr[1] "" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "" -#: template/pkgreq_results.php msgid "Accept" msgstr "" -#: template/pkgreq_results.php msgid "Locked" msgstr "" -#: template/pkgreq_results.php msgid "Close" msgstr "" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php msgid "Closed" msgstr "" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Όνομα, Περιγραφή" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Όνομα μόνο" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php msgid "All" msgstr "Όλα" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Σημειωμένα" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Μη Σημειωμένα" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Όνομα" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Ψηφισμένο" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" +msgid "Age" +msgstr "Ηλικία" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Αύξουσα" -#: template/pkg_search_form.php msgid "Descending" msgstr "Φθίνουσα" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Εισάγετε κριτήρια αναζήτησης" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Οποιαδήποτε" + msgid "Search by" msgstr "Αναζήτηση κατά" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Λέξεις κλειδιά" + msgid "Out of Date" msgstr "Παρωχημένα" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Ταξινόμηση κατά" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Σειρά ταξινόμησης" -#: template/pkg_search_form.php msgid "Per page" msgstr "Ανά σελίδα" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Πήγαινε" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Ορφανά" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Σφάλμα κατά τη λήψη της λίστας πακέτων." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Κανένα πακέτο δεν ικανοποιεί τα κριτήρια αναζήτησης σας." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "" msgstr[1] "" -#: template/pkg_search_results.php msgid "Version" msgstr "Έκδοση" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Ναι" -#: template/pkg_search_results.php msgid "orphan" msgstr "ορφανό" -#: template/pkg_search_results.php msgid "Actions" msgstr "Ενέργειες" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Επισημάνετε ως Παρωχημένο" + msgid "Unflag Out-of-date" msgstr "Αποχαρακτηρίστε το πακέτο ως Παρωχημένο" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Υιοθετήστε Πακέτα" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Aποδεσμεύστε Πακέτα" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Διαγράψτε Πακέτα" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Επιβεβαιώστε" -#: template/search_accounts_form.php msgid "Any type" msgstr "Κάθε είδος" -#: template/search_accounts_form.php msgid "Search" msgstr "Αναζήτηση" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Στατιστικά" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Ορφανά Πακέτα" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Πακέτα που προστέθηκαν τις τελευταίες 7 ημέρες" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Πακέτα που ενημερώθηκαν τις τελευταίες 7 ημέρες" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Πακέτα που ενημερώθηκαν κατά το παρελθόν έτος" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Πακέτα που δεν ενημερώθηκαν ποτέ" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Εγγεγραμμένοι Χρήστες" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Trusted Users" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Πρόσφατες Ανανεώσεις" -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Τα στατιστικά μου" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Μη υποστηριζόμενα πακέτα" + msgid "Proposal Details" msgstr "Πληροφορίες Πρότασης" -#: template/tu_details.php msgid "This vote is still running." msgstr "Η ψηφοφορία αυτή βρίσκεται ακόμη σε εξέλιξη." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Υποβλήθηκε: %s από %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Τέλος" -#: template/tu_details.php msgid "Result" msgstr "Αποτέλεσμα" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Όχι" -#: template/tu_details.php msgid "Abstain" msgstr "Απέχουν" -#: template/tu_details.php msgid "Total" msgstr "Σύνολο" -#: template/tu_details.php msgid "Participation" msgstr "Συμμετοχή" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Κανένα αποτέλεσμα δεν βρέθηκε." -#: template/tu_list.php msgid "Start" msgstr "Ξεκινήστε" -#: template/tu_list.php msgid "Back" msgstr "Πίσω" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/es.po b/po/es.po index c723771c..fe940e06 100644 --- a/po/es.po +++ b/po/es.po @@ -1,2392 +1,1372 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Adolfo Jayme-Barrientos, 2015 -# Angel Velasquez , 2011,2023 -# Jose Serrano Pérez, 2023 +# Angel Velasquez , 2011 # juantascon , 2011 # Lukas Fleischer , 2011 # neiko , 2011 # Nicolás de la Torre , 2012 -# Pablo Lezaeta Reyes , 2012 -# Pablo Lezaeta Reyes , 2016-2017 -# Pablo Lezaeta Reyes , 2013-2016 -# Pablo Lezaeta Reyes , 2016-2017 -# Pablo Lezaeta Reyes , 2016 -# Pablo Lezaeta Reyes , 2019 +# Pablo Roberto Francisco Lezaeta Reyes , 2012 +# Pablo Roberto Francisco Lezaeta Reyes , 2013-2015 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Angel Velasquez , 2011,2023\n" -"Language-Team: Spanish (http://app.transifex.com/lfleischer/aurweb/language/es/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/aur/language/" +"es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Página no encontrada" -#: html/404.php msgid "Sorry, the page you've requested does not exist." -msgstr "La página solicitada no existe." +msgstr "Disculpe, la página que solicitó no existe." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Nota" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Las direcciones de repositorios git no deberían ser abiertas en un navegador." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Para clonar el repositorio Git de %s, ejecuta %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Haz clic %saquí%s para regresar a la página de detalles de %s." - -#: html/503.php msgid "Service Unavailable" -msgstr "Servicio no disponible" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "¡No te asustes! El sitio está desactivado por tareas de mantenimiento. Volveremos pronto." +msgstr "" -#: html/account.php msgid "Account" msgstr "Cuenta" -#: html/account.php template/header.php msgid "Accounts" msgstr "Cuentas" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." -msgstr "No estás autorizado para acceder a esta área." +msgstr "No está autorizado a acceder a esta área." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "No se pudo obtener la información del usuario especificado." -#: html/account.php msgid "You do not have permission to edit this account." -msgstr "No tienes los permisos para editar esta cuenta." +msgstr "No tiene permisos para editar esta cuenta." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Contraseña inválida." - -#: html/account.php msgid "Use this form to search existing accounts." -msgstr "Usa este formulario para buscar cuentas existentes." +msgstr "Use este formulario para buscar cuentas existentes." -#: html/account.php msgid "You must log in to view user information." -msgstr "Debes autentificarte para ver la información del usuario." +msgstr "Debe autentificarse para ver la información del usuario." + +msgid "Use this form to create an account." +msgstr "Use este formulario para crear una cuenta." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "Añadir propuesta" -#: html/addvote.php msgid "Invalid token for user action." -msgstr "La ficha no es válida para la acción de usuario." +msgstr "Elemento inválido para la acción del usuario." -#: html/addvote.php msgid "Username does not exist." msgstr "El nombre de usuario no existe." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s ya tiene una propuesta activa." -#: html/addvote.php msgid "Invalid type." msgstr "Tipo no válido." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "La propuesta no puede estar vacía." -#: html/addvote.php msgid "New proposal submitted." msgstr "Nueva propuesta enviada." -#: html/addvote.php msgid "Submit a proposal to vote on." -msgstr "Envía una propuesta a la cual votar." +msgstr "Envíe una propuesta a la cual votar." -#: html/addvote.php msgid "Applicant/TU" -msgstr "Candidato/Usuario de confianza (UC)" +msgstr "Candidato/Usuario de confianza (TU)" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(vacío si no aplica)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Tipo" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Agregar a un nuevo usuario de confianza" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Remover a un usuario de confianza" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Remover a un usuario de confianza (no declarado inactivo)" -#: html/addvote.php msgid "Amendment of Bylaws" -msgstr "Enmienda a los Estatutos" +msgstr "Enmienda a las Bylaws (Reglas de los TU)" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Propuesta" -#: html/addvote.php msgid "Submit" msgstr "Subir" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "Administrar coencargados" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Editar comentario" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Tablero" - -#: html/home.php template/header.php msgid "Home" msgstr "Inicio" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Mis paquetes marcados" - -#: html/home.php -msgid "My Requests" -msgstr "Mis solicitudes" - -#: html/home.php -msgid "My Packages" -msgstr "Mis paquetes" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Buscar paquetes que mantengo" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Paquetes que soy coencargado" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Buscar paquetes que soy coencargado" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"¡Bienvenido al repositorio de usuarios de Arch! Lea las %sDirectrices del " +"usuario del AUR%s y las %sDirectrices del usuario de confianza del AUR%s " +"para mayor información." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Los PKGBUILD contribuidos %sdeben%s ser compatibles con el %sEstándar de empaquetado de Arch%s de otra forma serán eliminados." +msgstr "" +"Los PKGBUILD contribuidos %sdeben%s ser compatibles con el %sEstándar de " +"empaquetado de Arch%s de otra forma serán eliminados." -#: html/home.php msgid "Remember to vote for your favourite packages!" -msgstr "¡Recuerda votar tus paquetes favoritos!" +msgstr "¡Recuerde votar sus paquetes favoritos!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Algunos paquetes pueden estar provistos de forma binaria en [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"Algunos paquetes pueden estar provistos de forma binaria en [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "ACLARATORIA" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Los paquetes del AUR son producidos por los usuarios. Cualquier uso de los archivos de estos es a tu propio riesgo." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Los paquetes no soportados son producidos por los usuarios. Cualquier uso de " +"los archivos de estos es a su propio riesgo." -#: html/home.php -msgid "Learn more..." -msgstr "Más información…" - -#: html/home.php msgid "Support" -msgstr "Ayuda" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Solicitudes para los paquetes" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Hay tres tipos de solicitudes que puedes presentar en el cuadro %sAcciones del paquete%s en la página de detalles del paquete:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Solicitud de orfandad" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Solicitar la orfandad de un paquete, por ejemplo, cuando el encargado está inactivo y el paquete se ha marcado como obsoleto por un largo tiempo." - -#: html/home.php -msgid "Deletion Request" -msgstr "Solicitud de eliminación" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Solicitud de unión" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Solicitar que un paquete sea unido con otro. Puede ser utilizado cuando un paquete tiene que ser cambiado de nombre o sustituido por un paquete dividido." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Si quieres discutir una solicitud, puedes utilizar la lista de correo %saur-requests%s. Sin embargo, por favor no utilices esa lista para presentar solicitudes." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Subir paquetes" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Ahora se utiliza Git sobre SSH para subir paquetes al AUR. Véase la sección %sSubir paquetes%s de la wiki del repositorio de usuarios de Arch para más detalles." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Las siguientes huellas SSH están en uso para el AUR." - -#: html/home.php msgid "Discussion" msgstr "Debate" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Informe de errores" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Buscar paquetes" -#: html/index.php msgid "Adopt" msgstr "Adoptar" -#: html/index.php msgid "Vote" msgstr "Votar" -#: html/index.php msgid "UnVote" msgstr "Retirar voto" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Notificar" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Quitar notificación" -#: html/index.php +msgid "Flag" +msgstr "Marcar" + msgid "UnFlag" msgstr "Desmarcar" -#: html/login.php template/header.php msgid "Login" -msgstr "Autentificarte" +msgstr "Autentificarse" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Autentificado como: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Salir" -#: html/login.php msgid "Enter login credentials" -msgstr "Proporciona tus datos de acceso" +msgstr "Introduce las credenciales de autentificación" -#: html/login.php -msgid "User name or primary email address" -msgstr "Nombre de usuario o dirección de correo electrónico principal" +msgid "Username" +msgstr "Nombre de usuario" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Contraseña" -#: html/login.php msgid "Remember me" msgstr "Recordarme" -#: html/login.php msgid "Forgot Password" -msgstr "¿Olvidaste tu contraseña?" +msgstr "Olvidó su cotraseña" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "La autentificación por HTTP está deshabilitada. %scambia a HTTPS%s si deseas autentificarte" +msgstr "" +"La autentificación por HTTP está deshabilitada. %scambie a HTTPS%s si desea " +"autentificarse" -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Criterio de búsqueda" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Paquetes" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "No se pudieron recuperar correctamente los detalles del paquete." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Falta un campo obligatorio." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Los campos de la contraseña no coinciden." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." -msgstr "Tu contraseña debe tener como mínimo %s letras." +msgstr "Su contraseña debe tener como mínimo %s letras." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Dirección de correo no válida." -#: html/passreset.php -msgid "Password Reset" -msgstr "Restablecer la contraseña" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "Comprueba tu correo para ver el enlace de confirmación." - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "Se ha restablecido la contraseña correctamente." - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." msgstr "" +"Una solicitud de restablecimiento de contraseña se presentó para la cuenta " +"%s asociado a su dirección de correo electrónico. Si desea restablecer su " +"contraseña siga el enlace de abajo, si no ignore este mensaje y no pasará " +"nada." + +msgid "Password Reset" +msgstr "Reiniciar la contraseña" + +msgid "Check your e-mail for the confirmation link." +msgstr "Compruebe su correo para ver el enlace de confirmación." + +msgid "Your password has been reset successfully." +msgstr "Su contraseña ha sido reiniciada con éxito." + +msgid "Confirm your e-mail address:" +msgstr "Confirme su dirección de correo:" -#: html/passreset.php msgid "Enter your new password:" -msgstr "Escribe tu contraseña nueva:" +msgstr "Introduzca su nueva contraseña:" -#: html/passreset.php msgid "Confirm your new password:" -msgstr "Confirma la contraseña nueva:" +msgstr "Confirme su nueva contraseña:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Continuar" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" +"Si olvidó la dirección de correo que usó para registrarse, envíe un mensaje " +"a la %slista de correo aur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "Introduzca su dirección de correo:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Paquetes base" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Los paquetes seleccionados no se han abandonado, marca la casilla de confirmación." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." msgstr "" +"Los paquetes seleccionados no se han abandonado, marque la casilla de " +"confirmación." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "No se puede encontrar el paquete para unir los votos y comentarios en él." +msgstr "" +"No se puede encontrar el paquete para unir los votos y comentarios en él." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "No se puede unir un paquete base consigo mismo." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Los paquetes seleccionados no han sido eliminados, comprueba la casilla de confirmación." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Los paquetes seleccionados no han sido eliminados, compruebe la casilla de " +"confirmación." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Eliminación de paquetes" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Eliminar paquete" +#, php-format +msgid "Delete Package: %s" +msgstr "Eliminar paquete: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Usa este formulario para eliminar el paquete base %s%s%s y los siguientes paquetes en el AUR:" +msgstr "" +"Use este formulario para eliminar el paquete base %s%s%s y los siguientes " +"paquetes en el AUR:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "El eliminado de un paquete es permanente." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Selecciona la casilla para confirmar la acción." -#: html/pkgdel.php msgid "Confirm package deletion" -msgstr "Confirma la eliminación del paquete" +msgstr "Confirme la eliminación del paquete" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Eliminar" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." +msgid "Only Trusted Users and Developers can delete packages." msgstr "" +"Solamente usuarios de confianza y desarrolladores pueden eliminar paquetes." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Abandonar paquete" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "Abandonar paquete: %s" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Utiliza este formulario para abandonar el paquete base %s %s %s que incluye los siguientes paquetes:" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" +"Utilice este formulario para abandonar el paquete base %s %s %s que incluye " +"los siguientes paquetes:" -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Al seleccionar la casilla de verificación, confirmas que deseas abandonar el paquete y transferir su propiedad a %s%s%s." +msgstr "" +"Al seleccionar la casilla de verificación, confirma que desea abandonar el " +"paquete y transferir su propiedad a %s%s%s." -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Al seleccionar la casilla de verificación, confirmas que deseas abandonar el paquete." +msgstr "" +"Al seleccionar la casilla de verificación, confirma que desea abandonar el " +"paquete." -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "Confirma para abandonar el paquete" +msgstr "Confirme para abandonar el paquete" -#: html/pkgdisown.php msgid "Disown" msgstr "Abandonar" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" +"Solamente usuarios de confianza y desarrolladores puede forzar el abandono " +"de paquetes." -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Marcar comentario" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Marcado como obsoleto" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Usa este formulario para marcar el paquete base %s%s%s y los siguientes paquetes en el AUR como obsoletos:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "%sNo%s uses el formulario para reportar fallos. Usa los comentarios del paquete para ello." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Introduce el porqué del marcado del paquete como obsoleto, preferiblemente incluye un enlace al anuncio de la nueva versión o al paquete comprimido." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Comentarios" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Marcar" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Solamente los usuario registrados pueden marcar como obsoleto." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Unión de paquetes" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Unir paquete" +#, php-format +msgid "Merge Package: %s" +msgstr "Unir paquete: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "Este formulario es para unir el paquete base %s%s%s en otro paquete." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Los siguientes paquetes serán eliminados:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Una vez unido el paquete este no puede ser separado." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "Introduce el nombre del paquete que deseas unir." +msgstr "Introduzca el nombre del paquete que desea unir." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Unir dentro:" -#: html/pkgmerge.php msgid "Confirm package merge" -msgstr "Confirma la unión de paquetes" +msgstr "Confirmar unión de paquetes" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Unión" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." msgstr "" +"Solamente usuarios de confianza y desarrolladores pueden unir paquetes." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Enviar solicitud" +msgid "File Request" +msgstr "Solicitud para el paquete" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Cerrar solicitud" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Primero" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Anterior" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Siguiente" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Último" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Solicitud" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registro" +msgid "Trusted User" +msgstr "Usuario de confianza" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Usa este formulario para crear una cuenta." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Terminos y condiciones" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Los siguientes documentos han sido actualizados. revísalos cuidadosamente:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "Revisión %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Acepto los términos y condiciones anteriores." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "No se han podido recuperar los detalles de la propuesta." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Las votaciones para esta propuesta están cerradas." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Solamente usuarios de confianza pueden votar." -#: html/tu.php msgid "You cannot vote in an proposal about you." -msgstr "No puedes votar en una propuesta sobre ti." +msgstr "No puede votar en una propuesta sobre usted." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Ya ha votado en esta propuesta." -#: html/tu.php msgid "Vote ID not valid." msgstr "El identificador del voto no es válido." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Votos actuales" -#: html/tu.php msgid "Past Votes" msgstr "Últimos votos" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Votantes" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "El registro de nuevas cuentas está desabilitado para tu dirección IP, probablemente debido a numerosos ataque de correo basura. Perdona los inconvenientes" +msgstr "" +"El registro de nuevas cuentas está desabilitado para su dirección IP, " +"probablemente debido a numerosos ataque de correo basura. Perdone los " +"inconvenientes" -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Falta el identificador de usuario" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "El nombre de usuario no es válido." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Debe tener entre %s y %s letras" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Comenzar y acabar con una letra o número" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Solamente puede contener un punto, guion bajo o guion." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "La dirección de correo no es válida." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "La página de inicio no es válida. Especifica la dirección HTTP(S) completa." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "La huella digital PGP no es válida." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "La clave pública SSH no es válida." -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "No se puede incrementar los permisos de la cuenta." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "El idioma no está soportado actualmente." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "El huso horario no es admitido actualmente." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "El nombre de usuario, %s%s%s, ya está en uso." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "La dirección, %s%s%s, ya está en uso." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "La clave pública SSH %s%s%s ya está en uso." -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Error tratando de crear la cuenta, %s%s%s" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." -msgstr "La cuenta, %s%s%s, ha sido creada satisfactoriamente." +msgstr "La cuenta, %s%s%s, fue creada satisfactoriamente." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Se envió una clave de restablecimiento de contraseña a tu dirección de correo electrónico." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." -msgstr "Pulsa en el enlace de acceso anterior para utilizar la cuenta." +msgstr "Haz clic en el enlace de autentificación para usar su cuenta." + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"¡Bienvenido/a a %s! En orden para crear su contraseña para su nueva cuenta, " +"haga clic en el enlace inferior. Si este no funciona, copie y pegue este en " +"la barra de direcciones de su navegador web." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "Una llave para reiniciar su contraseña a sido enviada a su correo." -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "No se realizaron cambios a la cuenta, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." -msgstr "La cuenta, %s%s%s, ha sido modificada satisfactoriamente" +msgstr "La cuenta, %s%s%s, fue modificada satisfactoriamente" -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "El formulario de registro ha sido deshabilitado para tu dirección IP, probablemente debido a numerosos ataque de correo basura. Perdona los inconvenientes" +msgstr "" +"El formulario de registro ha sido deshabilitado para su dirección IP, " +"probablemente debido a numerosos ataque de correo basura. Perdone los " +"inconvenientes" -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Cuenta suspendida" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Tu contraseña ha sido reinicializada, si creaste una nueva cuenta, utiliza el enlace inferior para confirmar el correo y así crear tu contraseña inicial. En caso contrario, pide un reinicialización de contraseña en la página para %sReinicializar las contraseñas%s." +msgstr "" +"Su contraseña ha sido reiniciada, si creó una nueva cuenta, utilice el " +"enlace inferior para confirmar el correo y así crear su contraseña inicial. " +"En caso contrario, pida una reinicio de contraseña en la página para " +"%sReiniciar las contraseñas%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Contraseña o nombre de usuario erróneos." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Un error ocurrió intentando generar la sesión." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." -msgstr "Combinación de dirección de correo y clave no válidos." +msgstr "Combinación de dirección de correo y clave no válida." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Nada" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Ver información de la cuenta para %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Falta el identificador o el nombre del paquete base." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "No tienes permitido editar este comentario." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "El comentario no existe." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "El comentario no puede estar vacío." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Se ha añadido el comentario." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Debes autentificarte antes de editar la información del paquete." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Falta el identificador del comentario." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "No pueden fijarse más de 5 comentarios." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "No tienes permitido fijar este comentario." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "No tienes permitido desfijar este comentario." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "El comentario ha sido fijado." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "El comentario ha sido desfijado." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Error al recuperar los detalles del paquete." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Los detalles del paquete no se han podido encontrar." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." -msgstr "Debes autentificarte antes de poder marcar paquetes." +msgstr "Debe autentificarse antes de poder marcar paquetes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." -msgstr "No seleccionaste ningún paquete a marcar." +msgstr "No seleccionó ningún paquete para marcar." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Los paquetes seleccionados no han sido marcados como desactualizados, escribe un comentario." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." -msgstr "Los paquetes seleccionados han sido marcados como obsoletos." +msgstr "Los paquetes seleccionados han sido marcados como desactualizados." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." -msgstr "Debes autentificarte antes de poder desmarcar paquetes." +msgstr "Debe autentificarse antes de poder desmarcar paquetes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." -msgstr "No seleccionaste ningún paquete a desmarcar." +msgstr "No seleccionó ningún paquete para desmarcar." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Los paquetes seleccionados han sido desmarcados." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." -msgstr "No posees los permisos para eliminar paquetes." +msgstr "No posee los permisos para eliminar paquetes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." -msgstr "No seleccionaste ningún paquete a eliminar." +msgstr "No seleccionó ningún paquete para eliminar." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Los paquetes seleccionados se han eliminado." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." -msgstr "Debes autentificarte antes de poder adoptar paquetes." +msgstr "Debe autentificarse antes de poder adoptar paquetes." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." -msgstr "Debes autentificarte antes de poder abandonar paquetes." +msgstr "Debe autentificarse antes de poder abandonar paquetes." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." -msgstr "No haz seleccionado ningún paquete para ser adoptado." +msgstr "No ha seleccionado ningún paquete para ser adoptado." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." -msgstr "No seleccionaste ningún paquete para ser abandonado." +msgstr "No seleccionó ningún paquete para ser abandonado." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Los paquetes seleccionados han sido adoptados." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Los paquetes seleccionados han sido abandonados." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." -msgstr "Debes autentificarte antes de poder votar paquetes." +msgstr "Debe autentificarse antes de poder votar paquetes." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." -msgstr "Debes autentificarte antes de poder quitar votos a los paquetes" +msgstr "Debe autentificarse antes de poder quitar votos a los paquetes" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." -msgstr "No seleccionaste ningún paquete a votar." +msgstr "No seleccionó ningún paquete para votarlo." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." -msgstr "Tus votos han sido eliminados de los paquetes seleccionados." +msgstr "Sus votos han sido eliminados de los paquetes seleccionados." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." -msgstr "Tus votos han sido computados para los paquetes seleccionados." +msgstr "Sus votos han sido computados para los paquetes seleccionados." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "No se pudo añadir a la lista de notificaciones." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Ha sido añadido a la lista de notificaciones de comentarios de %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Ha sido eliminado de la lista de notificaciones de comentarios de %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "No estás autorizado a restablecer este comentario." +msgid "You must be logged in before you can edit package information." +msgstr "Debe autentificarse antes de editar la información del paquete." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "El comentario se ha restablecido." +msgid "Missing comment ID." +msgstr "Falta el identificador del comentario." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "No estás autorizado para eliminar este comentario." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." -msgstr "El comentario ha sido eliminado." +msgstr "Comentario eliminado." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "El comentario ha sido editado." +msgid "You are not allowed to delete this comment." +msgstr "No está autorizado a eliminar este comentario." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "No estás autorizado para editar las palabras clave de este paquete base." +msgid "Missing category ID." +msgstr "Falta el Identificador de categoría." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Las palabras clave del paquete base se han actualizado." +msgid "Invalid category ID." +msgstr "El identificador de categoría no es válido." + +msgid "You are not allowed to change this package category." +msgstr "No puede cambiar la categoría de este paquete." + +msgid "Package category changed." +msgstr "Categoría del paquete cambiada." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "No se te permite administrar los coencargados de este paquete base." +msgstr "No se le permite administrar los coencargados de este paquete base." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "Nombre de usuario no válido: %s" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "Los coencargados del paquete base han sido actualizados." -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Ver detalles del paquete para" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "requiere %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." -msgstr "Debes estar identificado para realizar solicitudes para el paquete." +msgstr "Debe estar identificado para realizar solicitudes para el paquete." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Nombre no válido: solamente se permiten letras minúsculas." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "El campo de comentarios no debe estar vacío." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Tipo de solicitud no válida." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Solicitud agregada con éxito." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Razón no válida." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." -msgstr "Solamente los usuarios de confianza y desarrolladores pueden cerrar una solicitud." +msgstr "" +"Solamente los usuarios de confianza y desarrolladores pueden cerrar una " +"solicitud." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Solicitud cerrada exitosamente" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Puedes usar este formulario para eliminar la cuenta de %s en AUR permanentemente." +msgstr "" +"Puede usar este formulario para eliminar la cuenta de %s en AUR " +"permanentemente." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sADVERTENCIA%s: Esta acción no puede deshacerse." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Confirmar borrado" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Nombre de usuario" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Tipo de cuenta" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Usuario" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Desarrollador" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Usuarios de confianza y desarrolladores" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Dirección de correo" -#: template/account_details.php -msgid "hidden" -msgstr "oculto" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Nombre real" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Página principal" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Alias de IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Huella digital PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Estado" -#: template/account_details.php msgid "Inactive since" msgstr "Inactivo desde" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Activo" -#: template/account_details.php -msgid "Registration date:" -msgstr "Fecha de registración:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "desconocido" - -#: template/account_details.php msgid "Last Login" msgstr "Última autentificación" -#: template/account_details.php msgid "Never" msgstr "Nunca" -#: template/account_details.php msgid "View this user's packages" msgstr "Ver los paquetes de este usuario" -#: template/account_details.php msgid "Edit this user's account" msgstr "Editar la cuenta de este usuario" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." -msgstr "Haz clic %saquí%s si deseas eliminar permanentemente esta cuenta." +msgstr "Haga clic %saquí%s si desea eliminar permanentemente esta cuenta." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Haz clic %saquí%s para ver los detalles del usuario." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "obligatorio" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Tu nombre de usuario es el nombre que usarás para iniciar sesión. Es visible para el público en general, incluso si tu cuenta no está activa." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Usuario normal" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Usuario de confianza" + msgid "Account Suspended" msgstr "Cuenta suspendida" -#: template/account_edit_form.php msgid "Inactive" msgstr "Inactivo" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Asegúrate de escribir tu dirección de correo correctamente o terminarás bloqueado." +msgid "Re-type password" +msgstr "Reescriba la contraseña" -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Ocultar dirreción de correo" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php msgid "Language" msgstr "Idioma" -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Huso horario" - -#: template/account_edit_form.php msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" +"La siguiente información solamente es necesaria si desea subir paquetes al " +"Repositorio de Usuarios de Arch." -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "Reescribe la contraseña" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "La siguiente información únicamente es necesaria si deseas subir paquetes al repositorio de usuarios de Arch." - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "Clave pública SSH" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Gestión de notificaciones" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Notificación de nuevos comentarios" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Notificar de actualizaciones de un paquete" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Notificar de cambios de propietario" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Actualizar" -#: template/account_edit_form.php msgid "Create" msgstr "Crear" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Limpiar" -#: template/account_search_results.php msgid "No results matched your search criteria." -msgstr "No se encontraron resultados que coincidan con tu criterio de búsqueda." +msgstr "" +"No se encontraron resultados que coincidan con su criterio de búsqueda." -#: template/account_search_results.php msgid "Edit Account" msgstr "Editar cuenta" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspendido" -#: template/account_search_results.php msgid "Edit" msgstr "Editar" -#: template/account_search_results.php msgid "Less" msgstr "Menos" -#: template/account_search_results.php msgid "More" msgstr "Más" -#: template/account_search_results.php msgid "No more results to display." msgstr "No hay más resultados que mostrar." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "Administrar coencargados: %s" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Utiliza este formulario para agregar coencargados para %s%s%s (un nombre de usuario por línea):" +msgstr "" +"Utilice este formulario para agregar coencargados para %s%s%s (un nombre de " +"usuario por línea):" -#: template/comaintainers_form.php msgid "Users" msgstr "Usuarios" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "Guardar" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Marcar comentario como obsoleto: %s" +msgid "My Packages" +msgstr "Mis paquetes" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s se ha marcado %s%s%s como obsoleto %s%s%s por la siguiente razón:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s no está marcado como obsoleto." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Regresar a detalles" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Derechos de autor %s 2004 - %d, equipo desarrollador de la web del AUR." - -#: template/header.php msgid " My Account" msgstr "Mi cuenta" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Registro" + +msgid "unknown" +msgstr "desconocido" + +msgid "Package Base Details" +msgstr "Detalles del paquete base" + msgid "Package Actions" msgstr "Acciones del paquete" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Ver PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "Ver cambios" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "Descargar instantánea" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Buscar en la wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Marcado como obsoleto (%s)" +msgid "Flagged out-of-date" +msgstr "Marcado como desactualizado" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" -msgstr "Marcar paquete como obsoleto" +msgstr "Marcar paquete como desactualizado" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Desmarcar paquete" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Eliminar voto" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Votar por este paquete" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Deshabilitar notificaciones" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Habilitar notificaciones" +msgid "Notify of new comments" +msgstr "Notificación de nuevos comentarios" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" msgstr "Administrar coencargados" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "Hay %d solicitud pendiente" msgstr[1] "Hay %d solicitudes pendientes" -msgstr[2] "Hay %d solicitudes pendientes" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Eliminar paquete" + +msgid "Merge Package" +msgstr "Unir paquete" + msgid "Adopt Package" msgstr "Adoptar paquete" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Detalles del paquete base" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "Dirección URL de clonado con Git" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "Solamente lectura" +msgid "Category" +msgstr "Categoría" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" +msgid "Change category" +msgstr "Cambiar categoría" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Palabras claves" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Primer encargado" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Ver información de la cuenta para %s" + msgid "Maintainer" msgstr "Encargado" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Último encargado" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Votos" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularidad" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Fecha de creación" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Última actualización" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Editar comentario para: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" -msgstr "Añadir un comentario" +msgstr "Agregar comentario" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" +msgid "Comment has been added." +msgstr "Se ha añadido el comentario." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" +msgid "View all comments" +msgstr "Ver todos los comentarios" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Comentarios fijados" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Últimos comentarios" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s comentó en %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Comentario anónimo en %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "borrado el %s por %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "borrado el %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "editado el %s por %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "editado el %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Comentario restablecido" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Eliminar comentario" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Comentario fijado" +#, php-format +msgid "Comment by %s" +msgstr "Comentario por %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Comentario desfijado" +msgid "Anonymous comment" +msgstr "Comentario anónimo" + +msgid "deleted" +msgstr "eliminado" + +msgid "All comments" +msgstr "Todos los comentarios" -#: template/pkg_details.php msgid "Package Details" msgstr "Detalles del paquete" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Paquete base" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Descripción" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Desarrollador principal" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Visita el sitio web de" -#: template/pkg_details.php msgid "Licenses" msgstr "Licencias" -#: template/pkg_details.php msgid "Groups" msgstr "Grupos" -#: template/pkg_details.php msgid "Conflicts" msgstr "Conflictos" -#: template/pkg_details.php msgid "Provides" msgstr "Proveen" -#: template/pkg_details.php msgid "Replaces" msgstr "Remplazan" -#: template/pkg_details.php msgid "Dependencies" msgstr "Dependencias" -#: template/pkg_details.php msgid "Required by" msgstr "Requerido por" -#: template/pkg_details.php msgid "Sources" msgstr "Fuentes" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Cerrar solicitud: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Usa este formulario para cerrar la solicitud para el paquete base %s%s%s." +msgstr "" +"Use este formulario para cerrar la solicitud para el paquete base %s%s%s." + +msgid "Note" +msgstr "Nota" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "El campo de comentarios se puede dejar vacío. Sin embargo, se recomienda encarecidamente añadir un comentario al rechazar una solicitud." +msgstr "" +"El campo de comentarios se puede dejar vacío. Sin embargo, se recomienda " +"encarecidamente añadir un comentario al rechazar una solicitud." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Razón" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Aceptado" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Rechazado" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Comentario" + +#, php-format +msgid "File Request: %s" +msgstr "Solicitud para el paquete: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Usa este formulario para presentar una solicitud para el paquete base %s%s%s el cual incluye los siguientes paquetes:" +msgstr "" +"Use este formulario para presentar una solicitud para el paquete base %s%s%s " +"el cual incluye los siguientes paquetes:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Tipo de solicitud" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Borrado" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Orfandad" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Unir en" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Ninguna solicitud coincide con tu criterio de búsqueda." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "Se encontró %d solicitud para el paquete." msgstr[1] "Se encontraron %d solicitudes para el paquete." -msgstr[2] "Se encontraron %d solicitudes para el paquete." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Página %d de %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Paquete" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Solicitado por" -#: template/pkgreq_results.php msgid "Date" msgstr "Fecha" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d día restante" -msgstr[1] "~%d días restantes" -msgstr[2] "~%d días restantes" +msgid "~%d days left" +msgstr "Aprox. %d días restantes" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "Aprox. %d hora restante" msgstr[1] "Aprox. %d horas restantes" -msgstr[2] "Aprox. %d horas restantes" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "< 1 hora restante" -#: template/pkgreq_results.php msgid "Accept" msgstr "Aceptar" -#: template/pkgreq_results.php msgid "Locked" msgstr "Bloqueada" -#: template/pkgreq_results.php msgid "Close" msgstr "Cerrar" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Pendiente" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Cerrada" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Nombre, descripción" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Solamente nombre" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Nombre exacto" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Paquete base exacto" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Coencargado" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Encargado y coencargado" - -#: template/pkg_search_form.php msgid "All" msgstr "Todos" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Marcados" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "No marcados" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Nombre" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Votado" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Última modificación" +msgid "Age" +msgstr "Antigüedad" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Ascendente" -#: template/pkg_search_form.php msgid "Descending" msgstr "Descendente" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Introduzca el criterio de búsqueda" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Cualquiera" + msgid "Search by" msgstr "Buscar por" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Palabras claves" + msgid "Out of Date" msgstr "Desactualizado" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Ordenar por" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Orden" -#: template/pkg_search_form.php msgid "Per page" msgstr "Por página" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Ir" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Huérfanos" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Error al recuperar la lista de paquetes." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." -msgstr "Ningún paquete coincide con tu criterio de búsqueda." +msgstr "Ningún paquete coincide con su criterio de búsqueda." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "%d paquete fue encontrado." msgstr[1] "%d paquetes fueron encontrados." -msgstr[2] "%d paquetes fueron encontrados." -#: template/pkg_search_results.php msgid "Version" msgstr "Versión" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "La popularidad se calcula como la suma de todos los votos y cada uno ponderado con un factor de %.2f por día desde la creación del paquete." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Sí" -#: template/pkg_search_results.php msgid "orphan" msgstr "huérfano" -#: template/pkg_search_results.php msgid "Actions" msgstr "Acciones" -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "Desmarcar como obsoleto" +msgid "Flag Out-of-date" +msgstr "Marcar como desactualizado" + +msgid "Unflag Out-of-date" +msgstr "Marcar como actualizado" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adoptar paquetes" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Abandonar paquetes" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Eliminar paquetes" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Confirmar" -#: template/search_accounts_form.php msgid "Any type" msgstr "Cualquier tipo" -#: template/search_accounts_form.php msgid "Search" msgstr "Buscar" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Estadísticas" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Paquetes huérfanos" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Paquetes añadidos en los últimos 7 días" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Paquetes actualizados en los últimos 7 días" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Paquetes actualizados el último año" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Paquetes que no han sido nunca actualizados" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Usuarios registrados" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Usuarios de confianza" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Actualizaciones recientes" -#: template/stats/updates_table.php -msgid "more" -msgstr "más" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Mis estadísticas" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Paquetes no soportados" + msgid "Proposal Details" msgstr "Detalles de la propuesta" -#: template/tu_details.php msgid "This vote is still running." msgstr "Aún se puede votar." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Subido: %s por %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Fin" -#: template/tu_details.php msgid "Result" msgstr "Resultado" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "No" -#: template/tu_details.php msgid "Abstain" msgstr "Abstenerse" -#: template/tu_details.php msgid "Total" msgstr "Total" -#: template/tu_details.php msgid "Participation" msgstr "Participación" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Último voto del usuario de confianza" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Último voto" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "No se han encontrado resultados." -#: template/tu_list.php msgid "Start" msgstr "Inicio" -#: template/tu_list.php msgid "Back" msgstr "Atrás" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "Reiniciarlizar contraseña del AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Bienvenido al repositorio de usuarios de Arch" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "Comentario en el AUR para {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] añadió un comentario al paquete base {pkgbase} [2]" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/es_419.po b/po/es_419.po index f1997606..555cd486 100644 --- a/po/es_419.po +++ b/po/es_419.po @@ -1,2390 +1,1371 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: # Angel Velasquez , 2011 # juantascon , 2011 # Lukas Fleischer , 2011 # neiko , 2011 # Nicolás de la Torre , 2012 -# Oliver Hattshire , 2021 -# Pablo Lezaeta Reyes , 2016-2017 -# Pablo Lezaeta Reyes , 2012,2015-2016 -# Pablo Lezaeta Reyes , 2016-2017 -# Pablo Lezaeta Reyes , 2016 -# Pablo Lezaeta Reyes , 2019,2022 +# Pablo Roberto Francisco Lezaeta Reyes , 2012,2015 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Pablo Lezaeta Reyes , 2019,2022\n" -"Language-Team: Spanish (Latin America) (http://app.transifex.com/lfleischer/aurweb/language/es_419/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Spanish (Latin America) (http://www.transifex.com/projects/p/" +"aur/language/es_419/)\n" +"Language: es_419\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es_419\n" -"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Página no encontrada" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Disculpe, la página que solicitó no existe." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Nota" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Las direcciones de clonado de Git no deberían ser abiertas en un navegador." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Para clonar el repositorio Git de %s, ejecute %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Haga clic %saquí%s para regresar a la página de detalles de %s." - -#: html/503.php msgid "Service Unavailable" -msgstr "Servicio no disponible" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "¡No se asuste! El sitio está desactivado por mantenimiento. Pronto volveremos." +msgstr "" -#: html/account.php msgid "Account" msgstr "Cuenta" -#: html/account.php template/header.php msgid "Accounts" msgstr "Cuentas" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "No está autorizado a acceder a esta área." -#: html/account.php msgid "Could not retrieve information for the specified user." -msgstr "No se pudo recuperar la información del usuario especificado." +msgstr "No se pudo obtener la información del usuario especificado." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "No tiene permisos para editar esta cuenta." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Contraseña no válida." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Use este formulario para buscar cuentas existentes." -#: html/account.php msgid "You must log in to view user information." msgstr "Debe autentificarse para ver la información del usuario." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Use este formulario para crear una cuenta." + msgid "Add Proposal" msgstr "Añadir propuesta" -#: html/addvote.php msgid "Invalid token for user action." -msgstr "Elemento no válido para la acción del usuario." +msgstr "Elemento inválido para la acción del usuario." -#: html/addvote.php msgid "Username does not exist." msgstr "El nombre de usuario no existe." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s ya tiene una propuesta activa." -#: html/addvote.php msgid "Invalid type." msgstr "Tipo no válido." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "La propuesta no puede estar vacía." -#: html/addvote.php msgid "New proposal submitted." msgstr "Nueva propuesta enviada." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Envíe una propuesta a la cual votar." -#: html/addvote.php msgid "Applicant/TU" -msgstr "Candidato/Usuario de confianza" +msgstr "Candidato/Usuario de confianza (TU)" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(vacío si no aplica)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Tipo" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Agregar a un nuevo usuario de confianza" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Remover a un usuario de confianza" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Remover a un usuario de confianza (no declarado inactivo)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Enmienda a las Bylaws (Reglas de los TU)" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Propuesta" -#: html/addvote.php msgid "Submit" msgstr "Subir" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "Administrar coencargados" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Editar comentario" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Tablero" - -#: html/home.php template/header.php msgid "Home" msgstr "Inicio" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Mis paquetes marcados" - -#: html/home.php -msgid "My Requests" -msgstr "Mis Solicitudes" - -#: html/home.php -msgid "My Packages" -msgstr "Mis paquetes" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Buscar paquetes que soy encargado" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Paquetes que soy coencargado" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Buscar paquetes que soy coencargado" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"¡Bienvenido al repositorio de usuarios de Arch! Lea la %sGuía del usuario " +"del AUR%s y la %sGuía del usuario de confianza del AUR%s para mayor " +"información." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Los PKGBUILD contribuidos %sdeben%s ser compatibles con el %sEstándar de empaquetado de Arch%s de otra forma serán borrados." +msgstr "" +"Los PKGBUILD contribuidos %sdeben%s ser compatibles con el %sEstándar de " +"empaquetado de Arch%s de otra forma serán borrados." -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "¡Recuerde votar sus paquetes favoritos!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Algunos paquetes pueden estar disponibles de forma binaria en [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"Algunos paquetes pueden estar disponibles de forma binaria en [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "ACLARATORIA" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Los paquetes en el AUR son producidos por los usuarios. Cualquier uso de ellos o sus archivos es a su propio riesgo." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Los paquetes no soportados son producidos por los usuarios. Cualquier uso de " +"ellos o sus archivos es a su propio riesgo." -#: html/home.php -msgid "Learn more..." -msgstr "Aprenda más..." - -#: html/home.php msgid "Support" -msgstr "Soporte" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Peticiones para los paquetes" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Existen tres tipos de peticiones que pueden presentarse en el recuadro %sAcciones del paquete%s en la página de detalles del paquete:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Solicitud de Abandono" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Pedir el abandono de un paquete, por ejemplo, cuando el encargado está inactivo y el paquete fue marcado como desactualizado por un largo tiempo." - -#: html/home.php -msgid "Deletion Request" -msgstr "Petición de Borrado" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Petición de Fusión" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Solicitar que se fusione un paquete en otro. Puede usarla cuando un paquete tiene que ser cambiado de nombre o sustituido por un paquete dividido." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Si quiere discutir una solicitud, puede usar la lista de correo %saur-requests%s. Sin embargo, por favor no utilice esa lista para presentar solicitudes." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Subir paquetes" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Ahora se usa Git sobre SSH para subir paquetes al AUR. Véase la sección %sSubir paquetes%s de la wiki del Repositorio de Usuarios de Arch para más información." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Las siguientes huellas SSH están en uso para el AUR." - -#: html/home.php msgid "Discussion" msgstr "Debate" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Informe de errores" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Buscar paquetes" -#: html/index.php msgid "Adopt" msgstr "Adoptar" -#: html/index.php msgid "Vote" msgstr "Votar" -#: html/index.php msgid "UnVote" msgstr "Retirar voto" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Notificar" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Quitar notificación" -#: html/index.php +msgid "Flag" +msgstr "Marcar" + msgid "UnFlag" msgstr "Desmarcar" -#: html/login.php template/header.php msgid "Login" msgstr "Autentificarse" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Autentificado como: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Salir" -#: html/login.php msgid "Enter login credentials" msgstr "Introduce las credenciales de autentificación" -#: html/login.php -msgid "User name or primary email address" -msgstr "Nombre de usuario o dirección de correo electrónico principal" +msgid "Username" +msgstr "Nombre de usuario" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Contraseña" -#: html/login.php msgid "Remember me" msgstr "Recordarme" -#: html/login.php msgid "Forgot Password" msgstr "Olvidó su cotraseña" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "La autentificación por HTTP está deshabilitada. %scambie a HTTPS%s si desea autentificarse" +msgstr "" +"La autentificación por HTTP está deshabilitada. %scambie a HTTPS%s si desea " +"autentificarse" -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Criterio de búsqueda" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Paquetes" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "No se pudieron recuperar los detalles del paquete." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Falta un campo obligatorio." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Los campos de la contraseña no coinciden." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Su contraseña debe tener como mínimo %s letras." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Dirección de correo no válida." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" +"Una solicitud de restablecimiento de contraseña se presentó para la cuenta " +"%s asociado a su dirección de correo. Si desea restablecer su contraseña " +"siga el enlace de abajo, si no ignore este mensaje y no pasará nada." + msgid "Password Reset" msgstr "Reiniciar la contraseña" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Compruebe su correo para ver el enlace de confirmación." -#: html/passreset.php msgid "Your password has been reset successfully." -msgstr "Su contraseña fue reiniciada con éxito." +msgstr "Su contraseña ha sido reiniciada con éxito." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Confirma tu nombre de usuario o dirección de correo electrónico principal:" +msgid "Confirm your e-mail address:" +msgstr "Confirme su dirección de correo:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Ingrese su nueva contraseña:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Confirme su nueva contraseña:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Continuar" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Si has olvidado el nombre de usuario y la dirección de correo electrónico principal usados al registrarte, por favor envía un mensaje a la lista de correo %saur-general%s." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Si olvidó la dirección de correo que usó para registrarse, envíe un mensaje " +"a la %slista de correo aur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Ingresa tu nombre de usuario o tu dirección de correo electrónico principal:" +msgid "Enter your e-mail address:" +msgstr "Introduzca su dirección de correo:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Paquetes base" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Los paquetes seleccionados no fueron abandonados, marque la casilla de confirmación." +msgstr "" +"Los paquetes seleccionados no fueron abandonados, marque la casilla de " +"confirmación." -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "Los paquetes seleccionados no han sido adoptados, marque la casilla de verificación." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "No se puede encontrar el paquete para fusionar sus votos y comentarios." +msgstr "" +"No se puede encontrar el paquete para fusionar sus votos y comentarios." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "No se puede fusionar un paquete base consigo mismo." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Los paquetes seleccionados no se borraron, compruebe la casilla de confirmación." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Los paquetes seleccionados no se borraron, compruebe la casilla de " +"confirmación." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Eliminación de paquetes" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Borrar paquete" +#, php-format +msgid "Delete Package: %s" +msgstr "Borrar paquete: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Use este formulario para borrar el paquete base %s%s%s y los siguientes paquetes en el AUR:" +msgstr "" +"Use este formulario para borrar el paquete base %s%s%s y los siguientes " +"paquetes en el AUR:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "El borrado de un paquete es permanente." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Selecciona la casilla para confirmar la acción." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Confirme el borrado del paquete" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Borrar" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." +msgid "Only Trusted Users and Developers can delete packages." msgstr "" +"Solamente Usuarios de Confianza y Desarrolladores pueden borrar paquetes." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Abandonar paquete" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "Abandonar paquete: %s" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Use este formulario para abandonar el paquete base %s %s %s que incluye los siguientes paquetes:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" +"Use este formulario para abandonar el paquete base %s %s %s que incluye los " +"siguientes paquetes:" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "Al seleccionar la casilla de verificación, confirmas que ya no quieres ser co-mantenedor del paquete." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Al seleccionar la casilla de verificación, confirma que desea abandonar el paquete y transferir su propiedad a %s %s %s." +msgstr "" +"Al seleccionar la casilla de verificación, confirma que desea abandonar el " +"paquete y transferir su propiedad a %s %s %s." -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Al seleccionar la casilla de verificación, confirma que desea abandonar el paquete." +msgstr "" +"Al seleccionar la casilla de verificación, confirma que desea abandonar el " +"paquete." -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "Confirme para abandonar el paquete" -#: html/pkgdisown.php msgid "Disown" msgstr "Abandonar" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" +"Solamente Usuarios de Confianza y Desarrolladores pueden forzar el abandono " +"de paquetes." -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Marcar comentario" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Marcado como desactualizado" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "Esto parece ser un paquete VCS. 1%sNo1%s lo marque como obsoleto si la versión del paquete en el AUR no coincide con la commit más reciente. Solo se debe marcar este paquete si las fuentes se movieron o si se requiere cambios en el PKGBUILD debido a cambios recientes en las fuentes." - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Use este formulario para marcar el paquete base %s%s%s y los siguientes paquetes en el AUR como desactualizados:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "%sNo%s use este formulario para reportar fallos. Use los comentarios del paquete en su lugar." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Introduzca los detalles del porqué el paquete fue marcado como desactualizado, peferentemente incluyendo un enlace al anuncio de la nueva versión o al empaquetado." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Comentarios" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Marcar" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Solo los usuario registrados pueden marcar como desactualizado." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Fusión de paquetes" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Fusionar paquete" +#, php-format +msgid "Merge Package: %s" +msgstr "Fusionar paquete: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Este formulario es para fusionar el paquete base %s%s%s en otro paquete." +msgstr "" +"Este formulario es para fusionar el paquete base %s%s%s en otro paquete." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Los siguientes paquetes serán borrados:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Una vez fusionado el paquete este no se puede separar." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Introduzca el nombre del paquete que desea fusionar." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Fusionar dentro:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Confirmar fusión de paquetes" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Fusión" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." msgstr "" +"Solamente Usuarios de Confianza y Desarrolladores pueden fusionar paquetes." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Enviar Solicitud" +msgid "File Request" +msgstr "Solicitud para el paquete" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "Cerrar Solicitud" +msgstr "Cerrar solicitud" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Primero" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Anterior" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Siguiente" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Último" -#: html/pkgreq.php template/header.php msgid "Requests" -msgstr "Solicitudes" +msgstr "Solicitud" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registro" +msgid "Trusted User" +msgstr "Usuario de Confianza" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Use este formulario para crear una cuenta." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Terminos y condiciones" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Los siguientes documentos han sido actualizados. Por favor revíselos cuidadosamente:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "Revisión %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Acepto las Terminos y condiciones anteriores." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "No se han podido recuperar los detalles de la propuesta." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Las votaciones para esta propuesta están cerradas." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Solamente Usuarios de Confianza pueden votar." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "No puede votar en una propuesta sobre usted." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Ya ha votado en esta propuesta." -#: html/tu.php msgid "Vote ID not valid." msgstr "El identificador del voto no es válido." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Votos actuales" -#: html/tu.php msgid "Past Votes" msgstr "Últimos votos" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Votantes" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "El registro de nuevas cuentas está desabilitado para su dirección IP, probablemente debido a numerosos ataque de correo basura. Perdone los inconvenientes" +msgstr "" +"El registro de nuevas cuentas está desabilitado para su dirección IP, " +"probablemente debido a numerosos ataque de correo basura. Perdone los " +"inconvenientes" -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Falta el identificador de usuario" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "El nombre de usuario no es válido." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Debe tener entre %s y %s letras" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Comenzar y acabar con una letra o número" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." -msgstr "Solo puede contener un punto, guion bajo o guion." +msgstr "Solamente puede contener un punto, guion bajo o guion." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Por favor confirma tu nueva contraseña." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "La dirección de correo no es válida." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "La dirección de correo electrónico de respaldo no es válida." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "La página de inicio no es válida. Especifique la URL en HTTP(S) completa." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "La huella digital PGP no es válida." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "La clave pública SSH no es válida." -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "No se puede incrementar los permisos de la cuenta." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "El idioma no está soportado actualmente." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "La zona horaria no se admite actualmente." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "El nombre de usuario, %s%s%s, ya está en uso." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "La dirección, %s%s%s, ya está en uso." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "La clave pública SSH %s%s%s ya está en uso." -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "Falta el CAPTCHA." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "El CAPTCHA expiró. Por favor intenta de nuevo." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "El CAPTCHA ingresado no es válido." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Error tratando de crear la cuenta, %s%s%s" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "La cuenta, %s%s%s, fue creada satisfactoriamente." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Una llave para reiniciar su contraseña fue enviada a su correo." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Haz clic en el enlace de autentificación para usar su cuenta." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"¡Bienvenido/a a %s! En orden para crear su contraseña para su nueva cuenta, " +"haga clic en el enlace inferior. Si no funciona, copie y pegue el enlace en " +"la barra de direcciones de su navegador web." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "Una llave para reiniciar su contraseña a sido enviada a su correo." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "No se realizaron cambios a la cuenta, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "La cuenta, %s%s%s, fue modificada satisfactoriamente" -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "El formulario de registro ha sido deshabilitado para su dirección IP, probablemente debido a numerosos ataque de correo basura. Perdone los inconvenientes" +msgstr "" +"El formulario de registro ha sido deshabilitado para su dirección IP, " +"probablemente debido a numerosos ataque de correo basura. Perdone los " +"inconvenientes" -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Cuenta suspendida" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "No tiene los permiso para suspender cuentas." - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Su contraseña fue reiniciada, si creó una nueva cuenta, use el enlace inferior para confirmar el correo y así crear su contraseña inicial. En caso contrario, pida un reinicio de contraseña en la página para %sreiniciar las contraseñas%s." +msgstr "" +"Su contraseña ha sido reiniciada, si creó una nueva cuenta, use el enlace " +"inferior para confirmar el correo y así crear su contraseña inicial. En caso " +"contrario, pida un reinicio de contraseña en la página para %sreiniciar las " +"contraseñas%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Contraseña o nombre de usuario erróneos." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." -msgstr "Un error ocurrió intentando generar la sesión de usuario." +msgstr "Un error ocurrió intentando generar la sesión." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Combinación de dirección de correo y clave no válida." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Nada" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Ver información de la cuenta para %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Falta el identificador o nombre del paquete base." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "No tiene permitido editar este comentario." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "El comentario no existe." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "El comentario no puede estar vacío." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "El comentario fue añadido." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Debe autentificarse antes de editar la información del paquete." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Falta el identificador del comentario." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "No pueden ser anclar más de 5 comentarios." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "No tiene permitido anclar este comentario." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "No tiene permitido desanclar este comentario." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "El comentario fue anclado." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "El comentario fue desanclado." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Error al recuperar los detalles del paquete." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Los detalles del paquete no se pudieron encontrar." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "Encabezado de referencia no correcto." - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "No seleccionó ningún paquete para recibir notificaciones." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "Se han habilitado las notificaciones de los paquetes seleccionados." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "No seleccionó ningún paquete para la eliminación de notificaciones" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "Un paquete que seleccionó no tiene notificaciones habilitadas." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "Se han eliminado las notificaciones de los paquetes seleccionados." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Debe autentificarse antes de poder marcar paquetes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "No seleccionó ningún paquete para marcar." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Los paquetes seleccionados no han sido marcados como desactualizados, escriba un comentario." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Los paquetes seleccionados han sido marcados como desactualizados." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Debe autentificarse antes de poder desmarcar paquetes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "No seleccionó ningún paquete para desmarcar." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Los paquetes seleccionados han sido desmarcados." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "No posee los permisos para borrar paquetes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "No seleccionó ningún paquete para borrar." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "Uno de los paquetes que seleccionó no existe." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Los paquetes seleccionados se han borrado." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Debe autentificarse antes de poder adoptar paquetes." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "No puede adoptar uno de los paquetes que seleccionó." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Debe autentificarse antes de poder abandonar paquetes." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "No puede abandonar uno de los paquetes que seleccionó." - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "No seleccionó ningún paquete para adoptar." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "No seleccionó ningún paquete para ser abandonado." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Los paquetes seleccionados han sido adoptados." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Los paquetes seleccionados han sido abandonados." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Debe autentificarse antes de poder votar paquetes." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Debe autentificarse antes de poder quitar votos a los paquetes" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "No seleccionó ningún paquete para votarlo." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Sus votos han sido eliminados de los paquetes seleccionados." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Sus votos se añadieron a los paquetes seleccionados." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "No se pudo añadir a la lista de notificaciones." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Ha sido añadido a la lista de notificaciones de comentarios de %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Ha sido eliminado de la lista de notificaciones de comentarios de %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "No está autorizado a restablecer este comentario." +msgid "You must be logged in before you can edit package information." +msgstr "Debe autentificarse antes de editar la información del paquete." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "El comentario fue restablecido." +msgid "Missing comment ID." +msgstr "Falta el identificador del comentario." + +msgid "Comment has been deleted." +msgstr "Comentario borrado." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to delete this comment." msgstr "No está autorizado a borrar este comentario." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "El comentario fue borrado." +msgid "Missing category ID." +msgstr "Falta el Identificador de categoría." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "El comentario fue editado." +msgid "Invalid category ID." +msgstr "El identificador de categoría no es válido." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "No está autorizado para editar las palabras clave de este paquete base." +msgid "You are not allowed to change this package category." +msgstr "No puede cambiar la categoría de este paquete." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Las palabras clave del paquete base actualizaron ." +msgid "Package category changed." +msgstr "Categoría del paquete cambiada." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "No tiene permitido administrar los coencargados de este paquete base." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "Nombre de usuario no válido: %s" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "Los coencargados del paquete base fueron actualizados." -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Ver detalles del paquete para" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "requiere %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." -msgstr "Debe estar identificado para realizar peticiones para el paquete." +msgstr "Debe estar identificado para realizar solicitudes para el paquete." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." -msgstr "Nombre no válido: solo se permiten letras minúsculas." +msgstr "Nombre no válido: solamente son permitidas las letras minúsculas." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "El campo de comentarios no debe estar vacío." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." -msgstr "Tipo de petición no válida." +msgstr "Tipo de solicitud no válida." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." -msgstr "Petición agregada con éxito." +msgstr "Solicitud agregada con éxito." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Razón no válida." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." -msgstr "Solo Usuarios de Confianza y Desarrolladores pueden cerrar una petición." +msgstr "" +"Solamente los Usuarios de Confianza y Desarrolladores pueden cerrar una " +"solicitud." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." -msgstr "Petición cerrada exitosamente" +msgstr "Solicitud cerrada exitosamente" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Puede usar este formulario para borrar la cuenta de %s en AUR permanentemente." +msgstr "" +"Puede usar este formulario para borrar la cuenta de %s en AUR " +"permanentemente." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sADVERTENCIA%s: Esta acción no puede deshacerse." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Confirmar borrado" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Nombre de usuario" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Tipo de cuenta" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Usuario" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Desarrollador" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Usuarios de Confianza y desarrolladores" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Dirección de correo" -#: template/account_details.php -msgid "hidden" -msgstr "oculto" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Nombre real" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Página principal" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Alias de IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Huella digital PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Estado" -#: template/account_details.php msgid "Inactive since" msgstr "Inactivo desde" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Activo" -#: template/account_details.php -msgid "Registration date:" -msgstr "Fecha de registración:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "desconocido" - -#: template/account_details.php msgid "Last Login" msgstr "Última autentificación" -#: template/account_details.php msgid "Never" msgstr "Nunca" -#: template/account_details.php msgid "View this user's packages" msgstr "Ver los paquetes de este usuario" -#: template/account_details.php msgid "Edit this user's account" msgstr "Editar la cuenta de este usuario" -#: template/account_details.php -msgid "List this user's comments" -msgstr "Mostrar los comentarios de este usuario" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Haga clic %saquí%s si desea borrar permanentemente esa cuenta." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Haga clic %saquí%s para ver los detalles del usuario." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Haz clic %saquí%s para mostrar los comentarios hechos por esta cuenta." - -#: template/account_edit_form.php msgid "required" msgstr "obligatorio" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Su nombre de usuario es el nombre que usará para iniciar sesión. Es visible al público en general, incluso si su cuenta está inactiva." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Usuario normal" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Usuario de Confianza" + msgid "Account Suspended" msgstr "Cuenta suspendida" -#: template/account_edit_form.php msgid "Inactive" msgstr "Inactivo" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Asegúrese de escribir su correo correctamente o de lo contrario quedará bloqueado." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Ocultar dirreción de correo" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "Si no esconde su dirección de correo electrónico, esta será visible para todo usuario registrado en el AUR. Si esconde su dirección de correo electrónico, esta será visible sólo por el equipo de Arch Linux." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Dirección de correo electrónico de respaldo" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "Opcionalmente proporciona una dirección de correo electrónico secundaria para poder restaurar tu cuenta en caso de que pierdas acceso tu dirección principal." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "Los enlaces de restauración de contraseña siempre se envían a tus direcciones de correo electrónico primaria y de respaldo." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "Tu dirección de correo de respaldo siempre es sólo visible por el equipo de Arch Linux, sin importar lo seleccionado en la configuración %s." - -#: template/account_edit_form.php -msgid "Language" -msgstr "Idioma" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Zona horaria" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Si quieres cambiar la contraseña, ingresa una nueva y confírmala en el cuadro correspondiente." - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Reescriba la contraseña" -#: template/account_edit_form.php +msgid "Language" +msgstr "Idioma" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "La siguiente información es necesaria únicamente si quiere subir paquetes al Repositorio de Usuarios de Arch." - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" +"La siguiente información es necesaria solamente si quiere subir paquetes al " +"Repositorio de Usuarios de Arch." -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "Clave pública SSH" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Configuración de notificaciones" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Notificación de nuevos comentarios" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Notificar sobre actualizaciones de un paquete" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Notificarme de cambios de propietario" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "Para confirmar los cambios a tu perfil, por favor ingresa tu contraseña:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "Tu contraseña actual" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "Para proteger el AUR contra creaciones de cuentas automatizados, te pedimos amablemente que ingreses la salida del siguiente comando:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Respuesta" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Actualizar" -#: template/account_edit_form.php msgid "Create" msgstr "Crear" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Limpiar" -#: template/account_search_results.php msgid "No results matched your search criteria." -msgstr "No se encontraron resultados que coincidan con su criterio de búsqueda." +msgstr "" +"No se encontraron resultados que coincidan con su criterio de búsqueda." -#: template/account_search_results.php msgid "Edit Account" msgstr "Editar cuenta" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspendido" -#: template/account_search_results.php msgid "Edit" msgstr "Editar" -#: template/account_search_results.php msgid "Less" msgstr "Menos" -#: template/account_search_results.php msgid "More" msgstr "Más" -#: template/account_search_results.php msgid "No more results to display." msgstr "No hay más resultados que mostrar." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "Administrar coencargados: %s" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Use este formulario para agregar coencargados para %s%s%s (un nombre de usuario por línea):" +msgstr "" +"Use este formulario para agregar coencargados para %s%s%s (un nombre de " +"usuario por línea):" -#: template/comaintainers_form.php msgid "Users" msgstr "Usuarios" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "Guardar" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Marcar comentario como desactualizado: %s" +msgid "My Packages" +msgstr "Mis paquetes" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s fue marcado %s%s%s como desactualizado %s%s%s por la siguiente razón:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s no está marcado como desactualizado." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Regresar a detalles" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Derechos de autor %s 2004 - %d, equipo de desarrollo de la web del AUR." - -#: template/header.php msgid " My Account" msgstr "Mi cuenta" -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "Acciones del paquete" +msgid "Register" +msgstr "Registro" -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "Ver PKGBUILD" +msgid "unknown" +msgstr "desconocido" -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "Ver cambios" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "Descargar instantánea" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "Buscar en la wiki" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Marcado como desactualizado (%s)" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "Marcar paquete como desactualizado" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "Desmarcar paquete" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "Eliminar voto" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "Votar por este paquete" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "Deshabilitar notificaciones" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Habilitar notificaciones" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "Administrar coencargados" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "Hay %d petición pendiente" -msgstr[1] "Hay %d peticiones pendientes" -msgstr[2] "Hay %d peticiones pendientes" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "Adoptar paquete" - -#: template/pkgbase_details.php msgid "Package Base Details" msgstr "Detalles del paquete base" -#: template/pkgbase_details.php template/pkg_details.php +msgid "Package Actions" +msgstr "Acciones del paquete" + +msgid "View PKGBUILD" +msgstr "Ver PKGBUILD" + +msgid "View Changes" +msgstr "Ver cambios" + +msgid "Download snapshot" +msgstr "Descargar instantánea" + +msgid "Search wiki" +msgstr "Buscar en la wiki" + +msgid "Flagged out-of-date" +msgstr "Marcado como desactualizado" + +msgid "Flag package out-of-date" +msgstr "Marcar paquete como desactualizado" + +msgid "Unflag package" +msgstr "Desmarcar paquete" + +msgid "Remove vote" +msgstr "Eliminar voto" + +msgid "Vote for this package" +msgstr "Votar por este paquete" + +msgid "Disable notifications" +msgstr "Deshabilitar notificaciones" + +msgid "Notify of new comments" +msgstr "Notificación de nuevos comentarios" + +msgid "Manage Co-Maintainers" +msgstr "Administrar coencargados" + +#, php-format +msgid "%d pending request" +msgid_plural "%d pending requests" +msgstr[0] "Hay %d solicitud pendiente" +msgstr[1] "Hay %d solicitudes pendientes" + +msgid "Delete Package" +msgstr "Borrar paquete" + +msgid "Merge Package" +msgstr "Fusionar paquete" + +msgid "Adopt Package" +msgstr "Adoptar paquete" + msgid "Git Clone URL" msgstr "URL de clonado con Git" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "Solo lectura" +msgid "Category" +msgstr "Categoría" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "haz clic para copiar" +msgid "Change category" +msgstr "Cambiar categoría" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Palabras claves" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Primer encargado" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Ver información de la cuenta para %s" + msgid "Maintainer" msgstr "Encargado" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Último encargado" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Votos" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularidad" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Fecha de creación" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Última actualización" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Editar commentario para: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" -msgstr "Agregar un comentario" +msgstr "Agregar comentario" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "Los identificadores de commits de Git que referencian URLs y commits del repositorio de paquetes del AUR son convertidos a enlaces automáticamente." +msgid "Comment has been added." +msgstr "Se ha añadido el comentario." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "La %ssintaxis Markdown%s está parcialmente soportada." +msgid "View all comments" +msgstr "Ver todos los comentarios" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Comentarios anclados" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Últimos comentarios" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Comentarios para" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s comentó en %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Comentario anónimo en %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "Comentó en el paquete %s el %s." - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "borrado el %s por %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "borrado el %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "editado el %s por %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "editado el %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Comentario restablecido" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Borrar comentario" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Comentario anclado" +#, php-format +msgid "Comment by %s" +msgstr "Comentario por %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Comentario desanclado" +msgid "Anonymous comment" +msgstr "Comentario anónimo" + +msgid "deleted" +msgstr "borrado" + +msgid "All comments" +msgstr "Todos los comentarios" -#: template/pkg_details.php msgid "Package Details" msgstr "Detalles del paquete" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Paquete base" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Descripción" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Desarrollador principal" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Visita el sitio web de" -#: template/pkg_details.php msgid "Licenses" msgstr "Licencias" -#: template/pkg_details.php msgid "Groups" msgstr "Grupos" -#: template/pkg_details.php msgid "Conflicts" msgstr "Conflictos" -#: template/pkg_details.php msgid "Provides" msgstr "Proveen" -#: template/pkg_details.php msgid "Replaces" msgstr "Remplazan" -#: template/pkg_details.php msgid "Dependencies" msgstr "Dependencias" -#: template/pkg_details.php msgid "Required by" msgstr "Requerido por" -#: template/pkg_details.php msgid "Sources" msgstr "Fuentes" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Cerrar solicitud: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Use este formulario para cerrar la petición para el paquete base %s%s%s." +msgstr "" +"Use este formulario para cerrar la solicitud para el paquete base %s%s%s." + +msgid "Note" +msgstr "Nota" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "El campo de comentarios se puede dejar vacío. Sin embargo, se recomienda encarecidamente añadir un comentario al rechazar una petición." +msgstr "" +"El campo de comentarios se puede dejar vacío. Sin embargo, se recomienda " +"encarecidamente añadir un comentario al rechazar una solicitud." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Razón" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Aceptado" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Rechazado" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Comentario" + +#, php-format +msgid "File Request: %s" +msgstr "Solicitud para el paquete: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Use este formulario para presentar una petición para el paquete base %s%s%s el cual incluye los siguientes paquetes:" +msgstr "" +"Use este formulario para presentar una solicitud para el paquete base %s%s%s " +"el cual incluye los siguientes paquetes:" -#: template/pkgreq_form.php msgid "Request type" -msgstr "Tipo de petición" +msgstr "Tipo de solicitud" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Borrado" -#: template/pkgreq_form.php msgid "Orphan" -msgstr "Abandono" +msgstr "Orfandad" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Fusionar en" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Ninguna solicitud coincide con su criterio de búsqueda." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "Se encontró %d solicitud para el paquete." msgstr[1] "Se encontraron %d solicitudes para el paquete." -msgstr[2] "Se encontraron %d solicitudes para el paquete." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Página %d de %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Paquete" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Solicitado por" -#: template/pkgreq_results.php msgid "Date" msgstr "Fecha" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d día restante" -msgstr[1] "~%d días restantes" -msgstr[2] "~%d días restantes" +msgid "~%d days left" +msgstr "Aprox. %d días restantes" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "Aprox. %d hora restante" msgstr[1] "Aprox. %d horas restantes" -msgstr[2] "Aprox. %d horas restantes" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "< 1 hora restante" -#: template/pkgreq_results.php msgid "Accept" msgstr "Aceptar" -#: template/pkgreq_results.php msgid "Locked" msgstr "Bloqueada" -#: template/pkgreq_results.php msgid "Close" msgstr "Cerrar" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Pendiente" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Cerrada" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Nombre, descripción" -#: template/pkg_search_form.php msgid "Name Only" -msgstr "Solo nombre" +msgstr "Solamente nombre" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Nombre exacto" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Paquete base exacto" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Coencargado" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Encargado y coencargado" - -#: template/pkg_search_form.php msgid "All" msgstr "Todos" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Marcados" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "No marcados" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Nombre" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Votado" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Última modificación" +msgid "Age" +msgstr "Antigüedad" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Ascendente" -#: template/pkg_search_form.php msgid "Descending" msgstr "Descendente" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Introduzca el criterio de búsqueda" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Cualquiera" + msgid "Search by" msgstr "Buscar por" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Palabras claves" + msgid "Out of Date" msgstr "Desactualizado" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Ordenar por" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Orden" -#: template/pkg_search_form.php msgid "Per page" msgstr "Por página" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Ir" -#: template/pkg_search_form.php msgid "Orphans" -msgstr "Abandonados" +msgstr "Huérfanos" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Error al recuperar la lista de paquetes." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Ningún paquete coincide con su criterio de búsqueda." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "%d paquete fue encontrado." msgstr[1] "%d paquetes fueron encontrados." -msgstr[2] "%d paquetes fueron encontrados." -#: template/pkg_search_results.php msgid "Version" msgstr "Versión" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "La Popularidad es calculada como la suma de todos los votos ponderados con un factor de %.2f por día desde la creación del paquete." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Sí" -#: template/pkg_search_results.php msgid "orphan" -msgstr "abandonado" +msgstr "huérfano" -#: template/pkg_search_results.php msgid "Actions" msgstr "Acciones" -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "Desmarcar como actualizado" +msgid "Flag Out-of-date" +msgstr "Marcar como desactualizado" + +msgid "Unflag Out-of-date" +msgstr "Marcar como actualizado" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adoptar paquetes" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Abandonar paquetes" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Borrar paquetes" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Confirmar" -#: template/search_accounts_form.php msgid "Any type" msgstr "Cualquier tipo" -#: template/search_accounts_form.php msgid "Search" msgstr "Buscar" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Estadísticas" -#: template/stats/general_stats_table.php msgid "Orphan Packages" -msgstr "Paquetes Abandonados" +msgstr "Paquetes huérfanos" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Paquetes nuevos en los últimos 7 días" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Paquetes actualizados en los últimos 7 días" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Paquetes actualizados el último año" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Paquetes que nunca se han actualizado" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Usuarios registrados" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Usuarios de Confianza" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Actualizaciones recientes" -#: template/stats/updates_table.php -msgid "more" -msgstr "más" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Mis estadísticas" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Paquetes en AUR" + msgid "Proposal Details" msgstr "Detalles de la propuesta" -#: template/tu_details.php msgid "This vote is still running." msgstr "Aún se puede votar." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Subido: %s por %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Fin" -#: template/tu_details.php msgid "Result" msgstr "Resultado" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "No" -#: template/tu_details.php msgid "Abstain" msgstr "Abstenerse" -#: template/tu_details.php msgid "Total" msgstr "Total" -#: template/tu_details.php msgid "Participation" msgstr "Participación" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" -msgstr "Últimos votos del Usuario de Confianza" +msgstr "Último voto del usuario de confianza" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Último voto" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "No se han encontrado resultados." -#: template/tu_list.php msgid "Start" msgstr "Inicio" -#: template/tu_list.php msgid "Back" msgstr "Atrás" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "Reiniciar contraseña del AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "Una solicitud de reinicio de contraseña fue hecha para la cuenta {user} asociada con tu dirección de correo electrónico. Si deseas reiniciar tu contraseña, sigue el enlace [1] debajo, de lo contrario ignora este mensaje y nada pasará." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Bienvenido al repositorio de usuarios de Arch" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "¡Le damos la bienvenida al Repositorio Usuarios de Arch! Para poder configurar su contraseña inicial, por favor haga clic en el enlace [1] de abajo. Si el enlace no funciona, pruebe copiando y pegándolo en su navegador." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "Comentario en el AUR para el paquete base {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "el usuario {user} [1] agregó el siguiente comentario al paquete base {pkgbase} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Si ya no deseas recibir notificaciones sobre este paquete, por favor vé a la página del paquete [2] y selecciona \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "Actualización de paquete en el AUR: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] añadió un nuevo commit a {pkgbase} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "Notificación en el AUR de paquete obsoleto para {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Tu paquete {pkgbase} [1] ha sido marcado como desactualizado por {user} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "Notificación en el AUR de propiedad para {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "El paquete {pkgbase} [1] fué adoptado por {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "El paquete {pkgbase} [1] fué abandonado por {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "Notificación en el AUR de Coencargado para {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "Te han añadido a la lista de coencargados de {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "Te han eliminado de la lista de coencargados de {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "Paquete en el AUR elimnado: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] fusionó {old} [2] en {new} [3].\n\n-- \nSi ya no deseas recibir notificaciones sobre el nuevo paquete, por favor dirigete a [3] y haz clic en \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] eliminó {pkgbase} [2].\n\nYo no recibirás actualizaciones de este paquete." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Por favor recuerda efectuar tu voto en la propuesta {id} [1]. El lapso para votar termina en menos de 48 horas." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "Se proporcionó un tipo de cuenta no válido." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "No tiene permisos para cambiar los tipos de cuenta." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "No tiene permisos para cambiar el tipo de cuenta de este usuario a 1%s." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "No existen solicitudes huérfanas pendientes para aceptar de 1%s." - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "Error interno del servidor" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "Ha ocurrido un error fatal." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "Los detalles han sido registrados y serán revisados ​​por el administrador de correos inmediatamente. Pedimos disculpas por cualquier inconveniente que esto pueda haber causado." - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "Error del servidor del AUR" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "Comentarios de cierre de solicitud de paquete relacionados..." - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "Esta acción cerrará cualquier solicitud de paquete pendiente relacionada con este. Si se omiten 1%sComentarios1%s, se generará automáticamente un comentario de cierre." - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/et.po b/po/et.po deleted file mode 100644 index e25c7eb2..00000000 --- a/po/et.po +++ /dev/null @@ -1,2374 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Estonian (http://app.transifex.com/lfleischer/aurweb/language/et/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: et\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/fi.po b/po/fi.po index eb97a47d..fcd87c6c 100644 --- a/po/fi.po +++ b/po/fi.po @@ -1,2378 +1,1322 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Elias Autio, 2016 -# Jesse Jaara , 2011-2012,2015 -# Nikolay Korotkiy , 2018-2019 -# Sami Korkalainen, 2018 +# Jesse Jaara , 2011-2012 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Nikolay Korotkiy , 2018-2019\n" -"Language-Team: Finnish (http://app.transifex.com/lfleischer/aurweb/language/fi/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Finnish (http://www.transifex.com/projects/p/aur/language/" +"fi/)\n" +"Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" -msgstr "Sivua ei löydy." +msgstr "" -#: html/404.php msgid "Sorry, the page you've requested does not exist." -msgstr "Valitettavasti hakemaasi sivua ei ole olemassa." +msgstr "" -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Huomautus" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Git-kloonausosoitteita ei ole tarkoitettu avattavaksi selaimella." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Kloonataksesi Git-varaston %s, suorita %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Klikkaa %stästä%s palataksesi %s tietosivulle." - -#: html/503.php msgid "Service Unavailable" -msgstr "Palvelu ei saatavilla." +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Älä panikoi! Sivu on poissa käytöstä huollon vuoksi. Palaamme pian." +msgstr "" -#: html/account.php msgid "Account" -msgstr "Käyttäjätili" +msgstr "" -#: html/account.php template/header.php msgid "Accounts" msgstr "Käyttäjätilit" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Sinulla ei ole oikeuksia tämän osion käyttämiseen." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Valitun käyttäjän tietoja ei voitu noutaa." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Sinulla ei ole oikeuksia tämän käyttäjätlin muokkaamiseen." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Etsi käyttäjätilejä." -#: html/account.php msgid "You must log in to view user information." msgstr "Sinun pitää kirjautua sisään tarkastellaksesi käyttäjien tietoja." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Käytä tätä lomaketta uuden käyttäjätilin luomiseen." + msgid "Add Proposal" msgstr "Lisää ehdotus" -#: html/addvote.php msgid "Invalid token for user action." msgstr "" -#: html/addvote.php msgid "Username does not exist." msgstr "Käyttäjänimeä ei ole olemassa." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "" -#: html/addvote.php msgid "Invalid type." -msgstr "Virheellinen tyyppi." +msgstr "" -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Ehdotus ei voi olla tyhjä." -#: html/addvote.php msgid "New proposal submitted." msgstr "Uusi ehdotus lisätty." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Lisää ehdotus äänestettäväksi." -#: html/addvote.php msgid "Applicant/TU" msgstr "Ehdokas/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(tyhjä jos ei tiettyä henkilöä)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Tyyppi" -#: html/addvote.php -msgid "Addition of a Package Maintainer" +msgid "Addition of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer" +msgid "Removal of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" +msgid "Removal of a TU (undeclared inactivity)" msgstr "" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Ehdotus" -#: html/addvote.php msgid "Submit" msgstr "Lisää" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Muokkaa kommenttia" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Kojelauta" - -#: html/home.php template/header.php msgid "Home" msgstr "Etusivu" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Pakettini, jotka on merkitty" - -#: html/home.php -msgid "My Requests" -msgstr "Pyyntöni" - -#: html/home.php -msgid "My Packages" -msgstr "Omat paketit" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Hae ylläpitämiäni paketteja" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Tervetuloa AURiin! Luethan %sAURin käyttäjä ohjeen%s sekä %sTU-käyttäjän " +"oppaan%s, kun tarvitset lisätietoa." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Lisättyjen PKGBUILD-tiedostojen %stulee%s olla %sArchin pakettistandardien%s mukaisia, muuten ne poistetaan!" +msgstr "" +"Lisättyjen PKGBUILD tiedostojen %stulee%s olla %sArchin pakettistandardien%s " +"mukaisia, muuten ne saatetaan poistaa!" -#: html/home.php msgid "Remember to vote for your favourite packages!" -msgstr "Muista äänestää suosikkipakettejasi!" +msgstr "Muista äänestää suosikki pakettejasi!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Jotkin paketit saattavat olla tarjolla valmiina paketteina [extra]-varastossa." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"Jotkin paketit saattavat olla tarjolla valmiina paketteina [community] " +"varastossa. :)" -#: html/home.php msgid "DISCLAIMER" msgstr "Vastuuvapauslauseke" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "AUR-paketit ovat käyttäjien luomia eivätkä ole virallisesti tuettuja. Näiden käyttäminen on omalla vastuullasi." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Nämä paketit eivät ole virallisesti tuettuja. Tämän sivun paketit ovat " +"käyttäjien tuotosta. Näiden käyttäminen on omalla vastuullaasi" -#: html/home.php -msgid "Learn more..." -msgstr "Selvitä lisää..." - -#: html/home.php msgid "Support" -msgstr "Tuki" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Pakettienhallintapyydöt" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Pakettien sivuilta löytyvän %spakettitoiminnot%s -laatikon kautta voi lähettää TU-käyttäjille kolme erilaista pakettienhallintapyyntöä." +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Hylkäämispyyntö" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Hallintapyyntö paketin poistamiseksi sen nykyiseltä ylläpitäjältä, esimerksi jos ylläpitäjä ei vastaa kommentteihin eikä sähköpostiin ja paketti on merkitty vanhentuneeksi jo kauan sitten." - -#: html/home.php -msgid "Deletion Request" -msgstr "Poistopyyntö" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Yhdistämispyyntö" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Hallintapyyntö kahden eri paketin yhdistämiseksi. Voidaan käyttää muun muassa silloin kun jokin paketti on nimettyuudelleen tai korvattu monipaketilla (split package)." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Pakettienhallintapyynnöistä voi keskustella niin yleisellä- kuin myös tiettyyn pyyntöön littyvällä tasolla %saur-requests%s -postituslistalla. Älä kuitenkaan lähetä hallintapyyntöjä postituslistalle." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Paketien lisääminen ja päivittäminen" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Pakettien lisääminen ja päivittäminen uudessa AUR versiossa tapahtuu SSH-yhteyden yli Git-versionhallinan avulla. Tarkemman ohjeet löytyvät Arch Linuxin wiki-oppaan AUR-sivulta kohdasta %sPakettien lisääminen%s." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "AUR käyttää seuraavia SSH-tunnisteita:" - -#: html/home.php msgid "Discussion" msgstr "Keskustelu" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Virheiden raportointi" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" -msgstr "Pakettihaku" +msgstr "" -#: html/index.php msgid "Adopt" -msgstr "Ota haltuun" +msgstr "" -#: html/index.php msgid "Vote" msgstr "Äänestä" -#: html/index.php msgid "UnVote" msgstr "Peru ääni" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Lähetä ilmoituksia" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "En halua ilmoituksia" -#: html/index.php -msgid "UnFlag" -msgstr "Poista merkintä" +msgid "Flag" +msgstr "" + +msgid "UnFlag" +msgstr "" -#: html/login.php template/header.php msgid "Login" msgstr "Kirjaudu" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Nykyinen käyttäjä: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Kirjaudu ulos" -#: html/login.php msgid "Enter login credentials" msgstr "Kirjautumistiedot" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "Käyttäjänimi" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Salasana" -#: html/login.php msgid "Remember me" msgstr "Muista minut" -#: html/login.php msgid "Forgot Password" msgstr "Unohditko salasanasi?" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "HTTP:n kautta kirjoutuminen ei ole käytössä. Ole hyvä ja %svaihda HTTPS yhteyteen%s kirjautuaksesi." +msgstr "" +"HTTP:n kautta kirjoutuminen ei ole käytössä. Ole hyvä ja %svaihda HTTPS " +"yhteyteen%s kirjautuaksesi." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Haku kriteerit" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Paketit" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Valitun paketin tietoja ei löytynyt." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Jokin vaadituista kentistä on puutteellinen." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Salasanakentät eivät täsmää." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Salasanan pitää olla vähintään %s merkkiä pitkä." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Epäkelvollinen sähköpostiosoite." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Salasanan palautus" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." -msgstr "Sähköpostiisi on nyt lähetetty varmistuslinkki." +msgstr "Sähköpostiisi on nyt lähetetty varmistus linkki." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Salasanasi on palautettu onnistuneesti." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" +msgid "Confirm your e-mail address:" +msgstr "Vahvista sähköpostiositteesi:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Uuusi salasana:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Vahvista uusi salasana:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Jatka" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "Sähköpostiosoitteesi:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Pakettikannat" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Seuraavia paketteja ei ole hylätty. Tarkista varmistusruutu." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "Pakettia, johon haluat siirtää äänet ja kommentit, ei löydy." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." -msgstr "Pakettikantaa ei voi yhdistää itseensä." +msgstr "" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Valittuja paketteja ei ole poistettu. Muistitko laittaa raksin varmistusruutuun?" +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Valittuja paketteja ei ole poistettu. Muistitko laittaa raksin varmistus " +"ruutuun?" -#: html/pkgdel.php msgid "Package Deletion" -msgstr "Paketin poisto" +msgstr "" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Poista paketti" +#, php-format +msgid "Delete Package: %s" +msgstr "Poista paketti: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Käytä tätä lomaketta poistaaksesi pakettikannan %s%s%s ja seuraavat paketit AUR:sta:" +msgstr "" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Pakettin poistaminen on lopullista, sitä ei voi peruuttaa." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." -msgstr "Vahvista toiminto valitsemalla valintaruutu." +msgstr "" -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Vahvista paketin poisto" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Poista" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." +msgid "Only Trusted Users and Developers can delete packages." +msgstr "" +"Vain Trusted- statuksen omaavat käyttäjät, sekä kehittäjät voivat poistaa " +"paketteja." + +msgid "Disown Package" msgstr "" -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "Hylkää paketti" +#, php-format +msgid "Disown Package: %s" +msgstr "" -#: html/pkgdisown.php #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Käytä tätä lomaketta hylätäksesi pakettikannan %s%s%s joka sisältää seuraavat paketit:" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Valitsemalla valintaruudun, vahvista että haluat hylätä paketin ja siirtää hallinnan käyttäjälle %s%s%s." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Valitsemalla valintaruudun, vahvistat että haluat hylätä paketin." +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "Vahvista paketin hylkäys" +msgstr "" -#: html/pkgdisown.php msgid "Disown" -msgstr "Hylkää" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Merkitse paketti vanhentuneeksi" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Käytä tätä lomaketta merkitäksesi pakettikannan %s%s%s ja seuraavat paketit vanhentuneiksi:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "%sÄlä%s käytä tätä lomaketta ilmoittaaksesi ohjelmointivirheistä. Käytä kommentteja siihen." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Anna lisätietoja miksi paketti on vanhentunut, mieluiten sisältäen linkin ilmoitukseen tai uuteen tiedostoon." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Kommentit" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Merkitse" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Vain rekisteröityneet käyttäjät voivat merkitä paketteja vanhentuneiksi." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Pakettien yhdistäminen" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Yhdistä toiseen pakettiin" +#, php-format +msgid "Merge Package: %s" +msgstr "Yhdistä paketit: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Käytä tätä lomaketta yhdistääksesi pakettikannan %s%s%s toiseen pakettiin." +msgstr "" -#: html/pkgmerge.php msgid "The following packages will be deleted: " -msgstr "Seuraavat paketit poistetaan:" +msgstr "" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " -msgstr "Paketin yhdistämistä ei voi peruuttaa." +msgstr "" -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "Valitse kohdepaketti." +msgstr "" -#: html/pkgmerge.php msgid "Merge into:" msgstr "Yhdistä tähän pakettiin:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Vahvista pakettien yhdistäminen" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Liitä" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." +msgstr "" +"Vain Trusted-statuksen omaavat käyttäjät, sekä kehittäjät voivat yhdistää " +"paketteja." + +msgid "File Request" msgstr "" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Lähetä pyyntö" - -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "Sulje pyyntö" +msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Ensimmäinen" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Edellinen" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Seuraava" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Viimeinen" -#: html/pkgreq.php template/header.php msgid "Requests" -msgstr "Pyynnöt" - -#: html/register.php template/header.php -msgid "Register" -msgstr "Rekisteröidy" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "Käytä tätä lomaketta uuden käyttäjätilin luomiseen." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Palveluehdot" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Seuraavat dokumentit on päivitetty. Kertaa ne huolellisesti:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "versio %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Hyväksyn ylläolevat ehdot." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" msgstr "" -#: html/tu.php +msgid "Trusted User" +msgstr "Luotettu käyttäjä (TU)" + msgid "Could not retrieve proposal details." msgstr "Ehdotuksen tietoja ei voitu noutaa." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Tämän ehdoksen äänestys on päättynyt." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." +msgid "Only Trusted Users are allowed to vote." msgstr "" -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Et voi äänestää itseäsi koskevassa äänestyksessä." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Olet jo antanut äänesi tälle ehdotukselle." -#: html/tu.php msgid "Vote ID not valid." -msgstr "Äänestys ID ei ole kelvollinen." +msgstr "" -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Avoimet äänestykset." -#: html/tu.php msgid "Past Votes" msgstr "Sulkeutuneet äänestykset." -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Äänestäjät" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Tunnuksien rekisteröinti on estetty IP-osoitteestasi, luultavasti toistuvien roskapostihyökkäysten takia. Pahoittelemme aiheutunutta haittaa." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Käyttäjän tunnus puuttuu" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Käyttäjänimi ei ole kelvollinen." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Sen pitää olla %s-%s kirjaintapitkä" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Alkaa ja loppua kirjaimeen tai numeroon" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Voi sisältää vain yhden väliviivan, alaviivan tai pisteen." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "Sähköpostiosoite ei ole kelvollinen." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." +msgid "The PGP key fingerprint is invalid." msgstr "" -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "Kotisivun osoite on virheellinen, määrittele koko http(s) URL." - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "PGP-avaimen sormenjälki ei ole kelvollinen." - -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "Julkinen SSH-avain ei ole kelvollinen." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." -msgstr "Käyttäjätunnuksen oikeuksia ei voitu korottaa." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Kieli ei ole vielä tuettuna." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Aikavyöhykettä ei tällä hetkellä tueta." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." -msgstr "Käyttäjänimi %s%s%s on jo käytössä." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." -msgstr "Osoite %s%s%s on jo käytössä." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "Julkinen SSH-avain %s%s%s on jo käytössä." - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." msgstr "" -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." -msgstr "Virhe luotaessa tiliä %s%s%s." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." -msgstr "Käyttäjätili %s%s%s on nyt luotu." +msgstr "" -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Salasanan palautuspyyntö on lähetetty sähköpostiosoitteeseesi." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." -msgstr "Klikkaa Kirjaudu-linkkiä kirjautuaksesi." +msgstr "" + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." -msgstr "Käyttäjätunnukseen %s%s%s ei tehty muutoksia." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." -msgstr "Käyttäjätilin %s%s%s tiedot on nyt tallennettu." +msgstr "" -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Kirjautumislomake on estetty IP-osoitteestasi, luultavasti toistuvien roskapostihyökkäysten takia. Pahoittelemme aiheutunutta haittaa." - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "Tili jäädytetty" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." msgstr "" -#: lib/acctfuncs.inc.php +msgid "Account suspended" +msgstr "" + #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Salasanasi on palautettu. Jos loit juuri uuden tilin, käytä sähköpostitse saamaasi varmistuslinkkiä asettaaksesi ensimmäisen salasanasi. Muussa tapauksessa pyydä salasanan palauttamista %sSalasanan palautus%s -sivulla." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Virheellinen käyttäjänimi tai salasana." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." -msgstr "Virhe tapahtui käyttäjäistuntoa luodessa." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Epäkelvollinen sähköposti ja palautusavain yhdistelmä." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Näytä käyttäjän %s tiedot" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Sinulla ei ole oikeuksia tämän kommentin muokkaamiseen." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Kommenttia ei ole olemassa." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Kommentti ei voi olla tyhjä." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Kommentti lisätty." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Sinun pitää kirjautua, ennen kuin voit muokata paketin tietoja." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Kommentin tunnus puuttuu." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Yli 5 kommenttia ei voi kiinnittää." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Sinulla ei ole oikeuksia tämän kommentin kiinnittämiseen." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Sinulla ei ole oikeuksia tämän kommentin kiinnityksen poistamiseen." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Kommentti on kiinnitetty." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Kommentin kiinnitys on poistettu." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Virhe haettaessa paketin tietoja." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Paketin tietoja ei löydetty." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Sinun pitää kirjautua, ennen kuin voit muuttaa merkintöjä." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Et valinnut yhtään pakettia." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Seuraavia paketteja ei merkitty. Syötä kommentti." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Valitut paketit on merkitty vanhentuneiksi." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Sinun pitää kirjautua, ennen kuin voit muuttaa merkintöjä." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Et valinnut yhtään pakettia." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Valittuilta paketeilta on poistettu merkintä." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." -msgstr "Sinulla ei ole oikeutta poistaa paketteja." +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Et valinnut yhtään pakettia poistettavaksi." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Valitut paketit on nyt poistettu." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Sinun pitää kirjautua, ennen kuin voit adoptoida paketteja." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Sinun pitää kirjautua, ennen kuin voit hylätä paketteja." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Et valinnut yhtään pakettia adoptoitavaksi." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Et valinnut yhtään pakettia hylättäväksi." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Valitut paketit on nyt adoptoitu." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Valitut paketiti on nyt hylätty." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Sinun pitää kirjautua, ennen kuin voit äänestää paketteja." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Sinun pitää kirjautua, ennen kuin voit perua äänesi." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Et valinnut yhtään pakettia äänestettäväksi." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Valittuille paketeille antamasi äänet on nyt peruttu." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Äänesi on nyt annettu valituille paketeille." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Ei kyetty lisäämään ilmoituslistaan." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Saat nyt ilmoituksen paketin %s uusista kommenteista." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Et saa enää ilmoituksia paketin %s uusista kommenteista." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Sinun ei sallita palauttaa tätä kommenttia." +msgid "You must be logged in before you can edit package information." +msgstr "Sinun pitää kirjautua, ennen kuin voit muokata paketin tietoja." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Kommentti on palautettu." +msgid "Missing comment ID." +msgstr "Kommentin tunnus puuttuu." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Sinulla ei ole oikeuksia tämän kommentin poistamiseen." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Kommentti on poistettu." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Kommenttia on muokattu." +msgid "You are not allowed to delete this comment." +msgstr "Sinulla ei ole oikeuksia tämän kommentin poistamiseen." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Sinun ei sallita muokata tämän pakettikannan avainsanoja." +msgid "Missing category ID." +msgstr "Kategorian ID puuttuu." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Tämän pakettikannan avainsanat päivitettiin." +msgid "Invalid category ID." +msgstr "Kategorian ID ei ole kelvollinen." + +msgid "You are not allowed to change this package category." +msgstr "Sinulla ei ole oikeuksia tämän paketin kategorian muuttamiseen." + +msgid "Package category changed." +msgstr "Paketin kategoria vaihdettu." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Virheellinen käyttäjänimi: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" +msgid "You must be logged in to file package requests." msgstr "" -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "Sinun täytyy kirjautua sisään lähettääksesi pyyntöjä paketista." - -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Virheellinen nimi: vain pienet kirjaimet ovat sallittuja." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." -msgstr "Kommenttikenttä ei saa olla tyhjä." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." -msgstr "Virheellinen pyyntötyyppi." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." -msgstr "Pyyntö lisättiin onnistuneesti." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." -msgstr "Virheellinen syy." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." -msgstr "Vain Luotetut käyttäjät (TU) ja kehittäjät voivat sulkea pyyntöjä." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "" -#: template/account_delete.php msgid "Confirm deletion" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Käyttäjänimi" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "TIlin tyyppi" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Käyttäjä" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Kehittäjä" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" +msgid "Trusted User & Developer" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Sähköpostiosoite" -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Oikea nimi" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Kotisivu" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC nikki" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Tila" -#: template/account_details.php msgid "Inactive since" msgstr "" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Aktiivinen" -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "tuntematon" - -#: template/account_details.php msgid "Last Login" msgstr "" -#: template/account_details.php msgid "Never" msgstr "Ei koskaan" -#: template/account_details.php msgid "View this user's packages" msgstr "Näytä käyttäjän paketit" -#: template/account_details.php msgid "Edit this user's account" msgstr "" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." -msgstr "Klikkaa %stästä%s, jos haluat peruuttamattomasti poistaa tämän tilin." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Klikkaa %stästä%s saadaksesi käyttäjän tiedot." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." msgstr "" -#: template/account_edit_form.php msgid "required" msgstr "vaaditaan" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Tavallinen käyttäjä" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Luotettu käyttäjä (TU)" + msgid "Account Suspended" msgstr "Käyttäjätili hyllytetty" -#: template/account_edit_form.php msgid "Inactive" msgstr "" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Kieli" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Aikavyöhyke" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Salasana uudelleen:" -#: template/account_edit_form.php +msgid "Language" +msgstr "Kieli" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "Julkinen SSH avain" - -#: template/account_edit_form.php -msgid "Notification settings" msgstr "" -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Lähetä ilmoitus uusista kommnteista" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Päivitä" -#: template/account_edit_form.php msgid "Create" msgstr "Luo" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Tyhjennä" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Hakuasi vastaavia paketteja ei löydy." -#: template/account_search_results.php msgid "Edit Account" msgstr "Muokkaa käyttäjätiliä" -#: template/account_search_results.php msgid "Suspended" msgstr "Hyllytä" -#: template/account_search_results.php msgid "Edit" msgstr "Muokkaa" -#: template/account_search_results.php msgid "Less" msgstr "Vähemmän" -#: template/account_search_results.php msgid "More" msgstr "Enemmän" -#: template/account_search_results.php msgid "No more results to display." msgstr "Ei enempää tuloksia" -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "Käyttäjät" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "Tallenna" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Vanhentuneeksi merkitsemisen kommentti: %s" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s merkitsi %s%s%s vanhentuneeksi %s %s%s seuraavasta syystä:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s ei ole merkitty vanhentuneeksi." - -#: template/flag_comment.php -msgid "Return to Details" msgstr "" -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Tekijänoikeudet %s 2004-%d aurweb kehittäjätiimi." +msgid "Save" +msgstr "" + +msgid "My Packages" +msgstr "Omat paketit" -#: template/header.php msgid " My Account" msgstr "Omat tiedot" -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "Pakettitoiminnot" +msgid "Register" +msgstr "Rekisteröidy" -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "Näytä PKGBUILD" +msgid "unknown" +msgstr "tuntematon" -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "Näytä muutoshistoria" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "Lataa tuorein versio" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "Etsi wikistä" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Merkitty vanhentuneeksi (%s)" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "Merkitse paketti vanhentuneeksi" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "Poista merkintä" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "Poista ääneni" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "Äänestä pakettia" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "En halua enää ilmoituksia" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "Hallitse ylläpitäjäkumppaneita" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "%d käsittelemätön hallintapyyntö" -msgstr[1] "%d käsittelemätöntä hallintapyyntöä" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "Ryhdy ylläpitäjäksi" - -#: template/pkgbase_details.php msgid "Package Base Details" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "Git-kloonausosoite" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "vain luku" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" +msgid "Package Actions" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Avainsanat" +msgid "View PKGBUILD" +msgstr "Näytö PKGBUILD" + +msgid "View Changes" +msgstr "" + +msgid "Download snapshot" +msgstr "" + +msgid "Search wiki" +msgstr "" + +msgid "Flagged out-of-date" +msgstr "Merkitty vanhentuneeksi" + +msgid "Flag package out-of-date" +msgstr "Merkitse paketti vanhentuneeksi" + +msgid "Unflag package" +msgstr "" + +msgid "Remove vote" +msgstr "" + +msgid "Vote for this package" +msgstr "Äännestä tätä pakettia" + +msgid "Disable notifications" +msgstr "" + +msgid "Notify of new comments" +msgstr "Lähetä ilmoitus uusista kommnteista" + +msgid "Manage Co-Maintainers" +msgstr "" + +#, php-format +msgid "%d pending request" +msgid_plural "%d pending requests" +msgstr[0] "" +msgstr[1] "" + +msgid "Delete Package" +msgstr "Poista paketti" + +msgid "Merge Package" +msgstr "" + +msgid "Adopt Package" +msgstr "" + +msgid "Git Clone URL" +msgstr "" + +msgid "Category" +msgstr "Kategoria" + +msgid "Change category" +msgstr "Vaihda kategoriaa" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Lisääjä" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "" + msgid "Maintainer" msgstr "Ylläpitäjä" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" -msgstr "Viimeisin paketoija" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Äänet" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Suosio" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Lisättiin" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Päivitettiin" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Lisää kommentti" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." +msgid "Comment has been added." +msgstr "Kommentti lisätty." + +msgid "View all comments" msgstr "" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Uusimmat kommentit" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Poista kommentti" -#: template/pkg_comments.php -msgid "Pin comment" +#, php-format +msgid "Comment by %s" +msgstr "Kommentin kirjoitti %s" + +msgid "Anonymous comment" msgstr "" -#: template/pkg_comments.php -msgid "Unpin comment" +msgid "deleted" msgstr "" -#: template/pkg_details.php +msgid "All comments" +msgstr "Kaikki kommentit" + msgid "Package Details" msgstr "Paketin tiedot" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" -msgstr "Ylipaketti" +msgstr "" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Kuvaus" -#: template/pkg_details.php msgid "Upstream URL" -msgstr "Kotisivu" +msgstr "" -#: template/pkg_details.php msgid "Visit the website for" -msgstr "Vieraile tämän paketin verkkosivulla: " +msgstr "" -#: template/pkg_details.php msgid "Licenses" -msgstr "Lisenssit" +msgstr "" -#: template/pkg_details.php msgid "Groups" -msgstr "Ryhmät" +msgstr "" -#: template/pkg_details.php msgid "Conflicts" -msgstr "Ristiriidat" +msgstr "" -#: template/pkg_details.php msgid "Provides" -msgstr "Tarjoaa paketit" +msgstr "" -#: template/pkg_details.php msgid "Replaces" -msgstr "Korvaa paketit" +msgstr "" -#: template/pkg_details.php msgid "Dependencies" msgstr "Riippuvuudet" -#: template/pkg_details.php msgid "Required by" msgstr "Riippuvuutena paketeille" -#: template/pkg_details.php msgid "Sources" msgstr "Lähdetiedostot" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "" + #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "" -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." msgstr "" -#: template/pkgreq_close_form.php msgid "Reason" -msgstr "Syy" +msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "" + +#, php-format +msgid "File Request: %s" +msgstr "" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" msgstr "" -#: template/pkgreq_form.php msgid "Request type" -msgstr "Pyynnön tyyppi" +msgstr "" -#: template/pkgreq_form.php msgid "Deletion" msgstr "" -#: template/pkgreq_form.php msgid "Orphan" msgstr "" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Yhdistä pakettiin" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "" msgstr[1] "" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "" -#: template/pkgreq_results.php msgid "Package" -msgstr "Paketti" +msgstr "" -#: template/pkgreq_results.php msgid "Filed by" msgstr "" -#: template/pkgreq_results.php msgid "Date" -msgstr "Päivämäärä" +msgstr "" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" +msgid "~%d days left" +msgstr "" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "" msgstr[1] "" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "" -#: template/pkgreq_results.php msgid "Accept" msgstr "" -#: template/pkgreq_results.php msgid "Locked" msgstr "" -#: template/pkgreq_results.php msgid "Close" -msgstr "Sulje" - -#: template/pkgreq_results.php -msgid "Pending" msgstr "" -#: template/pkgreq_results.php msgid "Closed" -msgstr "Suljettu" +msgstr "" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Nimi, kuvaus" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Pelkkä nimi" -#: template/pkg_search_form.php msgid "Exact Name" -msgstr "Nimi täsmälleen" +msgstr "" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Ylläpitäjäkumppani" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Ylläpitäjä, ylläpitäjäkumppani" - -#: template/pkg_search_form.php msgid "All" msgstr "Kaikki" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Merkitty" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Ei merkitty" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Nimi" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Äänestin" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" +msgid "Age" +msgstr "Ikä" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Nouseva" -#: template/pkg_search_form.php msgid "Descending" msgstr "Laskeva" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Mikä tahansa" + msgid "Search by" msgstr "Etsintäperuste" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Avainsanat" + msgid "Out of Date" msgstr "Vanhentunut" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Järjestelyperuste" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Järjestelyperuste" -#: template/pkg_search_form.php msgid "Per page" msgstr "Sivua kohden" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Etsi" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Orvot" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Virhe pakettilistaa noudettaessa." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Hakuasi vastaavia paketteja ei löydy." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "" msgstr[1] "" -#: template/pkg_search_results.php msgid "Version" msgstr "Versio" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Suosio lasketaan ottamalla äänien summa ja painottamalla jokaista ääntä kertoimella %.2f joka päivä sen luomisesta lähtien." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Kyllä" -#: template/pkg_search_results.php msgid "orphan" msgstr "orpo" -#: template/pkg_search_results.php msgid "Actions" msgstr "Toiminnot" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Merkitse vanhentuneeksi" + msgid "Unflag Out-of-date" msgstr "Ei vanhentunut" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adoptoi paketit" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Hylkää paketit" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Poista paketit" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Vahvista" -#: template/search_accounts_form.php msgid "Any type" msgstr "Mikä tahansa" -#: template/search_accounts_form.php msgid "Search" msgstr "Etsi" -#: template/stats/general_stats_table.php msgid "Statistics" -msgstr "Tilastoja" +msgstr "Statistiikkat" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Hylättyjä paketteja" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Uudet paketit 7 päivän sisällä" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Paketteja päivitetty 7 päivän sisällä" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Vuoden aikana päivitettyjä paketteja" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Paketteja ei ole koskaan päivitetty" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Rekisteröityjä käyttäjiä" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Luotettuja käyttäjiä" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Viimeisimmät päivitykset" -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php msgid "My Statistics" -msgstr "Tilastoni" +msgstr "Statistiikkani" + +msgid "Packages in unsupported" +msgstr "Pakettieni määrä" -#: template/tu_details.php msgid "Proposal Details" msgstr "Ehdotuksen tiedot" -#: template/tu_details.php msgid "This vote is still running." msgstr "Tätä ehdotusta voi vielä äänestää." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Lisätty: %s Lisääjä: %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Loppu" -#: template/tu_details.php msgid "Result" -msgstr "Tulos" +msgstr "" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Ei" -#: template/tu_details.php msgid "Abstain" msgstr "" -#: template/tu_details.php msgid "Total" msgstr "Yhteensä" -#: template/tu_details.php msgid "Participation" msgstr "" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Ei tuloksia." -#: template/tu_list.php msgid "Start" msgstr "Alku" -#: template/tu_list.php msgid "Back" msgstr "Takaisin" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Tervetuloa AURiin" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Tervetuloa AUR:iin! Asettaaksesi ensimmäisen salasanan uudelle tilillesi, klikkaa alla olevaa linkkiä [1]. Jos linkki ei toimi, kokeile kopioida ja liittää se selaimeesi." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "AUR: Ilmoitus paketin {pkgbase} vanhentumisesta" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Pakettisi {pkgbase} [1] on merkitty vanhentuneeksi. Merkinnän teki käyttäjä {user} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/fi_FI.po b/po/fi_FI.po deleted file mode 100644 index e0193ec9..00000000 --- a/po/fi_FI.po +++ /dev/null @@ -1,2374 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Finnish (Finland) (http://app.transifex.com/lfleischer/aurweb/language/fi_FI/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fi_FI\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/fr.po b/po/fr.po index b7942b3a..972d9543 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,2391 +1,1369 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Alexandre Macabies , 2018 # Antoine Lubineau , 2012 -# Antoine Lubineau , 2012-2016,2023 -# Cedric Girard , 2011,2014,2016 -# demostanis , 2020 -# Kristien , 2020 +# Antoine Lubineau , 2013-2014 +# Cedric Girard , 2011,2014 # lordheavy , 2011 -# lordheavy , 2013-2014,2018,2022 +# lordheavy , 2013-2014 # lordheavy , 2011-2012 # Lukas Fleischer , 2011 -# Thibault , 2020 -# df3de0cb43d289cd23a753345b3743cd_a20684f, 2015,2017,2019 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Antoine Lubineau , 2012-2016,2023\n" -"Language-Team: French (http://app.transifex.com/lfleischer/aurweb/language/fr/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: French (http://www.transifex.com/projects/p/aur/language/" +"fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Page non trouvée" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Désolé, la page que vous avez demandée n’existe pas." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Note" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Les URL de clone Git ne sont pas censées être ouvertes depuis un navigateur." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Pour cloner le dépôt Git de %s, exécutez %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Cliquez %sici%s pour retourner à la page des détails de %s." - -#: html/503.php msgid "Service Unavailable" -msgstr "Service indisponible" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Ne paniquez pas ! Le site est fermé pour maintenance. Nous serons bientôt de retour." +msgstr "" -#: html/account.php msgid "Account" msgstr "Compte" -#: html/account.php template/header.php msgid "Accounts" msgstr "Comptes" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Vous n’avez pas la permission d’accéder à cet espace." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Impossible de trouver l’information pour l’utilisateur spécifié." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Vous n’avez pas la permission d’éditer ce compte." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Mot de passe invalide." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Utilisez ce formulaire pour rechercher des comptes existants." -#: html/account.php msgid "You must log in to view user information." -msgstr "Vous devez vous authentifier pour voir les informations de l’utilisateur." +msgstr "" +"Vous devez vous authentifier pour voir les informations de l’utilisateur." + +msgid "Use this form to create an account." +msgstr "Utilisez ce formulaire pour créer un compte." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "Ajoutez une proposition" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Action invalide." -#: html/addvote.php msgid "Username does not exist." msgstr "Le nom d'utilisateur n’existe pas." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s a déjà une proposition en cours à son sujet." -#: html/addvote.php msgid "Invalid type." msgstr "Type invalide." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Une proposition ne peut être vide." -#: html/addvote.php msgid "New proposal submitted." msgstr "Nouvelle proposition enregistrée." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Soumettre une proposition à laquelle voter." -#: html/addvote.php msgid "Applicant/TU" msgstr "Requérant/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(vide si non applicable)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Type" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Ajout d’un utilisateur de confiance." -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Suppression d’un utilisateur de confiance" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Suppression d’un utilisateur de confiance (inactivité non prévenue)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Amendement du règlement" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Proposition" -#: html/addvote.php msgid "Submit" msgstr "Soumettre" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Gérer les co-mainteneurs" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Éditer le commentaire" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Tableau de bord" - -#: html/home.php template/header.php msgid "Home" msgstr "Accueil" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Mes paquets périmés" - -#: html/home.php -msgid "My Requests" -msgstr "Mes requêtes" - -#: html/home.php -msgid "My Packages" -msgstr "Mes paquets" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Rechercher les paquets que je maintiens" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Paquets co-maintenus" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Rechercher les paquets que je co-maintiens" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Bienvenue sur AUR ! Veuillez lire les %sconsignes pour les utilisateurs d’AUR" +"%s et les %sconsignes pour les utilisateurs de confiance%s pour plus " +"d’information." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Les PKGBUILD proposés %sdoivent%s respecter les %sstandards d’empaquetage d’Arch%s, sinon ils seront supprimés !" +msgstr "" +"Les PKGBUILD proposés %sdoivent%s respecter les %sstandards d’empaquetage " +"d’Arch%s, sinon ils seront supprimés !" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Pensez à voter pour vos paquets favoris !" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Certains paquets peuvent être disponibles sous forme binaire dans le dépôt [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"Certains paquets peuvent être disponibles sous forme binaire dans le dépôt " +"[community]." -#: html/home.php msgid "DISCLAIMER" msgstr "AVERTISSEMENT" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Les paquets AUR sont produits par des utilisateurs. Toute utilisation des fichiers fournis se fait à vos propres risques." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Les paquets non supportés sont produits par des utilisateurs. Toute " +"utilisation des fichiers fournis se fait à vos propres risques." -#: html/home.php -msgid "Learn more..." -msgstr "En apprendre plus..." - -#: html/home.php msgid "Support" -msgstr "Soutien" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Requêtes de paquet" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Il existe trois types de requêtes qui peuvent être soumises dans la boîte %sActions du paquet%s sur la page des détails d'un paquet :" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Requête de destitution" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Demande qu'un paquet soit destitué, c'est-à-dire quand le mainteneur est inactif et que le paquet a été marqué comme périmé depuis un long moment." - -#: html/home.php -msgid "Deletion Request" -msgstr "Requête de suppression" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Requête de fusion" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Demande que le paquet soit fusionné dans un autre. Peut être utilisé quand un paquet a besoin d'être renommé ou bien remplacé par un paquet splitté." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Si vous voulez débattre d'une requête, vous pouvez utiliser la mailing-list %saur-requests%s. Cependant, merci de ne pas utiliser cette liste pour soumettre des requêtes." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Soumission de paquets" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Git par-dessus SSH est maintenant utilisé pour soumettre des paquets sur AUR. Voir la section %sSoumettre des paquets%s sur la page Arch User Repository du wiki pour plus de détails." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Les empreintes SSH suivantes sont utilisées pour AUR :" - -#: html/home.php msgid "Discussion" msgstr "Discussion" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Rapports de bug" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Recherche d'un paquet" -#: html/index.php msgid "Adopt" msgstr "Adopter" -#: html/index.php msgid "Vote" msgstr "Voter" -#: html/index.php msgid "UnVote" msgstr "Retirer le vote" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Notifier" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Ne plus notifier" -#: html/index.php +msgid "Flag" +msgstr "Marquer comme périmé" + msgid "UnFlag" msgstr "Ne plus marquer comme périmé" -#: html/login.php template/header.php msgid "Login" msgstr "Se connecter" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Connecté en tant que : %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Déconnexion" -#: html/login.php msgid "Enter login credentials" msgstr "Entrez vos identifiants" -#: html/login.php -msgid "User name or primary email address" -msgstr "Nom de l'utilisateur ou adresse email principale" +msgid "Username" +msgstr "Nom d'utilisateur" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Mot de passe" -#: html/login.php msgid "Remember me" msgstr "Se souvenir de moi" -#: html/login.php msgid "Forgot Password" msgstr "Mot de passe oublié" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "La connexion HTTP est désactivée. Veuillez %sbasculer en HTTPS%s pour pouvoir vous connecter." +msgstr "" +"La connexion HTTP est désactivée. Veuillez %sbasculer en HTTPS%s pour " +"pouvoir vous connecter." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Critères de recherche" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Paquets" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Erreur en essayant de retrouver les détails du paquets." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Il manque un champ requis." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Les champs du mot de passe ne correspondent pas." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Votre mot de passe doit comprendre au moins %s caractères." -#: html/passreset.php msgid "Invalid e-mail." msgstr "E-mail invalide" -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Réinitialisation de mot de passe" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Vérifiez votre e-mail pour le lien de confirmation." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Votre mot de passe a été réinitialisé avec succès." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Veuillez confirmer votre nom d'utilisateur ou votre adresse email principale:" +msgid "Confirm your e-mail address:" +msgstr "Confirmez votre adresse e-mail :" -#: html/passreset.php msgid "Enter your new password:" msgstr "Entrez votre nouveau mot de passe :" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Confirmez votre nouveau mot de passe :" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Continuer" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Si vous avez oublié votre nom d'utilisateur et votre adresse email principale, veuillez s'il vous plaît envoyer un message à %saur-general%s" +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Si vous avez oublié avec quelle adresse e-mail vous vous êtes inscrit, " +"veuillez envoyer un message sur la mailing-list %saur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Entrez votre nom d'utilisateur ou votre email principal:" +msgid "Enter your e-mail address:" +msgstr "Entrez votre adresse e-mail :" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Bases du paquet" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Les paquets sélectionnés n'ont pas été destitués, vérifiez la boîte de confirmation." +msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "Les paquets sélectionnés n’ont pas été adoptés, vérifiez la case de confirmation." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Impossible de trouver le paquet dans lequel fusionner les votes et les commentaires." +msgstr "" +"Impossible de trouver le paquet dans lequel fusionner les votes et les " +"commentaires." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Impossible de fusionner un paquet de base avec lui-même" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Les paquets sélectionnés n'ont pas été supprimés, cochez la case de confirmation." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Les paquets sélectionnés n'ont pas été supprimés, cochez la case de " +"confirmation." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Suppression de paquet" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Supprimer le paquet" +#, php-format +msgid "Delete Package: %s" +msgstr "Supprimer le paquet : %s." -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Utilisez ce formulaire pour supprimer le paquet de base %s%s%s et les paquets suivants de AUR :" +msgstr "" +"Utilisez ce formulaire pour supprimer le paquet de base %s%s%s et les " +"paquets suivants de AUR :" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "La suppression d’un paquet est permanente." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Cochez la case pour confirmer l’action." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Confirmer la suppression du paquet" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Supprimer" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." +msgid "Only Trusted Users and Developers can delete packages." msgstr "" +"Seuls les Utilisateur de Confiance et les Développeurs peuvent effacer des " +"paquets." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Destituer le paquet" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Utilisez ce formulaire pour destituer le paquet de base %s%s%s qui inclut les paquets suivants : " +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "En cochant la case, vous confirmez que vous ne voulez plus être le co-mainteneur du paquet." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "En cochant la case, vous confirmez que vous voulez destituer le paquet et transférer sa propriété à %s%s%s." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "En cochant la case, vous confirmez que vous voulez destituer le paquet." +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "Confirmer la destitution du paquet" +msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "Destituer" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Signaler le commentaire" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Marquer le paquet comme périmé" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Utilisez ce formulaire pour marquer le paquet de base %s%s%s et les paquets suivants périmés :" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Merci de %sne pas%s utiliser ce formulaire pour rapporter des bugs. Utilisez les commentaires du paquet à la place." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Entrez les détails de pourquoi le paquet est périmé, de préférence en incluant un lien vers l'annonce de la version ou bien vers l'archive de la nouvelle version." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Commentaires" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Marquer comme périmé" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Seuls les utilisateurs enregistrés peuvent marquer les paquets périmés." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Fusion de paquet" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Fusionner le paquet" +#, php-format +msgid "Merge Package: %s" +msgstr "Fusionner le paquet : %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Utilisez ce formulaire pour fusionner ce paquet de base %s%s%s dans un autre paquet." +msgstr "" +"Utilisez ce formulaire pour fusionner ce paquet de base %s%s%s dans un autre " +"paquet." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Les paquets suivants vont être supprimés :" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "La fusion du paquet est une opération irréversible." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "Saisissez le nom du paquet dans lequel vous souhaitez fusionner ce paquet." +msgstr "" +"Saisissez le nom du paquet dans lequel vous souhaitez fusionner ce paquet." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Fusionner dans :" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Confirmer la fusion du paquet" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Fusionner" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." msgstr "" +"Seuls les utilisateurs de confiance et les développeurs peuvent fusionner " +"des paquets." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Soumettre une demande" +msgid "File Request" +msgstr "Requête de Fichier" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Fermer la requête" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Première" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Précédente" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Suivant" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Dernière" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Requêtes" -#: html/register.php template/header.php -msgid "Register" -msgstr "S’inscrire" +msgid "Trusted User" +msgstr "Utilisateur de confiance (TU)" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Utilisez ce formulaire pour créer un compte." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Conditions de service" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Les documents suivants ont été mis à jours. Merci de les consulter attentivement :" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "version %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "J'accepte les modalités ci-avant." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Impossible d’obtenir le détail de la proposition." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Le vote est clos pour cette proposition." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Seuls les Utilisateurs de Confiance sont autorisés à voter." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Vous ne pouvez pas voter dans une proposition à votre sujet." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Vous avez déjà voté pour cette proposition." -#: html/tu.php msgid "Vote ID not valid." msgstr "ID de vote non valide." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Votes en cours" -#: html/tu.php msgid "Past Votes" msgstr "Votes passés" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Votants" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "La création de compte est désactivée pour votre adresse IP, probablement à cause d’attaques de spammeurs. Désolé pour le désagrément." +msgstr "" +"La création de compte est désactivée pour votre adresse IP, probablement à " +"cause d’attaques de spammeurs. Désolé pour le désagrément." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "ID d'utilisateur manquant" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Le nom d'utilisateur choisi n'est pas valide." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Il doit être compris entre %s et %s caractères," -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "doit débuter et se terminer par une lettre ou un chiffre." -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "ne peut contenir qu'un seul point, tiret bas ou virgule," -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Merci de confirmer votre mot de passe:" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "L'adresse email n'est pas valide." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "Cette adresse email de secours est invalide." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "La page d'accueil est invalide, spécifiez l'URL HTTP(s) complet." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "L’empreinte de clé PGP est invalide." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "La clé SSH publique est invalide." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Ne peut pas augmenter les autorisations du compte." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Cette langue n'est pas supportée pour le moment." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Le fuseau horaire n'est actuellement pas pris en charge" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "Le nom d’utilisateur %s%s%s, est déjà utilisé." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "L’adresse %s%s%s est déjà utilisée." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "La clé SSH publique, %s%s%s, est déjà utilisée." +msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "Le CAPTCHA est manquant." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "Le CAPTCHA a expiré. Merci de réessayer." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "LE CAPTCHA que vous avez entré est invalide." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Erreur en essayant de créer le compte %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "Le compte %s%s%s a été créé avec succès." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Une clé de réinitialisation de mot de passe vous a été envoyée par e-mail." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Cliquez sur le lien de connexion ci-dessus pour utiliser votre compte." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Bienvenue sur %s ! Afin de générer un mot de passe pour votre nouveau " +"compte, veuillez suivre le lien ci-dessous. Si le lien ne fonctionne pas, " +"copiez-le et collez-le dans votre navigateur web." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" +"Une clé de réinitialisation de mot de passe vous a été envoyée par e-mail." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Aucun changement n'ont été fait au compte, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "Le compte %s%s%s a été modifié avec succès." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Le formulaire de connexion est actuellement désactivé pour votre adresse IP, probablement à cause d’attaques de spammeurs. Désolé pour le désagrément." +msgstr "" +"Le formulaire de connexion est actuellement désactivé pour votre adresse IP, " +"probablement à cause d’attaques de spammeurs. Désolé pour le désagrément." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Compte suspendu." -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "Vous n’avez pas la permission de suspendre des comptes." - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Votre mot de passe a été réinitialisé. Si vous venez de créer un nouveau compte, veuillez utiliser le lien présent dans l’e-mail de confirmation pour modifier le mot de passe. Sinon, demandez une clé de réinitialisation depuis la page « %sRéinitialisation de mot de passe%s »." +msgstr "" +"Votre mot de passe a été réinitialisé. Si vous venez de créer un nouveau " +"compte, veuillez utiliser le lien présent dans l’e-mail de confirmation pour " +"modifier le mot de passe. Sinon, demandez une clé de réinitialisation depuis " +"la page « %sRéinitialisation de mot de passe%s »." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Mauvais nom d'utilisateur ou mot de passe." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." -msgstr "Une erreur est survenue en essayant de générer une session utilisateur." +msgstr "" +"Une erreur est survenue en essayant de générer une session utilisateur." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Combinaison entre l'e-mail et la clef de réinitialisation invalides." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Aucun" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Voir les informations du compte pour %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "L'ID du paquet de base ou le nom du paquet de base est manquant." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Vous n'êtes pas autorisé(e) à éditer ce commentaire." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Le commentaire n'existe pas." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Le commentaire ne peut pas être vide." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Le commentaire a été ajouté." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Vous devez vous identifier avant de pouvoir éditer les informations du paquet." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "ID de commentaire manquant." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Au plus 5 commentaires peuvent être épinglés." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Vous n’avez pas le droit d’épingler ce commentaire." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Vous n’avez pas le droit de désépingler ce commentaire." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Le commentaire a été épinglé." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Le commentaire a été désépinglé." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Erreur en recherchant les détails du paquet." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Les détails du paquet ne peuvent pas être trouvés." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "Mauvais en-tête Referer." - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "Vous n’avez sélectionné aucun paquet pour être notifié." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "Les notifications des paquets sélectionnés ont été activées." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "Vous n’avez sélectionné aucun paquet pour la suppression de notification." - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "Un paquet que vous avez sélectionné n’a pas les notifications activées." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "Les notifications des paquets sélectionnés ont été supprimées." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Vous devez être authentifié avant de pouvoir étiqueter des paquets." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Vous n'avez sélectionné aucun paquet à étiqueter." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Les paquets sélectionnés n'ont pas été étiquetés, merci d'entrer un commentaire." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Les paquets sélectionnés ont été étiquetés comme périmés." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." -msgstr "Vous devez être authentifié avant de pouvoir retirer l'étiquetage des paquets." +msgstr "" +"Vous devez être authentifié avant de pouvoir retirer l'étiquetage des " +"paquets." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Vous n'avez sélectionné aucun paquet auquel retirer l'étiquetage." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Les paquets sélectionnés ne sont plus étiquetés." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Vous n’avez pas la permission de supprimer des paquets." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Vous n'avez sélectionné aucun paquet à supprimer." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "L’un des paquets que vous avez sélectionnés n’existe pas." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Les paquets sélectionnés ont été supprimés." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Vous devez être authentifié avant de pouvoir adopter des paquets." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "Vous n’êtes pas autorisé à adopter l’un des paquets que vous avez sélectionnés." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." -msgstr "Vous devez être authentifié avant de pouvoir destituer des paquets." +msgstr "Vous devez être authentifié avant de pouvoir abandonner des paquets." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "Vous n’êtes pas autorisé à destituer l’un des paquets que vous avez sélectionnés." - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Vous n'avez pas sélectionné de paquet à adopter." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." -msgstr "Vous n'avez sélectionné aucun paquet à destituer." +msgstr "Vous n'avez sélectionné aucun paquet à abandonner." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Les paquets sélectionnés ont été adoptés." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." -msgstr "Les paquets sélectionnés ont été destitués." +msgstr "Les paquets sélectionnés ont été abandonnés." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Vous devez être authentifié avant de pouvoir voter pour des paquets." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." -msgstr "Vous devez être authentifié avant de pouvoir retirer votre vote sur des paquets." +msgstr "" +"Vous devez être authentifié avant de pouvoir retirer votre vote sur des " +"paquets." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Vous n'avez sélectionné aucun paquet pour lequel vous souhaitez voter." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Vos votes ont été retirés des paquets sélectionnés." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Vos votes ont été distribués aux paquets sélectionnés." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Ajout impossible à la liste de notification." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." -msgstr "Vous avez été ajouté à la liste des notifications de commentaire pour %s." +msgstr "" +"Vous avez été ajouté à la liste des notifications de commentaire pour %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." -msgstr "Vous avez été retiré de la liste des notifications de commentaire pour %s." +msgstr "" +"Vous avez été retiré de la liste des notifications de commentaire pour %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Vous n’avez pas l’autorisation de restaurer ce commentaire." +msgid "You must be logged in before you can edit package information." +msgstr "" +"Vous devez vous identifier avant de pouvoir éditer les informations du " +"paquet." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Le commentaire a été restauré." +msgid "Missing comment ID." +msgstr "ID de commentaire manquant." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Vous n'êtes pas autorisé(e) à supprimer ce commentaire." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Le commentaire a été supprimé." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Le commentaire a été édité." +msgid "You are not allowed to delete this comment." +msgstr "Vous n'êtes pas autorisé(e) à supprimer ce commentaire." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Vous n'êtes pas autorisé à éditer les mots-clés de ce paquet de base." +msgid "Missing category ID." +msgstr "ID de catégorie manquant." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Les mots-clés du paquet de base ont été mis à jour." +msgid "Invalid category ID." +msgstr "ID de catégorie non valide." + +msgid "You are not allowed to change this package category." +msgstr "Vous n'êtes pas autorisé à modifier la catégorie de ce paquet." + +msgid "Package category changed." +msgstr "Catégorie du paquet changé." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Vous n'êtes pas autorisé à gérer les co-mainteneurs de ce paquet de base." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Nom d'utilisateur invalide : %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "Les co-mainteneurs du paquet de base ont été mis à jour." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Voir le paquet" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "a besoin de %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "Vous devez être identifié pour soumette des requêtes sur des paquets." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Nom invalide : seules les lettres minuscules sont autorisées." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "La zone de commentaire ne doit pas être vide." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Type de requête invalide." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Requête ajouté avec succès." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Raison incorrecte." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." -msgstr "Seuls les utilisateurs de confiance et les développeurs peuvent fermer les requêtes." +msgstr "" +"Seuls les utilisateurs de confiance et les développeurs peuvent fermer les " +"requêtes." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Requête fermée avec succès." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Vous ne pouvez pas utiliser ce formulaire pour effacer le compte AUR %s de façon permanente." +msgstr "" +"Vous ne pouvez pas utiliser ce formulaire pour effacer le compte AUR %s de " +"façon permanente." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." -msgstr "%sATTENTION%s: cette action ne peut être annulée" +msgstr "%sWARNING%s: cette action ne peut étre annulée" -#: template/account_delete.php msgid "Confirm deletion" msgstr "Confirmer la suppression" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Nom d'utilisateur" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Type de compte" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Utilisateur" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Développeur" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Utilisateur de confiance (TU) et Développeur" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Adresse e-mail" -#: template/account_details.php -msgid "hidden" -msgstr "caché" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Nom réel" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Accueil" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Pseudo IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Empreinte de clé PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "État" -#: template/account_details.php msgid "Inactive since" msgstr "Inactif depuis" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Actif" -#: template/account_details.php -msgid "Registration date:" -msgstr "Date d'enregistrement :" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "inconnu" - -#: template/account_details.php msgid "Last Login" msgstr "Dernière connexion." -#: template/account_details.php msgid "Never" msgstr "Jamais" -#: template/account_details.php msgid "View this user's packages" msgstr "Visualiser les paquets de cet utilisateur." -#: template/account_details.php msgid "Edit this user's account" msgstr "Éditer le compte de cet utilisateur." -#: template/account_details.php -msgid "List this user's comments" -msgstr "Lister les commentaires de cet utilisateur" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Cliquez %sici%s si vous voulez effacer ce compte de façon définitive." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Cliquez %sici%s pour obtenir les détails de l'utilisateur." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Cliquez %sici%s pour lister les commentaires écrits par ce compte." - -#: template/account_edit_form.php msgid "required" msgstr "requis" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Votre nom d'utilisateur est le nom que vous utilisez pour vous connecter. Il est publiquement visible, même si votre compte est inactif." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Utilisateur normal" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Utilisateur de confiance (TU)" + msgid "Account Suspended" msgstr "Compte suspendu" -#: template/account_edit_form.php msgid "Inactive" msgstr "Inactif" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Assurez-vous d'avoir correctement entré votre adresse e-mail, sinon vous n'arriverez plus à vous connecter." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Cacher l'adresse e-mail" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "Si vous ne cachez pas votre adresse email, elle sera visible par l'ensemble des utilisateurs enregistrés de AUR. Si vous cachez votre adresse email, elle sera uniquement visible des membres de l'équipe AUR." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Adresse email de secours" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "En option, fournis une seconde adresse email qui servira à la récupération de votre compte au cas où vous perdez l'accès à votre adresse email principale." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "Les liens pour changer votre mot de passe sont toujours envoyés à votre adresse email principale ainsi qu'à celle de secours." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "Votre adresse email de secours n'est visible que par les membres du staff d'Arch Linux, sans prendre en compte le paramètre %s." - -#: template/account_edit_form.php -msgid "Language" -msgstr "Langue" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Fuseau horaire" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Si vous voulez changer de mot de passe, entrez votre nouveau mot de passe et confirmez le en l'écrivant à nouveau" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Retapez le mot de passe" -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "L'information suivante est requise uniquement si vous voulez soumettre des paquets sur AUR" +msgid "Language" +msgstr "Langue" -#: templates/partials/account_form.html msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "Clé SSH publique" +msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Réglages des notifications" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Avertir des nouveaux commentaires" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Notifications de mises à jour de paquets" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Notifier des changements de propriétaire" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "Pour confirmer les changements sur le profil, veuillez s'il vous plaît entrer votre mot de passe :" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "Votre mot de passe actuel" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "Pour protéger AUR contre la création automatique de comptes, nous vous demandons s'il vous plaît de bien vouloir donner le résultat de la commande suivante:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Réponse" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Mise à jour" -#: template/account_edit_form.php msgid "Create" msgstr "Créer" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Réinitialiser" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Aucun résultat ne correspond à vos critères de recherche." -#: template/account_search_results.php msgid "Edit Account" msgstr "Éditer le compte" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspendu" -#: template/account_search_results.php msgid "Edit" msgstr "Éditer" -#: template/account_search_results.php msgid "Less" msgstr "Moins" -#: template/account_search_results.php msgid "More" msgstr "Plus" -#: template/account_search_results.php msgid "No more results to display." msgstr "Plus de résultats à afficher." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Utilisez ce formulaire pour ajouter des co-mainteneurs pour %s%s%s (un nom d'utilisateur par ligne) :" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "Utilisateurs" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "Sauvegarder" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Commentaire de paquet périmé : %s" +msgid "My Packages" +msgstr "Mes paquets" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s a marqué %s%s%s comme périmé ls %s%s%s pour la raison suivante :" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s n’est pas marqué comme périmé." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Retourner aux détails" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d aurweb Development Team." - -#: template/header.php msgid " My Account" msgstr "Mon compte" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "S’inscrire" + +msgid "unknown" +msgstr "inconnu" + +msgid "Package Base Details" +msgstr "Détails du paquet de base" + msgid "Package Actions" msgstr "Actions du paquet" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Voir le PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "Voir les changements" +msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" -msgstr "Télécharger un instantané" +msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Rechercher sur le wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Marqué comme périmé (%s)" +msgid "Flagged out-of-date" +msgstr "Marqué comme périmé" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Marquer le paquet comme périmé" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Ne plus marquer le paquet comme périmé" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Retirer le vote" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Voter pour ce paquet" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Désactiver les notifications" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Activer les notifications" +msgid "Notify of new comments" +msgstr "Avertir des nouveaux commentaires" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "Gérer les co-mainteneurs" +msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d requête en attente" msgstr[1] "%d requêtes en attente" -msgstr[2] "%d requêtes en attente" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Supprimer le paquet" + +msgid "Merge Package" +msgstr "Fusionner le paquet" + msgid "Adopt Package" msgstr "Adopter ce paquet" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Détails du paquet de base" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" -msgstr "URL de clone (Git)" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "lecture seule" +msgid "Category" +msgstr "Catégorie" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "Cliquez pour copier" +msgid "Change category" +msgstr "Changer de catégorie" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Mots-clés" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Contributeur" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Voir les informations du compte %s" + msgid "Maintainer" msgstr "Mainteneur" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Dernier packageur" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Votes" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularité" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Première soumission" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Dernière mise à jour" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Commentaire édité le : %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Ajouter un commentaire" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "Les identifiants des commits Git faisant référence à des commits dans l'AUR et les URLs sont automatiquement convertis en liens." +msgid "Comment has been added." +msgstr "Le commentaire a été ajouté." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "%sLa syntaxe Markdown %sn'est pas entièrement supportée." +msgid "View all comments" +msgstr "Voir tous les commentaires" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Commentaires épinglés" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Derniers commentaires" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Commentaires pour" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s a commenté le %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Commentaire anonyme le %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "Commenté sur %sle %s." - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "supprimé le %s par %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "supprimé le %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "édité le %s par %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "édité le %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Restaurer le commentaire" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Effacer le commentaire" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Épingler le commentaire" +#, php-format +msgid "Comment by %s" +msgstr "Commentaire de %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Désépingler le commentaire" +msgid "Anonymous comment" +msgstr "Commentaire anonyme" + +msgid "deleted" +msgstr "supprimé" + +msgid "All comments" +msgstr "Tous les commentaires" -#: template/pkg_details.php msgid "Package Details" msgstr "Détails du paquet" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Paquet de base" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Description" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Lien" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Accéder au site web de" -#: template/pkg_details.php msgid "Licenses" msgstr "Licences" -#: template/pkg_details.php msgid "Groups" msgstr "Groupes" -#: template/pkg_details.php msgid "Conflicts" msgstr "En conflit avec" -#: template/pkg_details.php msgid "Provides" msgstr "Fournit" -#: template/pkg_details.php msgid "Replaces" msgstr "Remplace" -#: template/pkg_details.php msgid "Dependencies" msgstr "Dépendances" -#: template/pkg_details.php msgid "Required by" msgstr "Requis par" -#: template/pkg_details.php msgid "Sources" msgstr "Sources" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Fermer la requête : %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Utiliser ce formulaire pour fermer la requête pour le paquet de base %s%s%s." +msgstr "" +"Utiliser ce formulaire pour fermer la requête pour le paquet de base %s%s%s." + +msgid "Note" +msgstr "Note" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Le champ commentaires peut être laissé vide. Cependant, il est fortement recommandé d'ajouter un commentaire lors du rejet d'une requête." +msgstr "" +"Le champ commentaires peut être laissé vide. Cependant, il est fortement " +"recommandé d'ajouter un commentaire lors du rejet d'une requête." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Raison" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Accepté" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Rejeté" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Commentaires" + +#, php-format +msgid "File Request: %s" +msgstr "Requête de Fichier: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Utilisez ce formulaire pour soumettre une requête concernant le paquet de base %s%s%s contenant les paquets suivant :" +msgstr "" +"Utilisez ce formulaire pour soumettre une requête concernant le paquet de " +"base %s%s%s contenant les paquets suivant:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Type de requête" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Suppression" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Rendre orphelin" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Fusionner dans" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Aucune requête ne correspond à vos critères de recherche." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "%d paquet demandé trouvé." msgstr[1] "%d paquets demandés trouvés." -msgstr[2] "%d paquets demandés trouvés." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Page %d sur %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Paquet" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Soumise par" -#: template/pkgreq_results.php msgid "Date" msgstr "Date" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d jour restant" -msgstr[1] "~%d jours restants" -msgstr[2] "~%d jours restants" +msgid "~%d days left" +msgstr "~%d jours restants" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "~%d heure restante" msgstr[1] "%d heures restantes" -msgstr[2] "%d heures restantes" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "< 1 heure restante" -#: template/pkgreq_results.php msgid "Accept" msgstr "Accepter" -#: template/pkgreq_results.php msgid "Locked" msgstr "Verrouillé" -#: template/pkgreq_results.php msgid "Close" msgstr "Fermer" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "En attente" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Fermé" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Nom, Description" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Noms seulement" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Nom exact" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Paquet de base exact" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Co-mainteneurs" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Mainteneur, co-mainteneur" - -#: template/pkg_search_form.php msgid "All" msgstr "Tout" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Étiqueté" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Non étiqueté" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Nom" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Voté" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Dernière modification" +msgid "Age" +msgstr "Âge" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Ascendant" -#: template/pkg_search_form.php msgid "Descending" msgstr "Descendant" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Saisissez les critères de recherche" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Tous" + msgid "Search by" msgstr "Rechercher par" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Mots-clés" + msgid "Out of Date" msgstr "Périmé" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Trier par" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Ordre de tri" -#: template/pkg_search_form.php msgid "Per page" msgstr "Par page" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Aller" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Orphelins" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Erreur en récupérant la liste des paquets." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Aucun paquet ne correspond à vos critères de recherche." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "%d paquet trouvé." msgstr[1] "%d paquets trouvés." -msgstr[2] "%d paquets trouvés." -#: template/pkg_search_results.php msgid "Version" msgstr "Version" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "La popularité est calculée à partir de la somme de tous les votes, chacun étant pondéré par un facteur de %.2f par jour depuis sa création." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Oui" -#: template/pkg_search_results.php msgid "orphan" msgstr "orphelin" -#: template/pkg_search_results.php msgid "Actions" msgstr "Actions" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Étiqueter comme périmé" + msgid "Unflag Out-of-date" msgstr "Retirer l'étiquette « périmé »" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adopter des paquets" -#: template/pkg_search_results.php msgid "Disown Packages" -msgstr "Destituer les paquets" +msgstr "Abandonner les paquets" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Supprimer des paquets" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Confirmer" -#: template/search_accounts_form.php msgid "Any type" msgstr "Tout type" -#: template/search_accounts_form.php msgid "Search" msgstr "Rechercher" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Statistiques" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Paquets orphelins" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Paquets ajoutés au cours des 7 derniers jours" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Paquets mis à jour au cours des 7 derniers jours" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Paquets mis à jour dans l'année écoulée" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Paquets jamais mis à jour" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Utilisateurs enregistrés" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Utilisateurs de confiance (TU)" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Mises à jour récentes" -#: template/stats/updates_table.php -msgid "more" -msgstr "plus" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Mes statistiques" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Paquets non supportés" + msgid "Proposal Details" msgstr "Détails de la proposition" -#: template/tu_details.php msgid "This vote is still running." msgstr "Ce vote est toujours en cours." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Soumission: %s par %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Fin" -#: template/tu_details.php msgid "Result" msgstr "Résultat" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Non" -#: template/tu_details.php msgid "Abstain" msgstr "Abstention" -#: template/tu_details.php msgid "Total" msgstr "Total" -#: template/tu_details.php msgid "Participation" msgstr "Participation" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Derniers votes de TU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Dernier vote" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Aucun résultat trouvé." -#: template/tu_list.php msgid "Start" msgstr "Début" -#: template/tu_list.php msgid "Back" msgstr "Retour" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "Réinitialisation de mot de passe AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "Une demande de réinitialisation de mot de passe a été présentée pour le compte {user} associé à votre adresse e-mail. Si vous souhaitez réinitialiser votre mot de passe suivez le lien [1] ci-dessous, sinon ignorez ce message et rien ne se passera." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Bienvenue sur le dépôt des utilisateurs d'Arch Linux" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Bienvenue sur le dépôt des utilisateurs d'Arch Linux ! Afin de générer un mot de passe pour votre nouveau compte, veuillez suivre le lien [1] ci-dessous. Si le lien ne fonctionne pas, copiez-le et collez-le dans votre navigateur web. " - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "Commentaires AUR pour {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] a ajouté le commentaire suivant à {pkgbase} [2] :" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Si vous ne souhaitez plus recevoir de notifications à propos de ce paquet, rendez-vous sur la page du paquet [2] et sélectionnez \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "Paquet AUR mis à jour : {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] a poussé un nouveau commit vers {pkgbase} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "Notification de paquet AUR périmé pour {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Votre paquet {pkgbase} [1] a été marqué comme périmé par {user} [2] :" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "Notification de paquet AUR adopté pour {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "Le paquet {pkgbase} [1] a été adopté par {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "Le paquet {pkgbase} [1] a été destitué par {user} [2]. " - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "Notification de paquet AUR co-maintenu pour {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "Vous avez été ajouté à la liste des co-mainteneurs de {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "Vous avez été retiré de la liste des co-mainteneurs de {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "Paquet AUR supprimé : {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] a fusionné {old} [2] dans {new} [3].\n\nSi vous ne souhaitez plus recevoir de notifications à propos du nouveau paquet, rendez-vous sur [3] puis cliquez \"{label}\". " - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] a supprimé {pkgbase} [2].\n\nVous ne recevrez plus de notifications à propos de ce paquet." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "N'oubliez pas de voter sur la proposition {id} [1]. La période de vote se termine dans moins de 48 heures." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "Type de compte choisi invalide." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "Vous n’avez pas la permission de changer le type de compte." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "Vous n’avez pas la permission de changer le type de compte de cet utilisateur en %s." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "Erreur interne du serveur" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "Une erreur fatale s’est produite." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "Erreur du serveur AUR" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/he.po b/po/he.po index e39a5940..ff35d48e 100644 --- a/po/he.po +++ b/po/he.po @@ -1,2387 +1,1306 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# gk , 2016 # Lukas Fleischer , 2011 -# Yaron Shahrabani , 2016-2023 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Yaron Shahrabani , 2016-2023\n" -"Language-Team: Hebrew (http://app.transifex.com/lfleischer/aurweb/language/he/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Hebrew (http://www.transifex.com/projects/p/aur/language/" +"he/)\n" +"Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: he\n" -"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" -msgstr "העמוד לא נמצא" +msgstr "" -#: html/404.php msgid "Sorry, the page you've requested does not exist." -msgstr "העמוד שביקשת אינו קיים, עמך הסליחה." +msgstr "" -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "הערה" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "כתובות שיבוט של Git לא אמורות להיפתח בדפדפן." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "כדי לשבט את מאגר ה־Git של %s, יש להפעיל את %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "יש ללחוץ %sכאן%s כדי לחזור אל הפרטים על %s." - -#: html/503.php msgid "Service Unavailable" -msgstr "השירות אינו זמין" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "אל בהלה! אתר זה הושבת לטובת עבודות תחזוקה. נשוב במהרה." +msgstr "" -#: html/account.php msgid "Account" -msgstr "חשבון" +msgstr "" -#: html/account.php template/header.php msgid "Accounts" msgstr "חשבונות" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "אין לך גישה לאזור זה." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "לא ניתן לקבל נתונים עבור המשתמש שנבחר." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "אין לך הרשאה לערוך חשבון זה." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "הססמה שגויה." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "נא להשתמש בטופס על מנת לחפש אחר חשבונות קיימים." -#: html/account.php msgid "You must log in to view user information." -msgstr "עליך להיכנס על מנת לצפות בנתוני משתמש." +msgstr "עליך להתחבר על מנת לצפות בנתוני משתמש." + +msgid "Use this form to create an account." +msgstr "ניתן להשתמש בטופס זה על מנת ליצור חשבון." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "הוספת הצעה" -#: html/addvote.php msgid "Invalid token for user action." -msgstr "אסימון שגוי לפעולת משתמש." +msgstr "" -#: html/addvote.php msgid "Username does not exist." msgstr "שם המשתמש לא קיים." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." -msgstr "ל־%s יש כבר הצעה קיימת." +msgstr "%s יש כבר הצעה קיימת." -#: html/addvote.php msgid "Invalid type." -msgstr "סוג שגוי." +msgstr "" -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "הצעה לא יכולה להיות ריקה." -#: html/addvote.php msgid "New proposal submitted." msgstr "הצעה חדשה נשלחה." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "שליחת הצבעה עבור הפעלת הצבעה." -#: html/addvote.php msgid "Applicant/TU" -msgstr "מועמד/משתמש מהימן" +msgstr "" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(ריק אם אינה מתאימה)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "סוג" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "הוספת מתחזקים לחבילה" +msgid "Addition of a TU" +msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "הסרת מתחזקים מהחבילה" +msgid "Removal of a TU" +msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "הסרת מתחזקי חבילה (חוסר פעילות לא מוצהרת)" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "" -#: html/addvote.php msgid "Amendment of Bylaws" -msgstr "תיקון חוקי עזר" +msgstr "" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "הצעה" -#: html/addvote.php msgid "Submit" msgstr "שליחה" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "ניהול שותפים לתחזוקה" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "עריכת תגובה" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "לוח בקרה" - -#: html/home.php template/header.php msgid "Home" msgstr "בית" -#: html/home.php -msgid "My Flagged Packages" -msgstr "החבילות המסומנות שלי" - -#: html/home.php -msgid "My Requests" -msgstr "הבקשות שלי" - -#: html/home.php -msgid "My Packages" -msgstr "החבילות שלי" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "חיפוש אחר חבילות בתחזוקה" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "חבילות בתחזוקת משנה" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "חיפוש אחר חבילה שאני מתחזק המשנה שלה" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "ברוך בואך ל־AUR! נא לקרוא את %sההנחיות למשתמשים ב־AUR%s למידע נוסף ואת %sהנחיות ההגשה ל־AUR%s אם מעניין אותך לתרום PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." +msgstr "" -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "הגדרות PKGBUILD שנתרמו %sחייבות%s לעמוד ב%sתקני האריזה של ארץ׳%s אחרת הן תמחקנה!" +msgstr "" -#: html/home.php msgid "Remember to vote for your favourite packages!" -msgstr "לא לשכוח להצביע לחבילות המועדפות עליך!" +msgstr "" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "יתכן שחלק מהחבילות מסופקות בתור קבצים בינריים תחת [extra] (קהילה)." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" -#: html/home.php msgid "DISCLAIMER" -msgstr "הבהרה" +msgstr "" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "חבילות AUR הן תוכן שנוצר על ידי המשתמשים. כל שימוש בקבצים שסופקו הוא על אחריותך בלבד." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" -#: html/home.php -msgid "Learn more..." -msgstr "מידע נוסף..." - -#: html/home.php msgid "Support" -msgstr "תמיכה" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "בקשות חבילה" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "ישנם שלושה סוגים של בקשות שניתן להגיש בתיבה %sפעולות על חבילה%s בעמוד פרטי החבילה:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "בקשת יתומה" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "הגשת בקשה לניתוק בעלות על חבילה, למשל כאשר המתחזק אינו פעיל והחבילה סומנה כלא עדכנית במשך זמן מה." +msgstr "" -#: html/home.php msgid "Deletion Request" -msgstr "בקשת מחיקה" +msgstr "" -#: html/home.php msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "אפשר לבקש הסרת חבילה ממאגר המשתמשים של Arch ‏(AUR). נא לא להשתמש בזה אם החבילה פגומה ואפשר לתקן אותה בקלות. במקום, יש ליצור קשר עם מתחזקי החבילה ולהגיש בקשת יתמות במקרה הצורך." +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" -#: html/home.php msgid "Merge Request" -msgstr "בקשת מיזוג" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "הגשת בקשה למיזוג חבילה אחת לתוך חבילה אחרת. ניתן להשתמש כאשר צריך לשנות שם של חבילה או להחליף אותה בחבילה מפוצלת." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "כדי לדון בבקשה, ניתן להשתמש בקבוצת הדיונים %saur-requests%s. עם זאת, נא לא להשתמש ברשימה הזאת כדי להגיש בקשות." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "שליחת חבילות" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Git על גבי SSH היא התשתית העדכנית להגשת חבילות ל־AUR. ניתן לעיין בסעיף %sהגשת חבילות%s בעמוד Arch User Repository ב־ArchWiki לקבלת פרטים נוספים." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "טביעות האצבע מסוג SSH הבאות נמצאות בשימוש עבור AUR:" - -#: html/home.php msgid "Discussion" msgstr "דיון" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "דיון כללי בנוגע למאגר המשתמשים של Arch‏ (AUR) ומבנה מתחזקי החבילות מתרחש ב־%saur-general%s. לדיון בנוגע לפיתוח האתר של AUR, יש להשתמש ברשימת הדיוור %saur-dev%s." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." +msgstr "" -#: html/home.php msgid "Bug Reporting" -msgstr "דיווח על באגים" +msgstr "" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "אם מצאת תקלה באתר של AUR, נא למלא דוח תקלה ב%sעוקב התקלות%s שלנו. אפשר להשתמש בעוקב כדי לדווח על תקלות באתר של AUR %sבלבד%s. כדי לדווח על תקלות עם אריזות יש ליצור קשר עם המתחזקים או להשאיר תגובה בעמוד החבילה המתאים." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." +msgstr "" -#: html/home.php msgid "Package Search" -msgstr "חיפוש חבילות" +msgstr "" -#: html/index.php msgid "Adopt" -msgstr "אימוץ" +msgstr "" -#: html/index.php msgid "Vote" msgstr "הצבעה" -#: html/index.php msgid "UnVote" msgstr "ביטול הצבעה" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" -msgstr "התראה" +msgstr "התרעה" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" -msgstr "ביטול התראה" +msgstr "ביטול התרעה" + +msgid "Flag" +msgstr "" -#: html/index.php msgid "UnFlag" -msgstr "ביטול סימון" +msgstr "" -#: html/login.php template/header.php msgid "Login" msgstr "כניסה" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "נכנסת בשם: %s" -#: html/login.php template/header.php msgid "Logout" -msgstr "יציאה" +msgstr "ניתוק" -#: html/login.php msgid "Enter login credentials" -msgstr "נא להזין פרטי גישה" +msgstr "" -#: html/login.php -msgid "User name or primary email address" -msgstr "שם משתמש או כתובת דוא״ל עיקרית" +msgid "Username" +msgstr "שם משתמש" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "ססמה" -#: html/login.php msgid "Remember me" msgstr "שמירת הפרטים" -#: html/login.php msgid "Forgot Password" -msgstr "שכחתי את הססמה" +msgstr "" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "כניסה באמצעות HTTP מנוטרלת. נא %sלעבור ל־HTTPs%s אם ברצונך להיכנס." +msgstr "" -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "קריטריונים לחיפוש" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "חבילות" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "ארעה שגיאה בזמן קבלת נתוני חבילה." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "שדה הכרחי חסר." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "שדות הססמה לא תואמים." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "הססמה חייבת להיות באורך של %s אותיות לפחות." -#: html/passreset.php msgid "Invalid e-mail." -msgstr "כתובת דוא״ל שגויה." +msgstr "" + +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" -#: html/passreset.php msgid "Password Reset" msgstr "איפוס ססמה" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." -msgstr "נא לבדוק בתיבת הדוא״ל שלך אם התקבל קישור לאישור." +msgstr "" -#: html/passreset.php msgid "Your password has been reset successfully." -msgstr "הססמה שלך התאפסה בהצלחה." +msgstr "" -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "אימות של שם המשתמש או כתובת הדוא״ל העיקרית:" +msgid "Confirm your e-mail address:" +msgstr "אישור כתובת הדוא״ל שלך" -#: html/passreset.php msgid "Enter your new password:" msgstr "הזנת ססמה חדשה:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "אישור הססמה החדשה:" -#: html/passreset.php html/tos.php msgid "Continue" -msgstr "המשך" +msgstr "" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "אם שכחת את שם המשתמש ואת כתובת הדוא״ל העיקרית בה השתמשת כדי להירשם, נא לשלוח הודעה לקבוצת הדיוור %saur-general%s." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "נא להקליד את שם המשתמש או את כתובת הדוא״ל העיקרית שלך:" +msgid "Enter your e-mail address:" +msgstr "נא להזין את כתובת הדוא״ל שלך:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "בסיסי חבילות" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "החבילות הבאות לא נותקו מבעליהן, נא לסמן את התיבה לאישור." +msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "החבילות הנבחרות לא אומצו, נא לסמן את תיבת האישור." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "לא ניתן למצוא חבילה למיזוג הצבעות ותגובות אליה." +msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." -msgstr "אי אפשר למזג בסיס חבילה עם עצמו." +msgstr "" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "החבילות שנבחרו לא נמחקו, נא לבחור בתיבת האישור." -#: html/pkgdel.php msgid "Package Deletion" -msgstr "מחיקת חבילות" +msgstr "" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "מחיקת חבילה" +#, php-format +msgid "Delete Package: %s" +msgstr "" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "ניתן להשתמש בטופס זה כדי למחוק את בסיס החבילה %s%s%s ואת החבילות הבאות מ־AUR:" +msgstr "" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " -msgstr "מחיקת חבילה היא לצמיתות." +msgstr "" -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." -msgstr "נא לבחור את תיבת הסימון כדי לאשר את הפעולה." +msgstr "" -#: html/pkgdel.php msgid "Confirm package deletion" -msgstr "אישור מחיקת חבילה" +msgstr "" -#: html/pkgdel.php template/account_delete.php msgid "Delete" -msgstr "מחיקה" +msgstr "" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "רק מתחזקי ומפתחי חבילות יכולים למחוק חבילות." +msgid "Only Trusted Users and Developers can delete packages." +msgstr "" -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" -msgstr "ניתוק בעלות על חבילה" +msgstr "" + +#, php-format +msgid "Disown Package: %s" +msgstr "" -#: html/pkgdisown.php #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "ניתן להשתמש בטופס זה כדי לשלול את הבעלות על בסיס החבילה %s%s%s שכוללת את החבילות הבאות:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "סימון התיבה הזאת מהווה את אישורך להסיר את שותפותך בתחזוקת חבילה זו." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "על ידי סימון תיבת הבחירה, ניתן אישורך לניתוק הבעלות על חבילה והעברת הבעלות אל %s%s%s." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "על ידי סימון תיבת הבחירה, נתת את אישורך לניתוק הבעלות על חבילה." +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "אישור ניתוק בעלות החבילה" +msgstr "" -#: html/pkgdisown.php msgid "Disown" -msgstr "ניתוק בעלות" +msgstr "" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "רק מתחזקי ומפתחי חבילות יכולים לנשל חבילות." +msgid "Only Trusted Users and Developers can disown packages." +msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "סימון התגובה" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "סימון תגובה כלא עדכנית" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "כנראה שזאת חבילה ממערכת ניהול גרסאות קוד. נא %sלא%s לסמן אותה כפגת תוקף אם גרסת החבילה ב־AUR אינה תואמת להגשה העדכנית ביותר. יש לסמן את החבילה רק אם המקורות הועברו או שיש צורך בשינוי ב־PKGBUILD עקב שינויים עדכניים במאגר המקורי." - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "יש להשתמש בטופס זה כדי לסמן את בסיס החבילה %s%s%s ואת החבילות הבאות כלא עדכניות:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "נא %sלא%s להשתמש בטופס הזה כדי לדווח על תקלות. יש להשתמש בהערות החבילה במקום." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "נא להזין את הפרטים על מדוע החבילה לא עדכנית, מומלץ להוסיף קישורים להכרזות המתאימות או לקובצי הגרסה העדכנית." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "תגובות" - -#: html/pkgflag.php -msgid "Flag" -msgstr "סימון" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "רק משתמשים רשומים יכולים לסמן חבילות כלא עדכניות." - -#: html/pkgmerge.php msgid "Package Merging" -msgstr "מיזוג חבילות" +msgstr "" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "מיזוג חבילה" +#, php-format +msgid "Merge Package: %s" +msgstr "" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "ניתן להשתמש בטופס זה כדי למזג את בסיס החבילה %s%s%s לתוך חבילה אחרת." +msgstr "" -#: html/pkgmerge.php msgid "The following packages will be deleted: " -msgstr "החבילות הבאות תימחקנה:" +msgstr "" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " -msgstr "לאחר מיזוג החבילות לא ניתן לחזור אחורה בתהליך." +msgstr "" -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "נא להזין את שם החבילה שאליה ברצונך למזג את החבילה." +msgstr "" -#: html/pkgmerge.php msgid "Merge into:" -msgstr "מיזוג לתוך:" +msgstr "" -#: html/pkgmerge.php msgid "Confirm package merge" -msgstr "אימות מיזוג חבילה" +msgstr "" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" -msgstr "מיזוג" +msgstr "" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "רק מתחזקי ומפתחי חבילות יכולים למזג חבילות." +msgid "Only Trusted Users and Developers can merge packages." +msgstr "" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "שליחת בקשה" +msgid "File Request" +msgstr "" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "סגירת בקשה" +msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" -msgstr "ראשון" +msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" -msgstr "הקודם" +msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "הבא" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" -msgstr "אחרון" +msgstr "" -#: html/pkgreq.php template/header.php msgid "Requests" -msgstr "בקשות" +msgstr "" -#: html/register.php template/header.php -msgid "Register" -msgstr "הרשמה" +msgid "Trusted User" +msgstr "משתמש אמין" -#: html/register.php -msgid "Use this form to create an account." -msgstr "ניתן להשתמש בטופס זה על מנת ליצור חשבון." - -#: html/tos.php -msgid "Terms of Service" -msgstr "תנאי השירות" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "המסמכים הבאים עודכנו. נא לסקור אותם בקפידה:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "מהדורה %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "התנאים שלעיל מקובלים עלי." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "מתחזקי חבילה" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "לא ניתן לקבל נתוני הצעה." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "ההצבעה סגורה עבור הצעה זו." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "רק למתחזקי חבילה מותר להצביע." +msgid "Only Trusted Users are allowed to vote." +msgstr "" -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "אין באפשרותך להצביע עבור הצעה הקשורה בך." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "כבר הצבעת עבור הצעה זו." -#: html/tu.php msgid "Vote ID not valid." msgstr "מס׳ הזיהוי של ההצבעה אינו תקין." -#: html/tu.php template/tu_list.php msgid "Current Votes" -msgstr "קולות נוכחיים" +msgstr "הצבעות נוכחיות" -#: html/tu.php msgid "Past Votes" -msgstr "קולות עבר" +msgstr "" -#: html/voters.php template/tu_details.php msgid "Voters" -msgstr "מצביעים" +msgstr "" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "הרשמה לחשבון הושבתה לכתובת ה־IP שלך עקב מתקפות זבל מתמשכות. אנו מתנצלים על אי הנוחות." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Missing User ID" -msgstr "מס׳ הזיהוי של המשתמש חסר" +msgstr "חסר מס׳ הזיהוי של המשתמש" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "שם המשתמש אינו חוקי." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "חייב להיות בין %s ל־%s אותיות" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "יש להתחיל ולסיים עם תו או מספר" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "יכול הכיל רק נקודה אחת, קו תחתון או מקף." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "נא לאשר את הססמה החדשה שלך." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "כתובת הדוא״ל שהוזנה אינה תקינה." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "כתובת הדוא״ל לגיבוי שגויה." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "דף הבית שגוי, נא לציין את כתובת ה־HTTP(s) המלאה." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." -msgstr "טביעת האצבע מסוג PGP שגויה." +msgstr "" -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "מפתח ה־SSH הציבורי שגוי." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." -msgstr "לא ניתן להגדיל את הרשאות החשבון." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." -msgstr "השפה אינה נתמכת כרגע." +msgstr "שפה כרגע לא נתמכת." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "אין תמיכה באזור זמן נכון לעכשיו." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." -msgstr "שם המשתמש, %s%s%s, כבר נמצא בשימוש." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." -msgstr "הכתובת, %s%s%s, כבר נמצאת בשימוש." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "מפתח ה־SSH הציבורי, %s%s%s, כבר נמצא בשימוש." +msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "הקאפצ׳ה חסרה." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "תוקף הקאפצ׳ה פג. נא לנסות שוב." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "התשובה שמילאת בקאפצ׳ה שגויה." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." -msgstr "אירעה שגיאה בניסיון ליצירת חשבון, %s%s%s." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." -msgstr "החשבון, %s%s%s, נוצר בהצלחה." +msgstr "" -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "מפתח איפוס ססמה נשלח לכתובת הדוא״ל שלך." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." -msgstr "נא ללחוץ על קישור הכניסה להלן כדי להשתמש בחשבון שלך." +msgstr "" + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." -msgstr "לא בוצעו שינויים בחשבון, %s%s%s." +msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." -msgstr "החשבון, %s%s%s, השתנה בהצלחה." +msgstr "" -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "כתובת הכניסה מנוטרלת לכתובת ה־ IP שלך, כנראה עקב מתקפות ספאם מתמשכות. אנו מתנצלים על אי הנוחות." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Account suspended" -msgstr "חשבון מושעה" +msgstr "" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "אין לך הרשאות להשהות חשבונות." - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "הססמה שלך עברה איפוס. אם הרגע יצרת חשבון חדש, נא להשתמש בקישור מהודעת האימות כדי להגדיר ססמה ראשונית. בכל מצב אחר, נא לבקר מפתח איפוס בעמוד %sאיפוס ססמה%s." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Bad username or password." -msgstr "שם המשתמש או הססמה שגויים." +msgstr "" -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." -msgstr "אירעה שגיאה בעת הניסיון ליצירת הפעלת משתמש." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." -msgstr "השילוב בין כתובת דוא״ל למפתח איפוס שגוי." +msgstr "" -#: lib/aur.inc.php template/pkg_details.php msgid "None" -msgstr "ללא" +msgstr "" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "הצגת פרטי החשבון %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "מזהה בסיס החבילה או שם בסיס החבילה חסר." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "אין לך הרשאה לערוך את התגובה הזו." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "התגובה אינה קיימת." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "התגובה לא יכולה להישאר ריקה." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "נוספה תגובה." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "עליך להיכנס לפני שיהיה באפשרותך לערוך נתוני חבילה." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "חסר מס׳ זיהוי להערה." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "אי אפשר להצמיד למעלה מ־5 תגובות." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "אין לך הרשאה להצמיד תגובה זו." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "אין לך הרשה לבטל את ההצמדה של תגובה זו." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "התגובה הוצמדה." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "הצמדת התגובה בוטלה." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "שגיאה בקבלת נתוני חבילה." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "נתוני חבילה לא נמצאו." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "כותרת הפניה שגויה." - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "לא בחרת חבילות לקבל עבורן התראות." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "ההתראות על החבילות הנבחרות הופעלו." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "לא בחרת חבילות כלשהן להסרת התראות." - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "לא מופעלות התראות על החבילה שבחרת." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "ההתראות על החבילות הנבחרות הוסרו." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "עליך להיכנס לפני שיהיה באפשרותך לסמן חבילות." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "לא בחרת שום חבילות לסימון." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "החבילות הנבחרות לא סומנו, נא לכתוב תגובה." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "החבילות שנבחרו מסומנות כלא עדכניות." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "עליך להתחבר לפני שיהיה באפשרותך לבטל סימוני חבילות." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "לא בחרת שום חבילות לביטול סימון." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "החבילות שנבחרו בוטלו מהסימון." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." -msgstr "אין לך הרשאה למחוק חבילות." +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "לא בחרת שום חבילות למחיקה." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "אחת החבילות שבחרת אינה קיימת." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "החבילות המסומנות נמחקו." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "עליך להיכנס לפני שיהיה באפשרותך לאמץ חבילות." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "אסור לך לאמץ את אחת החבילות שבחרת." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." -msgstr "עליך להיכנס לפני שיהיה באפשרותך לנתק בעלות על חבילות." +msgstr "עליך להיכנס לפני שיהיה באפשרותך לבטל בעלות מחבילות." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "אסור לך לנשל את אחת החבילות שבחרת." - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "לא בחרת שום חבילות לאימוץ." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." -msgstr "לא בחרת שום חבילות לניתוק בעלותך מהן." +msgstr "לא בחרת שום חבילות להסרת בעלותך מהן." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "החבילות שנבחרו אומצו." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." -msgstr "החבילות המסומנות ננטשו על ידי בעליהן." +msgstr "החבילות המסומנות ננטשו" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "עליך להיכנס לפני שתהיה באפשרותך להצביע לחבילות." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "עליך להתחבר לפני ביטול הצבעה עבור חבילות." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "לא בחרת שום חבילות להצביע עבורן." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "ההצבעות שלך הוסרו מהחבילות המסומנות." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "ההצבעות שלך נקלטו עבור החבילות המסומנות." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." -msgstr "לא ניתן לצרף את רשימת ההתראות." +msgstr "לא ניתן לצרף את רשימת ההתרעות." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." -msgstr "צורפת אל רשימת ההתראות עבור %s." +msgstr "צורפת אל רשימת ההתרעות עבור %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." -msgstr "הוסרת מרשימת ההתראות להערות של %s." +msgstr "הוסרת מרשימה ההתרעות עבור ההערות של %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "אין לך הרשאה לשחזר את התגובה הזו." +msgid "You must be logged in before you can edit package information." +msgstr "עליך להיכנס לפני שיהיה באפשרותך לערוך נתוני חבילה." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "התגובה שוחזרה." +msgid "Missing comment ID." +msgstr "חסר מס׳ זיהוי להערה." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "אין לך הרשאה למחוק הערה זו." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "הערה נמחקה." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "התגובה נערכה." +msgid "You are not allowed to delete this comment." +msgstr "אין לך הרשאה למחוק הערה זו." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "אין לך הרשאה לערוך את מילות המפתח של בסיס חבילה זו." +msgid "Missing category ID." +msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "מילות המפתח של בסיס החבילה עודכנו." +msgid "Invalid category ID." +msgstr "מס׳ הזיהוי של הקטגוריה אינו תקין" + +msgid "You are not allowed to change this package category." +msgstr "" + +msgid "Package category changed." +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "אין לך הרשאה לנהל את מתחזקי המשנה לבסיס חבילה זה." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "שם משתמש שגוי: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "מתחזקי המשנה של בסיס החבילה עודכנו." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" -msgstr "הצגת פרטי החבילה עבור" +msgstr "" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "דורשת את %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." -msgstr "עליך להיכנס כדי להגיש בקשות חבילה." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "שם לא חוקי: רק אותיות קטנות מותרות." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." -msgstr "שדה התגובה לא יכול להישאר ריק." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." -msgstr "סוג הבקשה שגוי." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." -msgstr "התגובה נוספה בהצלחה." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." -msgstr "הסיבה שגויה." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." -msgstr "רק משתמשים מהימנים ומפתחים יכולים לסגור בקשות." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." -msgstr "הבקשה נסגרה בהצלחה." +msgstr "" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "ניתן להשתמש בטופס זה כדי למחוק את חשבון ה־AUR בשם %s לצמיתות." +msgstr "" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." -msgstr "%sאזהרה%s: לא ניתן לחזור בך מפעולה זו." +msgstr "" -#: template/account_delete.php msgid "Confirm deletion" -msgstr "אימות מחיקה" +msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "שם משתמש" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "סוג חשבון" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "משתמש" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "מפתח" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "מתחזקי ומפתחי חבילה" +msgid "Trusted User & Developer" +msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "כתובת דוא״ל" -#: template/account_details.php -msgid "hidden" -msgstr "מוסתר" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "שם אמתי" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "עמוד הבית" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" -msgstr "כינוי IRC" +msgstr "כינוי ב־IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" -msgstr "טביעת אצבע מסוג PGP" +msgstr "" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "מצב" -#: template/account_details.php msgid "Inactive since" -msgstr "אין פעילות מאז" +msgstr "" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "פעיל" -#: template/account_details.php -msgid "Registration date:" -msgstr "תאריך ההרשמה:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "לא מוכר" - -#: template/account_details.php msgid "Last Login" -msgstr "כניסה אחרונה" +msgstr "" -#: template/account_details.php msgid "Never" msgstr "לעולם" -#: template/account_details.php msgid "View this user's packages" msgstr "צפייה בחבילות המשתמש" -#: template/account_details.php msgid "Edit this user's account" -msgstr "עריכת החשבון של משתמש זה" +msgstr "" -#: template/account_details.php -msgid "List this user's comments" -msgstr "הצגת תגובות המשתמש הזה" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." -msgstr "נא ללחוץ %sכאן%s אם רצונך הוא למחוק את החשבון הזה לצמיתות." +msgstr "" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "יש ללחוץ %sכאן%s לפרטים על המשתמש." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "נא ללחוץ %sכאן%s כדי להציג את התגובות שהוגשו דרך החשבון הזה." - -#: template/account_edit_form.php msgid "required" msgstr "נדרש" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "שם המשתמש שלך הוא השם שישמש אותך לכניסה למערכת. הוא גלוי לכלל, אפילו לאחר השבתת חשבונך." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "משתמש רגיל" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "משתמשים אמינים" + msgid "Account Suspended" msgstr "חשבון מושעה" -#: template/account_edit_form.php msgid "Inactive" -msgstr "בלתי פעיל" +msgstr "" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "נא לוודא שהזנת את כתובת הדוא״ל שלך כראוי, אחרת חשבונך יינעל." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "הסתרת כתובת דוא״ל" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "אם בחירתך תהיה שלא להסתיר את כתובת הדוא״ל שלך, היא תהיה גלויה לכלל המשתמשים ב־AUR. בחירה הפוכה תגרום לכך שהכתובת תהיה גלויה בפני חברי הסגל של Arch לינוקס בלבד." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "כתובת דוא״ל לגיבוי" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "באפשרותך לציין כתובת דוא״ל משנית בה ניתן להשתמש לשחזור החשבון שלך אם אבדה גישתך לכתובת הדוא״ל העיקרית שלך." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "קישורים לאיפוס ססמה תמיד נשלחים לכתובת הדוא״ל העיקרית שלך ואל כתובת הדוא״ל שלך כגיבוי." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "כתובת הדוא״ל שלך כגיבוי תמיד זמינה אך ורק לחברי הסגל של Arch לינוקס ללא תלות בהגדרה %s." - -#: template/account_edit_form.php -msgid "Language" -msgstr "שפה" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "אזור זמן" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "אם ברצונך לשנות את הססמה, נא להקליד ססמה חדשה ולאשר את הססמה על ידי הקלדתה פעם נוספת." - -#: template/account_edit_form.php msgid "Re-type password" msgstr "הקלדת הססמה מחדש" -#: template/account_edit_form.php +msgid "Language" +msgstr "שפה" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "המידע הבא נחוץ רק אם ברצונך להגיש חבילות למאגר החבילות של ארץ׳." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." +msgstr "" -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "אפשר לציין מגוון מפתחות SSH, אחד בשורה, אין משמעות לשורה ריקה." - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "הסתרת הערות שנמחקו" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "מפתח SSH ציבורי" +msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "הגדרות התראה" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "להודיע לי על תגובות חדשות" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "להודיע לי ל עדכונים בחבילה" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "להודיע לי על שינויים בבעלות" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "כדי לאשר את השינויים בפרופיל נא להקליד את הססמה הנוכחית שלך:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "הססמה הנוכחית שלך" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "כדי להגן על AUR מפני יצירה אוטומטית של חשבונות, אנו מבקשים ממך לציין מה הפלט של הפקודה הבאה:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "תשובה" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "עדכון" -#: template/account_edit_form.php msgid "Create" msgstr "יצירה" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "איפוס" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "אין תוצאות עבור נתוני החיפוש שלך." -#: template/account_search_results.php msgid "Edit Account" msgstr "עריכת חשבון" -#: template/account_search_results.php msgid "Suspended" msgstr "השעייה" -#: template/account_search_results.php msgid "Edit" -msgstr "עריכה" +msgstr "" -#: template/account_search_results.php msgid "Less" msgstr "פחות" -#: template/account_search_results.php msgid "More" msgstr "עוד" -#: template/account_search_results.php msgid "No more results to display." msgstr "אין יותר תוצאות להצגה." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "ניתן להשתמש בטופס זה כדי להוסיף מתחזקי משנה %s%s%s (שם משתמש אחד בשורה):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "משתמשים" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "שמירה" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "הערת סימון כלא עדכנית: %s" +msgid "My Packages" +msgstr "החבילות שלי" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s סומנה בדגל %s%s%s כלא עדכנית %s%s%s מהסיבה הבאה:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s אינה מסומנת כלא עדכנית." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "חזרה לפרטים" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "כל הזכויות שמורות %s 2004-%d לצוות הפיתוח של aurweb." - -#: template/header.php msgid " My Account" -msgstr "החשבון שלי" +msgstr "" + +msgid "Register" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "Package Base Details" +msgstr "" -#: template/pkgbase_actions.php msgid "Package Actions" -msgstr "פעולות חבילה" +msgstr "" -#: template/pkgbase_actions.php msgid "View PKGBUILD" -msgstr "הצגת ה־PKGBUILD" +msgstr "" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "הצגת השינויים" +msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" -msgstr "הורדת לכידה עדכנית" +msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" -msgstr "חיפוש בוויקי" +msgstr "" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "סימון כלא עדכנית (%s)" +msgid "Flagged out-of-date" +msgstr "" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" -msgstr "סימון החבילה כלא עדכנית" +msgstr "" -#: template/pkgbase_actions.php msgid "Unflag package" -msgstr "ביטול סימון חבילה" +msgstr "" -#: template/pkgbase_actions.php msgid "Remove vote" -msgstr "הסרת הצבעה" +msgstr "" -#: template/pkgbase_actions.php msgid "Vote for this package" -msgstr "להצביע לחבילה זו" +msgstr "" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" -msgstr "השבתת התראות" +msgstr "" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "הפעלת התראות" +msgid "Notify of new comments" +msgstr "" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "ניהול מתחזקי משנה" +msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" -msgstr[0] "בקשה %d ממתינה" -msgstr[1] "%d בקשות ממתינות" -msgstr[2] "%d בקשות ממתינות" -msgstr[3] "%d בקשות ממתינות" +msgstr[0] "" +msgstr[1] "" + +msgid "Delete Package" +msgstr "" + +msgid "Merge Package" +msgstr "" -#: template/pkgbase_actions.php msgid "Adopt Package" -msgstr "אימוץ חבילה" +msgstr "" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "פרטי בסיס החבילה" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" -msgstr "כתובת השכפול מ־Git" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "לקריאה בלבד" +msgid "Category" +msgstr "קטגוריה" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "ללחוץ להעתקה" +msgid "Change category" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "מילות מפתח" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" -msgstr "מגיש" +msgstr "" + +#, php-format +msgid "View account information for %s" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Maintainer" msgstr "מתחזק" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" -msgstr "נארז לאחרונה ע״י" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "הצבעות" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "פופולריות" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" -msgstr "הוגשה לראשונה" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" -msgstr "עדכון אחרון" +msgstr "" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "עריכת תגובה עבור: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" -msgstr "הוספת תגובה" +msgstr "" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "מזהי הגשות של Git שמפנים להגשות במאגר החבילות של AUR וכתובות מומרים אוטומטית לקישורים." +msgid "Comment has been added." +msgstr "" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "יש תמיכה חלקית ב%sתחביר Markdown%s" +msgid "View all comments" +msgstr "" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "תגובות נעוצות" - -#: template/pkg_comments.php msgid "Latest Comments" -msgstr "התגובות האחרונות" +msgstr "" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "תגובות על" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "נכתבה תגובה ע״י %s ב־%s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "תגובה אלמונית ב־%s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "הוגשה תגובה על החבילה %s ב־%s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "נמחקה ב־%s ע״י %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "נמחקה ב־%s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "נערכה בתאריך %s ע״י %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "נערכה ב־%s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "ביטול מחיקת התגובה" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "מחיקת הערה" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "הצמדת התגובה" +#, php-format +msgid "Comment by %s" +msgstr "" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "ביטול הצמדת התגובה" +msgid "Anonymous comment" +msgstr "" + +msgid "deleted" +msgstr "" + +msgid "All comments" +msgstr "" -#: template/pkg_details.php msgid "Package Details" msgstr "נתוני חבילה" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" -msgstr "בסיס החבילה" +msgstr "" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "תיאור" -#: template/pkg_details.php msgid "Upstream URL" -msgstr "כתובת מאגר המקור" +msgstr "" -#: template/pkg_details.php msgid "Visit the website for" -msgstr "ביקור באתר של" +msgstr "" -#: template/pkg_details.php msgid "Licenses" -msgstr "רישיונות" +msgstr "" -#: template/pkg_details.php msgid "Groups" -msgstr "קבוצות" +msgstr "" -#: template/pkg_details.php msgid "Conflicts" -msgstr "סתירות" +msgstr "" -#: template/pkg_details.php msgid "Provides" -msgstr "מספקת" +msgstr "" -#: template/pkg_details.php msgid "Replaces" -msgstr "מחליפה" +msgstr "" -#: template/pkg_details.php msgid "Dependencies" -msgstr "תלויות" +msgstr "תלות" -#: template/pkg_details.php msgid "Required by" -msgstr "נדרשת על ידי" +msgstr "נדרש על ידי" -#: template/pkg_details.php msgid "Sources" -msgstr "מקורות" +msgstr "" + +#, php-format +msgid "Close Request: %s" +msgstr "" -#: template/pkgreq_close_form.php #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "ניתן להשתמש בטופס זה כדי לסגור את הבקשה לבסיס החבילה %s%s%s." +msgstr "" + +msgid "Note" +msgstr "" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "שדה ההערות יכול להישאר ריק. עם זאת, מומלץ מאוד להוסיף הערה כשדוחים בקשה." +msgstr "" -#: template/pkgreq_close_form.php msgid "Reason" -msgstr "סיבה" +msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" -msgstr "התקבל" +msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" -msgstr "נדחה" +msgstr "" + +msgid "Comments" +msgstr "" + +#, php-format +msgid "File Request: %s" +msgstr "" -#: template/pkgreq_form.php #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "ניתן להשתמש בטופס זה כדי להגיש את הבקשה לבסיס החבילה %s%s%s שכולל את החבילות הבאות:" +msgstr "" -#: template/pkgreq_form.php msgid "Request type" -msgstr "סוג הבקשה" +msgstr "" -#: template/pkgreq_form.php msgid "Deletion" -msgstr "מחיקה" +msgstr "" -#: template/pkgreq_form.php msgid "Orphan" -msgstr "יתומה" +msgstr "" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" -msgstr "מיזוג לתוך" +msgstr "" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "בקשת מחיקה היא דרישה ממתחזקי החבילה למחוק את בסיס החבילה. יש להשתמש בסוג הזה של הבקשה על כפילויות, תוכנה שננטשה במקור, וגם חבילות בלתי חוקיות ופגומות באופן שלא ניתן לתיקון." - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "בקשת מיזוג היא דרישה ממתחזקי החבילה למחוק את בסיס החבילה ולהעביר את ההצבעות וההערות לבסיס חבילה אחר. מיזוג חבילה לא משפיע על מאגרי ה־Git התואמים. עדכון היסטוריית ה־Git של חבילת היעד הוא באחריותך. " - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "בקשת יתמות היא דרישה ממתחזקי החבילה לנשל את בסיס החבילה. נא עשות את זה רק אם החבילה צריכה פעולת תחזוקה, המתחזקים לא זמינים למשך תקופה וכבר ניסית ליצור קשר עם המתחזקים בעבר." - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "אין בקשות שתואמות את תנאי החיפוש שלך." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." -msgstr[0] "נמצאה בקשה אחת (%d) לחבילה." -msgstr[1] "נמצאו %d בקשות לחבילות." -msgstr[2] "נמצאו %d בקשות לחבילות." -msgstr[3] "נמצאו %d בקשות לחבילות." +msgstr[0] "" +msgstr[1] "" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." -msgstr "עמוד %d מתוך %d." +msgstr "" -#: template/pkgreq_results.php msgid "Package" -msgstr "חבילה" +msgstr "" -#: template/pkgreq_results.php msgid "Filed by" -msgstr "הוגש ע״י" +msgstr "" -#: template/pkgreq_results.php msgid "Date" -msgstr "תאריך" +msgstr "" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "נותר ~%d אחד" -msgstr[1] "נותרו ~%d ימים" -msgstr[2] "נותרו ~%d ימים" -msgstr[3] "נותרו ~%d ימים" +msgid "~%d days left" +msgstr "" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" -msgstr[0] "נותרה בערך שעה (%d)" -msgstr[1] "בערך שעתיים (%d) נותרו" -msgstr[2] "בערך %d שעות נותרו" -msgstr[3] "בערך %d שעות נותרו" +msgstr[0] "" +msgstr[1] "" -#: template/pkgreq_results.php msgid "<1 hour left" -msgstr "נותרה פחות משעה" +msgstr "" -#: template/pkgreq_results.php msgid "Accept" -msgstr "קבלה" +msgstr "" -#: template/pkgreq_results.php msgid "Locked" -msgstr "ננעל" +msgstr "" -#: template/pkgreq_results.php msgid "Close" -msgstr "סגירה" +msgstr "" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "בהמתנה" - -#: template/pkgreq_results.php msgid "Closed" -msgstr "סגור" +msgstr "" -#: template/pkg_search_form.php msgid "Name, Description" -msgstr "שם, תיאור" +msgstr "" -#: template/pkg_search_form.php msgid "Name Only" -msgstr "שם בלבד" +msgstr "" -#: template/pkg_search_form.php msgid "Exact Name" -msgstr "שם מדויק" +msgstr "" -#: template/pkg_search_form.php msgid "Exact Package Base" -msgstr "בסיס החבילה המדויק" +msgstr "" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "מתחזק משנה" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "מתחזק, מתחזק משנה" - -#: template/pkg_search_form.php msgid "All" -msgstr "הכול" +msgstr "" -#: template/pkg_search_form.php msgid "Flagged" -msgstr "מסומנת" +msgstr "" -#: template/pkg_search_form.php msgid "Not Flagged" -msgstr "לא מסומנת" +msgstr "" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "שם" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "הצביעו" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "מועד שינוי אחרון" +msgid "Age" +msgstr "" -#: template/pkg_search_form.php msgid "Ascending" -msgstr "עולה" +msgstr "" -#: template/pkg_search_form.php msgid "Descending" -msgstr "יורד" +msgstr "" -#: template/pkg_search_form.php msgid "Enter search criteria" -msgstr "נא להזין תנאי חיפוש" +msgstr "" + +msgid "Any" +msgstr "כל" -#: template/pkg_search_form.php msgid "Search by" msgstr "חיפוש לפי" -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "לא עדכני" +msgid "Keywords" +msgstr "" + +msgid "Out of Date" +msgstr "" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "סידור לפי" -#: template/pkg_search_form.php msgid "Sort order" msgstr "סדר המיון" -#: template/pkg_search_form.php msgid "Per page" msgstr "לפי דף" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "מעבר" -#: template/pkg_search_form.php msgid "Orphans" msgstr "יתומות" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "שגיאה בעת קבלת רשימת החבילות." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "אין חבילות התואמות לנתוני החיפוש שלך." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." -msgstr[0] "נמצאה חבילה %d." -msgstr[1] "נמצאו %d חבילות." -msgstr[2] "נמצאו %d חבילות." -msgstr[3] "נמצאו %d חבילות." +msgstr[0] "" +msgstr[1] "" -#: template/pkg_search_results.php msgid "Version" -msgstr "גרסה" +msgstr "" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "הפופולריות מחושבת כסכום של כל ההצבעות כאשר כל הצבעה נשקלת עם מקדם של %.2f ליום מאז שנוצרה." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "כן" -#: template/pkg_search_results.php msgid "orphan" msgstr "יתומה" -#: template/pkg_search_results.php msgid "Actions" msgstr "פעולות" -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "ביטול סימון כלא עדכנית" +msgid "Flag Out-of-date" +msgstr "סימון כלא עדכני" + +msgid "Unflag Out-of-date" +msgstr "ביטול סימון כלא מעודכן" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "אימוץ חבילות" -#: template/pkg_search_results.php msgid "Disown Packages" -msgstr "ניתוק בעלות על חבילות" +msgstr "שחרור בעלות על חבילות" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "מחיקת חבילות" -#: template/pkg_search_results.php msgid "Confirm" msgstr "אישור" -#: template/search_accounts_form.php msgid "Any type" msgstr "כל סוג" -#: template/search_accounts_form.php msgid "Search" msgstr "חיפוש" -#: template/stats/general_stats_table.php msgid "Statistics" -msgstr "סטטיסטיקה" +msgstr "" -#: template/stats/general_stats_table.php msgid "Orphan Packages" -msgstr "חבילות יתומות" +msgstr "" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" -msgstr "חבילות שנוספו בשבוע החולף" +msgstr "" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" -msgstr "חבילות שעודכנו בשבוע החולף" +msgstr "" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" -msgstr "חבילות שעודכנו בשנה החולפת" +msgstr "" -#: template/stats/general_stats_table.php msgid "Packages never updated" -msgstr "חבילות שלא עודכנו מעולם" +msgstr "" -#: template/stats/general_stats_table.php msgid "Registered Users" -msgstr "משתמשים רשומים" +msgstr "" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "מתחזקי החבילה" +msgid "Trusted Users" +msgstr "" -#: template/stats/updates_table.php msgid "Recent Updates" -msgstr "עדכונים אחרונים" +msgstr "" -#: template/stats/updates_table.php -msgid "more" -msgstr "עוד" - -#: template/stats/user_table.php msgid "My Statistics" -msgstr "הסטטיסטיקות שלי" +msgstr "" + +msgid "Packages in unsupported" +msgstr "" -#: template/tu_details.php msgid "Proposal Details" msgstr "פרטי הצעה" -#: template/tu_details.php msgid "This vote is still running." -msgstr "ההצבעה עדיין מתרחשת." +msgstr "ההצבעה עדיין קיימת." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" -msgstr "הוגש: %s על ידי %s" +msgstr "נשלח: %s על ידי %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "סוף" -#: template/tu_details.php msgid "Result" -msgstr "תוצאה" +msgstr "" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "לא" -#: template/tu_details.php msgid "Abstain" msgstr "הימנעות" -#: template/tu_details.php msgid "Total" msgstr "סך הכול" -#: template/tu_details.php msgid "Participation" -msgstr "השתתפות" +msgstr "" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" -msgstr "הצבעות אחרונות של משתמשים מהימנים" +msgstr "" -#: template/tu_last_votes_list.php msgid "Last vote" -msgstr "הצבעה אחרונה" +msgstr "" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." -msgstr "לא נמצאו תוצאות." +msgstr "תוצאות לא נמצאו." -#: template/tu_list.php msgid "Start" msgstr "התחלה" -#: template/tu_list.php msgid "Back" msgstr "חזרה" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "איפוס ססמה ב־AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "הוגשה בקשה לאיפוס ססמה לחשבון {user} שמקושר לכתובת הדוא״ל שלך. אם ברצונך לאפס את הססמה שלך עליך להיכנס לקישור [1] שלהלן, אם לא ביקשת מוטב להתעלם מההודעה הזאת ולא יתבצע אף שינוי." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "ברוך בואך למאגר בתחזוקת המשתמשים של Arch" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "ברוך הבא למאגר חבילות המשתמשים של Arch! כדי להגדיר ססמה ראשונית לחשבון החדש שלך נא ללחוץ על הקישור [1] שלהלן. אם הקישור לא עובד, נא לנסות להעתיק ולהדביק אותו בדפדפן." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "הערה ב־AUR על {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "התגובה הבאה נוספה על ידי {user} [1] לחבילה {pkgbase} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "אם לא מעניין אותך לקבל יותר הודעות על החבילה הזאת נא לגשת לעמוד החבילה [2] ולבחור ב„{label}”." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "עדכון בחבילת AUR:‏ {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "נדחפה הגשה חדשה מאת {user} [1] אל {pkgbase} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "התראת חבילה לא עדכנית ב־AUR עבור {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "החבילה שלך {pkgbase} [1] סומנה כלא עדכנית על ידי {user} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "הודעת בעלות ב־AUR על {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "החבילה {pkgbase} [1] אומצה על ידי {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "החבילה {pkgbase} [1] נושלה על ידי {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "התראה למתחזקי משנה ב־AUR של {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "נוספת לרשימת מתחזקי המשנה של {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "הוסרת מרשימת מתחזקי המשנה עבור {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "חבילה נמחקה ב־AUR‏: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{old} [2] מוזג לתוך {new} [3] על ידי {user} [1].\n\n-- \nכדי לא לקבל עוד הודעות על החבילה החדשה, עליך לגשת אל [3] וללחוץ על „{label}”." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr " {pkgbase} [2] נמחקה על ידי{user} [1].\n\nלא תישלחנה אליך התראות נוספות על חבילה זו." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "תזכורת הצבעה לתחזוקת חבילה: הצעה {id}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "נא לזכור להצביע בהצעה {id} [1]. ההצבעה תסתיים בעוד פחות מ־48 שעות." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "סוג החשבון שסופק שגוי." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "אין לך הרשאות לשנות סוגי חשבון." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "אין לך הרשאות לשנות את סוג חשבון המשתמש הזה לכדי %s." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "אין בקשות יתומות קיימות שתוקפן פג לאשר עבור %s." - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "שגיאת שרת פנימית" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "קרתה תקלה משמעותית." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "הפרטים תועדו ויועברו לבדיקת ההנהלה במהירות האפשרות. אנו מתנצלים על אי הנוחות שנגרמה." - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "שגיאת שרת ה־AUR" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "הערות הסגירה התואמות של בקשת החבילה…" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "פעולה זו תסגור בקשות חבילות ממתינות שקשורות אליה. אם %sתגובות%s מושמטות, תיווצר תגובת סגירה אוטומטית." - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "מוקצית" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "להציג עוד %d" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "תלויות" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "החשבון לא נמחק, נא לבדוק את תיבת האישור." - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "ביטול" - -#: templates/requests.html -msgid "Package name" -msgstr "שם החבילה" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "ראוי לשים לב שהסתרת כתובת הדוא״ל שלך תעביר אותה לרשימת העותק המוסתר בהתראות לבקשה. אם מישהו יגיב להתראות האלה, ההודעות לא תגענה אליך. עם זאת, תגובות בדרך כלל נשלחות לרשימת הדיוור והן אמורות להופיע בארכיון." diff --git a/po/hi_IN.po b/po/hi_IN.po deleted file mode 100644 index f8a66539..00000000 --- a/po/hi_IN.po +++ /dev/null @@ -1,2375 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -# Panwar108 , 2018,2020-2022 -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Panwar108 , 2018,2020-2022\n" -"Language-Team: Hindi (India) (http://app.transifex.com/lfleischer/aurweb/language/hi_IN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: hi_IN\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "पृष्ठ नहीं मिला" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "क्षमा करें, अनुरोधित पृष्ठ अनुपलब्ध है।" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "ध्यान दें" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Git क्लोन यूआरएल ब्राउज़र में उपयोग नहीं होते हैं।" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "%s का पैकेज-संग्रह प्रतिरूपित करने हेतु, %s को निष्पादित करें।" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "%sयहाँ%s क्लिक कर %s विवरण पृष्ठ पर वापस जाएँ।" - -#: html/503.php -msgid "Service Unavailable" -msgstr "सेवा अनुपलब्ध" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "धैर्य रखें। अनुरक्षण के कारण साइट अभी बंद है। साइट शीघ्र ही चालू हो जाएगी।" - -#: html/account.php -msgid "Account" -msgstr "अकाउंट" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "अकाउंट" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "इस क्षेत्र हेतु आपका अभिगम निषेध है।" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "निर्दिष्ट उपयोक्ता हेतु जानकारी प्राप्त प्राप्त करना विफल।" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "आपके पास अकाउंट संपादन हेतु अनुमति नहीं है।" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "अमान्य कूटशब्द।" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "वर्तमान उपयोक्ता खोजने हेतु यह प्रपत्र उपयोग करें।" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "उपयोक्ता जानकारी देखने हेतु लॉगिन आवश्यक है।" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "प्रस्ताव जोड़ें" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "उपयोक्ता कार्य हेतु अमान्य टोकन।" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "अनुपस्थित उपयोक्ता नाम।" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "%s हेतु प्रस्ताव पहले से दर्ज है।" - -#: html/addvote.php -msgid "Invalid type." -msgstr "अमान्य प्रकार।" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "प्रस्ताव रिक्त नहीं होना चाहिए।" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "नवीन प्रस्ताव निवेदित किया गया।" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "मत हेतु प्रस्ताव निवेदित करें।" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "निवेदक/विश्वसनीय उपयोक्ता" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "(अनावश्यक होने पर रिक्त)" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "प्रकार" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "उपनियम संशोधन" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "प्रस्ताव" - -#: html/addvote.php -msgid "Submit" -msgstr "निवेदित करें" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "सह-अनुरक्षक प्रबंधन" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "टिप्पणी संपादन" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "डैशबोर्ड" - -#: html/home.php template/header.php -msgid "Home" -msgstr "होम" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "चिन्हित किए गए मेरे पैकेज" - -#: html/home.php -msgid "My Requests" -msgstr "मेरे अनुरोध" - -#: html/home.php -msgid "My Packages" -msgstr "मेरे पैकेज" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "मेरे द्वारा अनुरक्षित पैकेज" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "सह-अनुरक्षित पैकेज" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "मेरे द्वारा सह-अनुरक्षित पैकेज" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "योगदान की गई PKGBUILD का %sआर्च पैकेज मानकों%s के अनुरूप होना %sआवश्यक%s है अन्यथा वे हटा दी जाएँगी!" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "अपने पसंदीदा पैकेज हेतु मतदान अवश्य करें!" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "[extra] के कुछ पैकेज बाइनरी फाइल के रूप में उपलब्ध हो सकते हैं।" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "अस्वीकरण" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "AUR पैकेज उपयोक्ता निर्मित हैं। अतः उपलब्ध फाइलों का उपयोग सावधानीपूर्वक करें।" - -#: html/home.php -msgid "Learn more..." -msgstr "और जानें..." - -#: html/home.php -msgid "Support" -msgstr "सहायता" - -#: html/home.php -msgid "Package Requests" -msgstr "पैकेज अनुरोध" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "पैकेज विवरण पृष्ठ में %sपैकेज कार्य%s हेतु तीन प्रकार के निवेदन संभव हैं :" - -#: html/home.php -msgid "Orphan Request" -msgstr "निरर्थक पैकेज हेतु अनुरोध" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "पैकेज स्वामित्व निरस्त करने हेतु अनुरोध; अत्यधिक समय तक अनुरक्षक के निष्क्रिय व पैकेज पुराना होने की स्थिति में।" - -#: html/home.php -msgid "Deletion Request" -msgstr "पैकेज हटाने हेतु अनुरोध" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "विलय अनुरोध" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "एकाधिक पैकेज का आपस में विलय हेतु अनुरोध। पैकेज नाम बदलाव या विभाजित पैकेज से बदलने की स्थिति में।" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "आप अनुरोध संबंधी चर्चा हेतु %saur-requests%s ईमेल-सूची उपयोग कर सकते हैं। ईमेल-सूची केवल चर्चा हेतु है न कि अनुरोध।" - -#: html/home.php -msgid "Submitting Packages" -msgstr "पैकेज निवेदन" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "AUR में पैकेज निवेदित करने हेतु एसएसएच द्वारा Git उपयोग होती है। अधिक जानकारी हेतु आर्च उपयोक्ता पैकेज-संग्रह आर्च विकी पृष्ठ का %sपैकेज निवेदन%s अनुखंड देखें।" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "AUR हेतु निम्नलिखित एसएसएच एन्क्रिप्शन पहचान चिन्ह उपयोग होते हैं :" - -#: html/home.php -msgid "Discussion" -msgstr "चर्चा" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "समस्या हेतु रिपोर्ट" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "पैकेज खोज" - -#: html/index.php -msgid "Adopt" -msgstr "स्वामित्व लें" - -#: html/index.php -msgid "Vote" -msgstr "मतदान करें" - -#: html/index.php -msgid "UnVote" -msgstr "मत वापस लें" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "सूचित करें" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "सूचित न करें" - -#: html/index.php -msgid "UnFlag" -msgstr "अचिन्हित करें" - -#: html/login.php template/header.php -msgid "Login" -msgstr "लॉगिन" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "के तौर पर लॉग-इन हैं : %s" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "लॉगआउट" - -#: html/login.php -msgid "Enter login credentials" -msgstr "लॉगिन जानकारी दर्ज करें" - -#: html/login.php -msgid "User name or primary email address" -msgstr "उपयोक्ता नाम या प्राथमिक ईमेल पता" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "कूटशब्द" - -#: html/login.php -msgid "Remember me" -msgstr "लॉगिन स्मरण करें" - -#: html/login.php -msgid "Forgot Password" -msgstr "कूटशब्द भूल गए" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "एचटीटीपी लॉगिन निष्क्रिय है। लॉगिन करने हेतु कृपया %sएचटीटीपीएस उपयोग%s करें।" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "खोज मानदंड" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "पैकेज" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "पैकेज विवरण प्राप्त करने हेतु त्रुटि।" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "आवश्यक जानकारी अनुपलब्ध।" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "कूटशब्द मेल नहीं खाते।" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "कूटशब्द में %s अक्षर आवश्यक हैं।" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "अमान्य ईमेल।" - -#: html/passreset.php -msgid "Password Reset" -msgstr "कूटशब्द पुनः सेट करें" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "पुष्टिकरण लिंक हेतु अपना ईमेल देखें।" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "कूटशब्द पुनः सेट करना सफल।" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "उपयोक्ता नाम या प्राथमिक ईमेल की पुष्टि करें :" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "नया कूटशब्द दर्ज करें :" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "नए कूटशब्द की पुष्टि करें :" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "जारी रखें" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "यदि आप पंजीकरण में उपयोग किया गया अपना उपयोक्ता नाम व प्राथमिक ईमेल भूल गए हैं तो %saur-general%s ईमेल-सूची पर संदेश भेजें।" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "उपयोक्ता नाम या प्राथमिक ईमेल दर्ज करें :" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "पैकेज बेस" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "चयनित पैकेज का स्वामित्व निरस्त नहीं हुआ, चिन्हित कर पुष्टि करें।" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "चयनित पैकेज स्वामीविहीन हैं, चिन्हित कर पुष्टि करें।" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "मत व टिप्पणियाँ विलय करने हेतु पैकेज नहीं मिला।" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "पैकेज बेस का स्वयं के साथ विलय संभव नहीं है।" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "चयनित पैकेज हटाएँ नहीं गए, चिन्हित कर पुष्टि करें।" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "पैकेज हटाना" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "पैकेज हटाएँ" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "यह प्रपत्र उपयोग कर पैकेज बेस %s%s%s व निम्नलिखित पैकेज AUR से हटाएँ :" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "पैकेज स्थायी रूप से हट जाएगा।" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "चिन्हित कर कार्य की पुष्टि करें।" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "पैकेज हटाने की पुष्टि करें" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "हटाएँ" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "पैकेज स्वामित्व निरस्त करें" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "यह प्रपत्र उपयोग कर पैकेज बेस %s%s%s में सम्मिलित निम्नलिखित पैकेज हेतु स्वामित्व निरस्त करें :" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "इसे चिन्हित कर पुष्टि करें कि अब आप पैकेज सह-अनुरक्षक बने रहने के इच्छुक नहीं हैं।" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "इसे चिन्हित कर पुष्टि करें कि अब आप पैकेज हेतु अपना स्वामित्व निरस्त कर %s%s%s को स्वामित्व दे रहें हैं।" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "इसे चिन्हित कर पुष्टि करें कि अब आप पैकेज हेतु अपना स्वामित्व निरस्त कर रहें हैं।" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "पैकेज स्वामित्व निरस्त करने हेतु पुष्टि करें" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "स्वामित्व निरस्त करें" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "टिप्पणी चिन्हित करें" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "पैकेज को पुराने के रूप में चिन्हित करें" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "प्रतीत होता है कि यह एक वीसीएस पैकेज है। AUR पैकेज संस्करण का हालिया संचित कार्य से मिलान न होने की स्थिति में कृपया इसे पुराने के रूप में चिन्हित %sन%s करें। स्रोत अंतरण या स्रोत में हालिया परिवर्तनों के कारण PKGBUILD में परिवर्तन होने पर ही इस पैकेज को चिन्हित करें।" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "यह प्रपत्र उपयोग कर पैकेज बेस %s%s%s व निम्नलिखित पैकेज को पुराने के रूप में चिन्हित करें :" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "कृपया यह प्रपत्र समस्या रिपोर्ट हेतु उपयोग %sन%s करें। समस्या हेतु पैकेज पृष्ठ पर टिप्पणी करें।" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "नवीन संस्करण की घोषणा या उपलब्ध फाइल की साइट प्रदान कर टिप्पणी करें कि पैकेज पुराने से रूप में चिन्हित क्यों है।" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "टिप्पणियाँ" - -#: html/pkgflag.php -msgid "Flag" -msgstr "चिन्हित" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "केवल पंजीकृत उपयोक्ता ही पैकेज को पुराने के रूप में चिन्हित कर सकते हैं।" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "पैकेज विलय" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "पैकेज विलय करें" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "यह प्रपत्र उपयोग कर पैकेज बेस %s%s%s का अन्य पैकेज में विलय करें।" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "निम्नलिखित पैकेज हटेंगे :" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "पैकेज विलय उपरांत इसे पूर्ववत करना संभव नहीं है।" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "पैकेज विलय हेतु पैकेज नाम दर्ज करें।" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "इसमें विलय करें :" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "पैकेज विलय पुष्टिकरण" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "विलय करें" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "अनुरोध निवेदित करें" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "अनुरोध निरस्त करें" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "पहला" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "पिछला" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "अगला" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "अंतिम" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "अनुरोध" - -#: html/register.php template/header.php -msgid "Register" -msgstr "पंजीकरण" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "यह प्रपत्र उपयोग कर अकाउंट बनाएँ।" - -#: html/tos.php -msgid "Terms of Service" -msgstr "सेवा की शर्तें" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "निम्नलिखित प्रलेखों में परिवर्तन हुए हैं। कृपया ध्यानपूर्वक पढ़ें :" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "संशोधन %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "मैं ऊपर दिए गए नियम व शर्तों को स्वीकारता हूँ।" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "प्रस्ताव विवरण प्राप्त करने में विफल।" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "इस प्रस्ताव हेतु वोट प्रक्रिया बंद है।" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "स्वयं से संबंधित प्रस्ताव में मतदान निषेध है।" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "इस प्रस्ताव हेतु आपका मत दर्ज है।" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "अमान्य मतदान आईडी।" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "वर्तमान मत" - -#: html/tu.php -msgid "Past Votes" -msgstr "पूर्व मत" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "मतदाता" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "संभवतः अवांछनीय इंटरनेट गतिविधिय के कारण आपके आईपी पते हेतु अकाउंट पंजीकरण निष्क्रिय है। असुविधा के लिए खेद है।" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "अनुपस्थित उपयोक्ता आईडी" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "अमान्य उपयोक्ता नाम।" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "%s से लेकर %s अक्षर होना आवश्यक है" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "आरंभ व अंत अक्षर या अंक से हो" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "केवल एक बिंदु, अंडरस्कोर या हायफ़न ही उपयोग करें।" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "कृपया नए कूटशब्द की पुष्टि करें।" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "अमान्य ईमेल पता।" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "अमान्य बैकअप ईमेल पता।" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "अमान्य होम पृष्ठ, कृपया पूर्ण एचटीटीपी(एस) यूआरएल दर्ज करें।" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "अमान्य पीजीपी कुंजी पहचान चिन्ह।" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "अमान्य सार्वजनिक एसएसएच कुंजी।" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "अकाउंट अनुमतियाँ बढ़ाना संभव नहीं है।" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "असमर्थित भाषा।" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "असमर्थित समयक्षेत्र।" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "उपयोक्ता नाम, %s%s%s, पहले से कार्यरत है।" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "पता, %s%s%s, पहले से कार्यरत है।" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "सार्वजनिक एसएसएच कुंजी, %s%s%s, पहले से कार्यरत है।" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "अनुपस्थित CAPTCHA।" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "CAPTCHA मान्यता समाप्त। पुनः प्रयास करें।" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "अमान्य CAPTCHA उत्तर दर्ज किया गया।" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "अकाउंट, %s%s%s बनाने हेतु त्रुटि।" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "अकाउंट,%s%s%s, सफलतापूर्वक बनाया गया।" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "कूटशब्द पुनः सेट करने हेतु कुंजी आपको ईमेल कर दी गई है।" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "अकाउंट उपयोग करने हेतु लॉगिन पर क्लिक करें।" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "अकाउंट, %s%s%s में कोई परिवर्तन नहीं हुआ।" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "अकाउंट,%s%s%s, हेतु परिवर्तन सफल।" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "संभवतः अवांछनीय इंटरनेट गतिविधि के कारण आपके आईपी पते हेतु लॉगिन प्रपत्र अभी निष्क्रिय है। असुविधा के लिए खेद है।" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "निलंबित अकाउंट" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "आपके पास अकाउंट निलंबन हेतु अनुमति नहीं है।" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "कूटशब्द पुनः सेट किया गया। यदि अकाउंट नवीन है तो, पुष्टिकरण ईमेल में दिए गए लिंक द्वारा आरंभिक कूटशब्द सेट करें। अन्यथा %sकूटशब्द पुनः सेट%s पृष्ठ द्वारा पुनः सेट करने हेतु कुंजी प्राप्त करें।" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "अनुचित उपयोक्ता नाम या कूटशब्द।" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "उपयोक्ता सत्र बनाने समय त्रुटि हुई।" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "अमान्य ईमेल व पुनः सेट कुंजी संयोजन।" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "कुछ नहीं" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "%s हेतु अकाउंट जानकारी देखें" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "अनुपस्थित पैकेज बेस आईडी या पैकेज बेस नाम।" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "यह टिप्पणी संपादित करना संभव नहीं है।" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "अनुपस्थित टिप्पणी।" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "टिप्पणी रिक्त नहीं होनी चाहिए।" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "टिप्पणी जोड़ी गई।" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "पैकेज जानकारी संपादन हेतु लॉगिन आवश्यक है।" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "अनुपस्थित टिप्पणी आईडी।" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "5 से अधिक कमेंट पिन करना संभव नहीं है।" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "आप इस टिप्पणी को पिन नहीं कर सकते हैं।" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "आप इस टिप्पणी को पिन से नहीं हटा सकते हैं।" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "टिप्पणी पिन की गई।" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "टिप्पणी पिन से हटाई गई।" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "पैकेज विवरण प्राप्त करने हेतु त्रुटि।" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "पैकेज विवरण प्राप्त करने में विफल।" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "अनुचित संदर्भित हैडर।" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "अधिसूचना हेतु कोई पैकेज चयनित नहीं है।" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "चयनित पैकेज हेतु अधिसूचनाएँ सक्रिय हैं।" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "अधिसूचना निष्क्रिय करने हेतु कोई पैकेज चयनित नहीं है।" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "आपके द्वारा चयनित एक पैकेज हेतु अधिसूचनाएँ निष्क्रिय है।" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "चयनित पैकेज हेतु अधिसूचनाएँ हटा दी गई हैं।" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "पैकेज चिन्हित करने हेतु लॉगिन आवश्यक है।" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "चिन्हित करने हेतु कोई पैकेज चयनित नहीं है।" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "चयनित पैकेज अचिन्हित हैं, कृपया टिप्पणी दर्ज करें।" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "चयनित पैकेज पुराने के रूप में चिन्हित हैं।" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "पैकेज अचिन्हित करने हेतु लॉगिन आवश्यक है।" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "अचिन्हित करने हेतु कोई पैकेज चयनित नहीं है।" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "चयनित पैकेज अचिन्हित किए गए।" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "आपके पास पैकेज हटाने हेतु अनुमति नहीं है।" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "हटाने हेतु कोई पैकेज चयनित नहीं है।" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "आपके द्वारा चयनित एक पैकेज अनुपलब्ध है।" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "चयनित पैकेज हटाए गए।" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "पैकेज स्वामित्व प्राप्त करने हेतु लॉगिन आवश्यक है।" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "आपके द्वारा चयनित पैकेज में से एक की स्वामित्व प्राप्ति निषेध है।" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "पैकेज स्वामित्व निरस्त करने हेतु लॉगिन आवश्यक है।" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "आपके द्वारा चयनित पैकेज में से एक का स्वामित्व निरस्त करना निषेध है।" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "स्वामित्व प्राप्त करने हेतु कोई पैकेज चयनित नहीं है।" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "स्वामित्व निरस्त करने हेतु कोई पैकेज चयनित नहीं है।" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "चयनित पैकेज का स्वामित्व प्राप्त किया गया।" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "चयनित पैकेज का स्वामित्व निरस्त किया गया।" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "पैकेज के लिए मतदान करने हेतु लॉगिन आवश्यक है।" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "पैकेज के लिए मतदान वापस लेने हेतु लॉगिन आवश्यक है।" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "मतदान करने हेतु कोई पैकेज चयनित नहीं है।" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "चयनित पैकेज हेतु आपके मत हटाए गए।" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "चयनित पैकेज हेतु आपके मत दर्ज किए गए।" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "अधिसूचना सूची में जोड़ना विफल।" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "आपको %s के लिए टिप्पणियों हेतु अधिसूचना सूची में जोड़ दिया गया है।" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "आपको %s के लिए टिप्पणियों हेतु अधिसूचना सूची में से हटा दिया गया है।" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "आपके पास यह टिप्पणी नहीं हटाने हेतु अनुमति नहीं है।" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "टिप्पणी हटाई नहीं गई।" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "आपके पास यह टिप्पणी हटाने हेतु अनुमति नहीं है।" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "टिप्पणी हटा दी गई।" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "टिप्पणी संपादित की गई।" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "आपके पास इस पैकेज बेस के वर्गीकरण शब्द संपादित करने हेतु अनुमति नहीं है।" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "पैकेज बेस के वर्गीकरण शब्द अपडेट किए गए।" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "आपके पास इस पैकेज बेस के सह-अनुरक्षकों के प्रबंधन हेतु अनुमति नहीं है।" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "अमान्य उपयोक्ता नाम : %s" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "पैकेज बेस के सह-अनुरक्षक अपडेट किए गए।" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "इस हेतु पैकेज विवरण देखें" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "%s आवश्यक है" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "पैकेज अनुरोध करने हेतु लॉगिन आवश्यक है।" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "अमान्य नाम : केवल लोअरकेस अक्षर ही स्वीकार्य हैं।" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "टिप्पणी रिक्त नहीं होनी चाहिए।" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "अमान्य अनुरोध प्रकार।" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "अनुरोध जोड़ना सफल।" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "अमान्य कारण।" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "केवल विश्वसनीय उपयोक्ता व व सॉफ्टवेयर विकासकर्ता ही अनुरोध निरस्त कर सकते हैं।" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "अनुरोध निरस्त करना सफल।" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "यह प्रपत्र उपयोग कर AUR अकाउंट स्थायी रूप से हटाएँ।%s" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "%sचेतावनी%s: यह कार्य पूर्ववत करना संभव नहीं है।" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "हटाने की पुष्टि करें" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "उपयोक्ता नाम" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "अकाउंट प्रकार" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "उपयोक्ता" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "सॉफ्टवेयर विकासकर्ता" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "ईमेल पता" - -#: template/account_details.php -msgid "hidden" -msgstr "अदृश्य" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "वास्तविक नाम" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "होम पृष्ठ" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "आईआरसी उपनाम" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "पीजीपी कुंजी पहचान चिन्ह" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "स्थिति" - -#: template/account_details.php -msgid "Inactive since" -msgstr "तब से निष्क्रिय" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "सक्रिय" - -#: template/account_details.php -msgid "Registration date:" -msgstr "पंजीकरण दिनांक :" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "अज्ञात" - -#: template/account_details.php -msgid "Last Login" -msgstr "अंतिम बार लॉगिन" - -#: template/account_details.php -msgid "Never" -msgstr "कभी नहीं" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "इस उपयोक्ता के पैकेज देखें" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "उपयोक्ता अकाउंट संपादित करें" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "इस उपयोक्ता की टिप्पणियाँ देखें" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "%sयहाँ%s क्लिक कर यह अकाउंट स्थायी रूप से हटाएँ।" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "%sयहाँ%s क्लिक कर उपयोक्ता विवरण देखें।" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "%sयहाँ%s क्लिक कर इस अकाउंट द्वारा की गई टिप्पणियाँ देखें।" - -#: template/account_edit_form.php -msgid "required" -msgstr "आवश्यक है" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "लॉगिन हेतु प्रयुक्त नाम ही उपयोक्ता नाम होता है। अकाउंट निष्क्रिय होने पर भी यह सार्वजनिक रूप से दृश्यमान होगा।" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "सामान्य उपयोक्ता" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "निलंबित अकाउंट" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "निष्क्रिय" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "सुनिश्चित करें कि दर्ज किया गया ईमेल पता उचित है, अन्यथा अभिगम निरस्त हो जाएगी।" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "ईमेल पता छुपाएँ" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "ईमेल पता न छुपाने पर यह सभी पंजीकृत उपयोक्ताओं व छुपाने पर यह केवल आर्च लिनक्स कर्मियों को दृश्यमान होगा।" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "बैकअप ईमेल पता" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "एक वैकल्पिक ईमेल पता भी दर्ज करें ताकि प्राथमिक ईमेल हेतु अभिगम न होने पर भी आप अपना अकाउंट पुनः स्थापित कर सकें।" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "कूटशब्द पुनः सेट करने हेतु लिंक प्राथमिक व बैकअप दोनों पर ईमेल किए जाते हैं।" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "बैकअप ईमेल पता आर्च लिनक्स कर्मियों को सदैव दृश्यमान होता है, यह %s सेटिंग पर निर्भर नहीं है।" - -#: template/account_edit_form.php -msgid "Language" -msgstr "भाषा" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "समयक्षेत्र" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "कूटशब्द बदलने हेतु नया कूटशब्द दर्ज करें व पुनः दर्ज कर उसकी पुष्टि करें।" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "कूटशब्द पुनः दर्ज करें" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "निम्नलिखित जानकारी केवल आर्च उपयोक्ता पैकेज-संग्रह में पैकेज निवेदन करने हेतु ही आवश्यक है।" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "सार्वजनिक एसएसएच कुंजी" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "अधिसूचना सेटिंग्स" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "नवीन टिप्पणी हेतु सूचित करें" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "पैकेज अपडेट हेतु सूचित करें" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "स्वामित्व परिवर्तन हेतु सूचित करें" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "अपना वर्तमान कूटशब्द दर्ज कर, प्रोफाइल परिवर्तनों की पुष्टि करें :" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "वर्तमान कूटशब्द" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "AUR में स्वतः अकाउंट निर्माण रोकने हेतु कृपया नीचे दी गई कमांड का आउटपुट प्रदान करें :" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "उत्तर" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "अपडेट करें" - -#: template/account_edit_form.php -msgid "Create" -msgstr "बनाएँ" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "पुनः सेट करें" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "आपके खोज मानदंड हेतु कोई परिणाम नहीं मिला।" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "अकाउंट संपादित करें" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "निलंबित" - -#: template/account_search_results.php -msgid "Edit" -msgstr "संपादित करें" - -#: template/account_search_results.php -msgid "Less" -msgstr "कम" - -#: template/account_search_results.php -msgid "More" -msgstr "अधिक" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "कोई अन्य परिणाम नहीं है।" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "यह प्रपत्र उपयोग कर %s%s%s हेतु सह-अनुरक्षक जोड़ें (प्रत्येक पंक्ति में एक उपयोक्ता):" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "उपयोक्ता" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "संचित करें" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "पुराने के रूप में चिन्हित करती टिप्पणी : %s" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s द्वारा %s%s%s को निम्नलिखित कारण से %s%s%s को पुराने के रूप में चिन्हित किया गया :" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s पुराने के रूप में चिन्हित नहीं है।" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "विवरण पर वापस जाएँ" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "प्रतिलिप्याधिकार %s 2004-%d aurweb विकासकर्ता टीम।" - -#: template/header.php -msgid " My Account" -msgstr "मेरा अकाउंट" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "पैकेज संबंधी कार्य" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "PKGBUILD देखें" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "बदलाव देखें" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "स्नैपशॉट डाउनलोड" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "विकी में ढूँढें" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "पुराने के रूप में चिन्हित (%s)" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "पैकेज को पुराने के रूप में चिन्हित करें" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "पैकेज अचिन्हित करें" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "मत हटाएँ" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "इस पैकेज को वोट दें" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "अधिसूचनाएँ निष्क्रिय करें" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "अधिसूचनाएँ सक्रिय करें" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "सह-अनुरक्षक प्रबंधन" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "%d शेष अनुरोध" -msgstr[1] "%d शेष अनुरोध" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "पैकेज स्वामित्व लें" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "पैकेज बेस विवरण" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "Git प्रतिरूपण यूआरएल" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "केवल रीड योग्य" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "कॉपी करने हेतु क्लिक करें" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "वर्गीकरण शब्द" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "निवेदक" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "अनुरक्षक" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "अंतिम पैकेज कर्ता" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "मत" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "लोकप्रियता" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "प्रथम बार निवेदित" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "अंतिम बार अपडेट" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "इस हेतु टिप्पणी संपादन : %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "टिप्पणी करें" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "AUR पैकेज-संग्रह व यूआरएल संचय कार्यों की और इंगित करते Git संचय पहचान साधन स्वतः ही लिंक में परिवर्तित कर दिए जाते हैं।" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "%sमार्कडाउन वाक्य-विन्यास%s आंशिक रूप से ही समर्थित है।" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "पिन की गई टिप्पणियाँ" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "नवीनतम टिप्पणियाँ" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "इस हेतु टिप्पणियाँ" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s ने %s को टिप्पणी की" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "अज्ञात ने %s को टिप्पणी की" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "%s पैकेज हेतु %s को टिप्पणी की" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "%s ने %s को हटाया" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "%s को हटाया गया" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "%s द्वारा %s को संपादित" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "%s को संपादित" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "टिप्पणी न हटाएँ" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "टिप्पणी हटाएँ" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "टिप्पणी पिन करें" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "टिप्पणी पिन से हटाएँ" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "पैकेज विवरण" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "पैकेज बेस" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "विवरण" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "स्रोत यूआरएल" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "इस हेतु वेबसाइट देखें" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "लाइसेंस" - -#: template/pkg_details.php -msgid "Groups" -msgstr "समूह" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "इनके विरुद्ध" - -#: template/pkg_details.php -msgid "Provides" -msgstr "प्रदान करता है" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "इनके स्थान पर" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "आश्रित पैकेज" - -#: template/pkg_details.php -msgid "Required by" -msgstr "इन हेतु आवश्यक" - -#: template/pkg_details.php -msgid "Sources" -msgstr "स्रोत" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "यह प्रपत्र उपयोग कर पैकेज बेस %s%s%s हेतु अनुरोध निरस्त करें।" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "टिप्पणी होना आवश्यक है। हालाँकि, अनुरोध निरस्त करने के उपरांत भी टिप्पणी करना आवश्यक है।" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "कारण" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "स्वीकृत" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "अस्वीकृत" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "यह प्रपत्र उपयोग कर पैकेज बेस %s%s%s व उसमें सम्मिलित निम्नलिखित पैकेज के विरुद्ध हेतु अनुरोध करें :" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "अनुरोध प्रकार" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "हटाना" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "निरर्थक पैकेज" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "इसमें विलय करें" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "आपके खोज मानदंड हेतु कोई अनुरोध नहीं मिला।" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "%d पैकेज अनुरोध मिला।" -msgstr[1] "%d पैकेज अनुरोध मिले।" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "%d का %d पृष्ठ।" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "पैकेज" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "इन द्वारा निवेदित" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "दिनांक" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d दिन शेष" -msgstr[1] "~%d दिन शेष" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "~%d घंटा शेष" -msgstr[1] "~%d घंटे शेष" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "<1 घंटा शेष" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "स्वीकारें" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "लॉक है" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "निरस्त" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "शेष" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "निरस्त है" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "नाम, विवरण" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "केवल नाम" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "सटीक नाम" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "सटीक पैकेज बेस" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "सह-अनुरक्षक" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "अनुरक्षक, सह-अनुरक्षक" - -#: template/pkg_search_form.php -msgid "All" -msgstr "सभी" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "चिन्हित" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "अचिन्हित" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "नाम" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "मतदान किया गया" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "अंतिम बार परिवर्तन" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "आरोह" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "अवरोह" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "खोज मानदंड दर्ज करें" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "खोज हेतु मापदंड" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "पुराने" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "अनुक्रमण" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "क्रम" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "प्रति पृष्ठ" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "खोजें" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "निरर्थक पैकेज" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "पैकेज सूची प्राप्त करने हेतु त्रुटि।" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "आपके खोज मानदंड हेतु कोई पैकेज नहीं मिला।" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "%d पैकेज मिले।" -msgstr[1] "%d पैकेज मिले।" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "संस्करण" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "पैकेज लोकप्रियता की गणना उसके निर्माण उपरांत प्रति दिन से %.2f कारक युक्त प्रत्येक मत के साथ सभी मतों के योग के रूप में की जाती है।" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "हाँ" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "निरर्थक पैकेज" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "कार्य" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "पुराने के रूप में अचिन्हित करें" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "पैकेज स्वामित्व लें" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "पैकेज स्वामित्व निरस्त करें" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "पैकेज हटाएँ" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "पुष्टि करें" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "कोई भी प्रकार" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "खोजें" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "आँकड़ें" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "निरर्थक पैकेज" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "पिछले 7 दिनों में जोड़ें गए पैकेज" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "पिछले 7 दिनों में अपडेट हुए पैकेज" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "पिछले वर्ष में अपडेट हुए पैकेज" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "कभी अपडेट नहीं हुए पैकेज" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "पंजीकृत उपयोक्ता" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "हालिया अपडेट" - -#: template/stats/updates_table.php -msgid "more" -msgstr "अधिक" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "मेरे आँकड़ें" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "प्रस्ताव विवरण" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "मतदान प्रक्रिया चालू है।" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "निवेदित : %s द्वारा %s" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "अंत" - -#: template/tu_details.php -msgid "Result" -msgstr "परिणाम" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "नहीं" - -#: template/tu_details.php -msgid "Abstain" -msgstr "वोट न करें" - -#: template/tu_details.php -msgid "Total" -msgstr "कुल" - -#: template/tu_details.php -msgid "Participation" -msgstr "भाग लिया" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "विश्वसनीय उपयोक्ताओं द्वारा अंतिम मत" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "अंतिम मत" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "कोई परिणाम नहीं मिला।" - -#: template/tu_list.php -msgid "Start" -msgstr "आरंभ" - -#: template/tu_list.php -msgid "Back" -msgstr "वापस" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "AUR कूटशब्द पुनः सेट करें" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "आपके ईमेल पते से संबंधित अकाउंट {user} हेतु कूटशब्द पुनः सेट करने हेतु अनुरोध किया गया है। यदि आप कूटशब्द पुनः सेट करना चाहते हैं तो नीचे दिया लिंक [1] उपयोग करें, अन्यथा इस संदेश को अनदेखा करें।" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "आर्च उपयोक्ता पैकेज-संग्रह में स्वागत है" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "आर्च उपयोक्ता पैकेज-संग्रह में स्वागत है! नवीन अकाउंट हेतु आरंभिक कूटशब्द सेट करने हेतु, नीचे दिया लिंक [1] उपयोग करें। लिंक उपयोग में समस्या होने पर इस लिंक को कॉपी कर ब्राउज़र में पेस्ट करें।" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "{pkgbase} हेतु AUR टिप्पणी" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] द्वारा {pkgbase} [2] में निम्नलिखित टिप्पणी में जोड़ी गई :" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "यदि आप इस पैकेज संबंधी अधिसूचना प्राप्त नहीं करना चाहते हैं तो पैकेज पृष्ठ [2] पर जाकर \"{label}\" चुनें।" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "AUR पैकेज अपडेट : {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] द्वारा {pkgbase} [2] में निम्नलिखित संचित कार्य किया गया :" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "{pkgbase} के पुराना होने की AUR अधिसूचना" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "{user} [2] द्वारा आपका पैकेज {pkgbase} [1] पुराने के रूप में चिन्हित किया गया है :" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "{pkgbase} हेतु स्वामित्व की AUR अधिसूचना" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "{user} [2] द्वारा पैकेज {pkgbase} [1] का स्वामित्व लिया गया।" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "{user} [2] द्वारा पैकेज {pkgbase} [1] का स्वामित्व निरस्त किया गया।" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "{pkgbase} हेतु सह-अनुरक्षक की AUR अधिसूचना" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "आपको {pkgbase} [1] की सह-अनुरक्षक सूची में जोड़ा गया।" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "आपको {pkgbase} [1] की सह-अनुरक्षक सूची से हटाया गया।" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "AUR पैकेज हटाया गया : {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] द्वारा {old} [2] का {new} [3] में विलय।\n\n-- \nयदि आप इस नवीन पैकेज संबंधी अधिसूचना प्राप्त नहीं करना चाहते हैं तो [3] पर जाकर \"{label}\" पर क्लिक करें।" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] द्वारा {pkgbase} [2] हटाया गया।\n\nआपको इस पैकेज संबंधी कोई अधिसूचना प्राप्त नहीं होंगी।" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "प्रस्ताव {id} [1] हेतु अवश्य मतदान करें। मतदान प्रक्रिया 48 घंटे में समाप्त होगी।" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "प्रदान किया गया अकाउंट प्रकार अमान्य है।" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "आपके पास अकाउंट प्रकार में परिवर्तन हेतु अनुमति नहीं है।" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "आपके पास इस उपयोक्ता के अकाउंट प्रकार को %s में परिवर्तित करने हेतु अनुमति नहीं है।" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "%s स्वीकारनें हेतु कोई निरर्थक पैकेज अनुरोध शेष नहीं है।" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "आंतरिक सर्वर त्रुटि" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "गंभीर त्रुटि हुई।" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "संबंधित सूचना लॉग फाइल में दर्ज की जा चुकी है एवं अतिशीघ्र ही पोस्ट प्रबंधक द्वारा उसकी समीक्षा की जाएगी। इस कारण हुई किसी भी प्रकार की असुविधा हेतु खेद है।" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "AUR सर्वर त्रुटि" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "पैकेज अनुरोध समापन संबंधी टिप्पणियाँ..." - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "इस कार्य द्वारा संबंधित सभी लंबित पैकेज अनुरोध बंद हो जाएँगे। %sटिप्पणियाँ%s न होने की स्थिति में एक समापन टिप्पणी का स्वतः ही सृजन होगा।" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/hr.po b/po/hr.po index 931d6fa5..4adabae9 100644 --- a/po/hr.po +++ b/po/hr.po @@ -1,891 +1,566 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: # Lukas Fleischer , 2011 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Lukas Fleischer , 2011\n" -"Language-Team: Croatian (http://app.transifex.com/lfleischer/aurweb/language/hr/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Croatian (http://www.transifex.com/projects/p/aur/language/" +"hr/)\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: html/404.php msgid "Page Not Found" msgstr "" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "" -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php msgid "Service Unavailable" msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." msgstr "" -#: html/account.php msgid "Account" msgstr "" -#: html/account.php template/header.php msgid "Accounts" msgstr "Računi" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Nije vam dozvoljen pristup ovom području." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Nije moguće naći informacije o zadanom korisniku." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Nemate ovlasti da bi mjenjali ovaj račun." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Koristite ovaj formular za pretraživanj postoječih računa." -#: html/account.php msgid "You must log in to view user information." msgstr "Morate se logirati kako bi pregledali informacije o korisniku." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Koristite ovaj formular za kreiranje računa." + msgid "Add Proposal" msgstr "" -#: html/addvote.php msgid "Invalid token for user action." msgstr "" -#: html/addvote.php msgid "Username does not exist." msgstr "Korisničko ime ne postoji." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s već ima prijedlog." -#: html/addvote.php msgid "Invalid type." msgstr "" -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Prijedlog nemože biti prazan." -#: html/addvote.php msgid "New proposal submitted." msgstr "Novi prijedlog je poslan." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Pošalji prijedlog za glasanje." -#: html/addvote.php msgid "Applicant/TU" msgstr "" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(prazno ako nije prikladno)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Tip" -#: html/addvote.php -msgid "Addition of a Package Maintainer" +msgid "Addition of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer" +msgid "Removal of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" +msgid "Removal of a TU (undeclared inactivity)" msgstr "" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Prijedlog" -#: html/addvote.php msgid "Submit" msgstr "Pošalji" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php msgid "Home" msgstr "Početna" -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "Moji paketi" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" msgstr "" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." +msgid "Some packages may be provided as binaries in [community]." msgstr "" -#: html/home.php msgid "DISCLAIMER" msgstr "" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." msgstr "" -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php msgid "Support" msgstr "" -#: html/home.php msgid "Package Requests" msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" msgstr "" -#: html/home.php msgid "Orphan Request" msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." msgstr "" -#: html/home.php msgid "Deletion Request" msgstr "" -#: html/home.php msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." msgstr "" -#: html/home.php msgid "Merge Request" msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php msgid "Discussion" msgstr "Rasprava" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "" -#: html/index.php msgid "Adopt" msgstr "" -#: html/index.php msgid "Vote" msgstr "Glasaj" -#: html/index.php msgid "UnVote" msgstr "Makni glas" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Obavijesti" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Ne obavještavaj" -#: html/index.php +msgid "Flag" +msgstr "" + msgid "UnFlag" msgstr "" -#: html/login.php template/header.php msgid "Login" msgstr "Login" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Logirani ste kao: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Logout" -#: html/login.php msgid "Enter login credentials" msgstr "" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "Korisničko ime" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Lozinka" -#: html/login.php msgid "Remember me" msgstr "Zapamti me" -#: html/login.php msgid "Forgot Password" msgstr "" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." msgstr "" -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Kriteriji traženja" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Paketi" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Došlo je do greške prilikom dobivanja detalja o paketu." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Nedostaje Vam obvezno polje." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Lozinke nisu jednake." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Lozinka mora sadržavati najmanje %s znakova." -#: html/passreset.php msgid "Invalid e-mail." msgstr "" -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "" -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "" -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" +msgid "Confirm your e-mail address:" msgstr "" -#: html/passreset.php msgid "Enter your new password:" msgstr "" -#: html/passreset.php msgid "Confirm your new password:" msgstr "" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" +msgid "Enter your e-mail address:" msgstr "" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "" -#: html/pkgdel.php msgid "Package Deletion" msgstr "" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" +#, php-format +msgid "Delete Package: %s" msgstr "" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " msgstr "" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "" -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "" -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." +msgid "Only Trusted Users and Developers can delete packages." msgstr "" -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php msgid "Package Merging" msgstr "" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" +#, php-format +msgid "Merge Package: %s" msgstr "" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "" -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "" -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "" -#: html/pkgmerge.php msgid "Merge into:" msgstr "" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." msgstr "" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" +msgid "File Request" msgstr "" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Sljedeći" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "" -#: html/register.php template/header.php -msgid "Register" -msgstr "" +msgid "Trusted User" +msgstr "Pouzdan korisnik" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Koristite ovaj formular za kreiranje računa." - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Nemogu pronaći detalje o prijedlogu." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Glasanje je zaključeno za ovaj prijedlog" -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." +msgid "Only Trusted Users are allowed to vote." msgstr "" -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Nemožete glasati o prijedlogu koji se tiće Vas." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Već ste glasali za ovaj prijedlog." -#: html/tu.php msgid "Vote ID not valid." msgstr "ID glasa je neispravan." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Trenutno glasova" -#: html/tu.php msgid "Past Votes" msgstr "" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." msgstr "" -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Nedostaje ID korisnika" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Korisničko ime je neispravno." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Mora biti najmanje %s a najviše %s znakova" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Zapični i završi sa slovom ili brojkom" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Može sadržavati samo jednu točku, donju crticu ili povlaku." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "Email adresa je neispravna." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "" -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "" -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Jezik trenutno nije podržan." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "" -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "" -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "" -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." msgstr "" -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " @@ -893,694 +568,344 @@ msgid "" "please request a reset key on the %sPassword Reset%s page." msgstr "" -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "" -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "" -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "" -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Komentar je dodan." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Morate biti logirani da biste mogli mijenjati informacije o paketu." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Nedostaje ID komentara." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Došlo je do greške prilikom preuzimanja detalja o paketu." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Nije moguće naći detalje o paketu." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Morate se logirati da bi obilježavali pakete." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Niste odabrali pakete koje želite obilježiti." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Odabrani paketi su obilježeni kao zastarijeli." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Morate se logirati da bi mogli obilježiti pakete kao ažurirane." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Niste odabrali pakete koje želite obilježiti kao ažurirane." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Odabrani paketu su postavljeni kao ažurirani." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Niste odabrali pakete koje želite izbrisati." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Odabrani paketi su izbrisani." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Morate se logirati da bi posvojili pakete." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Morate se logirati da bi se mogli odreknuti paketa." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Niste odabrali pakete koje želite posvojiti." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Niste odabrali pakete kojih se želite odreči." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Posvojili ste odabrane pakete." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Odrekli ste se odabranih paketa." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Morate se logirati da bi glasali za pakete." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Morate se logirati da bi mogli maknuti svoje glasove s paketa." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Niste odabrali pakete za koje želite glasati." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Vaši su glasovi maknuti s odabranih paketa." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Glasovi su dodijeljeni odabranim paketima." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Nemogu dodati u listu za obavještavanje." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Dodani ste u listu za obavještavanje o novim komentarima za %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Niste više na listi za obavježtavanje o novim komentarima za %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" +msgid "You must be logged in before you can edit package information." +msgstr "Morate biti logirani da biste mogli mijenjati informacije o paketu." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" +msgid "Missing comment ID." +msgstr "Nedostaje ID komentara." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Brisanje ovog komentara Vam nije dozvoljeno." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Komentar je izbrisan." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." +msgid "You are not allowed to delete this comment." +msgstr "Brisanje ovog komentara Vam nije dozvoljeno." + +msgid "Missing category ID." msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." +msgid "Invalid category ID." +msgstr "Neispravan ID kategorije." + +msgid "You are not allowed to change this package category." msgstr "" -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." +msgid "Package category changed." msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Neispravno ime: Dozvoljena su samo mala slova (kurenti)." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "" -#: template/account_delete.php msgid "Confirm deletion" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Korisničko ime" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Tip računa" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Korisnik" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Developer" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" +msgid "Trusted User & Developer" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Email adresa" -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Vaše stvarno ime" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Nadimak na IRC-u" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Stanje" -#: template/account_details.php msgid "Inactive since" msgstr "" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Aktivan" -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "nepoznato" - -#: template/account_details.php msgid "Last Login" msgstr "" -#: template/account_details.php msgid "Never" msgstr "Nikad" -#: template/account_details.php msgid "View this user's packages" msgstr "Pregledaj pakete ovog korisnika" -#: template/account_details.php msgid "Edit this user's account" msgstr "" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "obvezno" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Običan korisnik" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Pouzdan korisnik" + msgid "Account Suspended" msgstr "Račun je suspendiran" -#: template/account_edit_form.php msgid "Inactive" msgstr "" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Jezik" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Ponovno upišite lozinku" -#: template/account_edit_form.php +msgid "Language" +msgstr "Jezik" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Ažuriraj" -#: template/account_edit_form.php msgid "Create" msgstr "Kreiraj" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Resetiraj" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Nema rezultata pretrage." -#: template/account_search_results.php msgid "Edit Account" msgstr "Podesi račun" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspendiran" -#: template/account_search_results.php msgid "Edit" msgstr "" -#: template/account_search_results.php msgid "Less" msgstr "Manje" -#: template/account_search_results.php msgid "More" msgstr "Više" -#: template/account_search_results.php msgid "No more results to display." msgstr "Nema više rezultata za prikaz." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" msgstr "" -#: template/comaintainers_form.php msgid "Users" msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" +msgid "My Packages" +msgstr "Moji paketi" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php msgid " My Account" msgstr "" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "" + +msgid "unknown" +msgstr "nepoznato" + +msgid "Package Base Details" +msgstr "" + msgid "Package Actions" msgstr "" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" +msgid "Flagged out-of-date" msgstr "" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" +msgid "Notify of new comments" msgstr "" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" @@ -1588,274 +913,163 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "" + +msgid "Merge Package" +msgstr "" + msgid "Adopt Package" msgstr "" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" +msgid "Category" +msgstr "Kategorija" + +msgid "Change category" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "" + msgid "Maintainer" msgstr "Održavatelj" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Glasovi" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Prvi put poslan" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Posljednji put ažuriran" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." +msgid "Comment has been added." +msgstr "Komentar je dodan." + +msgid "View all comments" msgstr "" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Briši komentar" -#: template/pkg_comments.php -msgid "Pin comment" +#, php-format +msgid "Comment by %s" msgstr "" -#: template/pkg_comments.php -msgid "Unpin comment" +msgid "Anonymous comment" +msgstr "" + +msgid "deleted" +msgstr "" + +msgid "All comments" msgstr "" -#: template/pkg_details.php msgid "Package Details" msgstr "Detalji o paketu" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Opis" -#: template/pkg_details.php msgid "Upstream URL" msgstr "" -#: template/pkg_details.php msgid "Visit the website for" msgstr "" -#: template/pkg_details.php msgid "Licenses" msgstr "" -#: template/pkg_details.php msgid "Groups" msgstr "" -#: template/pkg_details.php msgid "Conflicts" msgstr "" -#: template/pkg_details.php msgid "Provides" msgstr "" -#: template/pkg_details.php msgid "Replaces" msgstr "" -#: template/pkg_details.php msgid "Dependencies" msgstr "Ovisi o" -#: template/pkg_details.php msgid "Required by" msgstr "Potreban za" -#: template/pkg_details.php msgid "Sources" msgstr "Izvor" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "" + #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "" -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." msgstr "" -#: template/pkgreq_close_form.php msgid "Reason" msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "" + +#, php-format +msgid "File Request: %s" +msgstr "" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" msgstr "" -#: template/pkgreq_form.php msgid "Request type" msgstr "" -#: template/pkgreq_form.php msgid "Deletion" msgstr "" -#: template/pkgreq_form.php msgid "Orphan" msgstr "" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." @@ -1863,32 +1077,23 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "" -#: template/pkgreq_results.php msgid "Package" msgstr "" -#: template/pkgreq_results.php msgid "Filed by" msgstr "" -#: template/pkgreq_results.php msgid "Date" msgstr "" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgid "~%d days left" +msgstr "" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" @@ -1896,128 +1101,96 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "" -#: template/pkgreq_results.php msgid "Accept" msgstr "" -#: template/pkgreq_results.php msgid "Locked" msgstr "" -#: template/pkgreq_results.php msgid "Close" msgstr "" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php msgid "Closed" msgstr "" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "" -#: template/pkg_search_form.php msgid "Name Only" msgstr "" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php msgid "All" msgstr "" -#: template/pkg_search_form.php msgid "Flagged" msgstr "" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Ime" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Glasao" -#: template/pkg_search_form.php -msgid "Last modified" +msgid "Age" msgstr "" -#: template/pkg_search_form.php msgid "Ascending" msgstr "" -#: template/pkg_search_form.php msgid "Descending" msgstr "" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Bilo koji" + msgid "Search by" msgstr "Traži po" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "" + msgid "Out of Date" msgstr "Zastario" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Sortiraj po" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Način sortiranja" -#: template/pkg_search_form.php msgid "Per page" msgstr "Po stranici" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Traži" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Napušteni" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Došlo je do greške prilikom stvaranja liste paketa." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Nijedan paket ne odgovara kriterijima traženja." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." @@ -2025,356 +1198,114 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: template/pkg_search_results.php msgid "Version" msgstr "" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Da" -#: template/pkg_search_results.php msgid "orphan" msgstr "napušten" -#: template/pkg_search_results.php msgid "Actions" msgstr "Radnje" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Obilježi kao zastario" + msgid "Unflag Out-of-date" msgstr "Obilježi kao ažuriran" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Posvoji paket" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Odrekni se paketa" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Izbriši pakete" -#: template/pkg_search_results.php msgid "Confirm" msgstr "" -#: template/search_accounts_form.php msgid "Any type" msgstr "Bilo koji tip" -#: template/search_accounts_form.php msgid "Search" msgstr "Traži" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" +msgid "Trusted Users" msgstr "" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "" -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "" + msgid "Proposal Details" msgstr "Detalji prijedloga" -#: template/tu_details.php msgid "This vote is still running." msgstr "Ovaj glas još vrijedi." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Poslan: %s od %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Kraj" -#: template/tu_details.php msgid "Result" msgstr "" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Ne" -#: template/tu_details.php msgid "Abstain" msgstr "Suzdržan" -#: template/tu_details.php msgid "Total" msgstr "Ukupno" -#: template/tu_details.php msgid "Participation" msgstr "" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Nema rezultata." -#: template/tu_list.php msgid "Start" msgstr "Početak" -#: template/tu_list.php msgid "Back" msgstr "Natrag" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/hu.po b/po/hu.po index 8745b58f..9f5788fd 100644 --- a/po/hu.po +++ b/po/hu.po @@ -1,2379 +1,1347 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Balló György , 2013 -# Balló György , 2011,2013-2016 -# Balló György , 2016 +# György Balló , 2013 +# György Balló , 2011,2013-2014 # Lukas Fleischer , 2011 -# PB, 2020 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: PB, 2020\n" -"Language-Team: Hungarian (http://app.transifex.com/lfleischer/aurweb/language/hu/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Hungarian (http://www.transifex.com/projects/p/aur/language/" +"hu/)\n" +"Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Az oldal nem található" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Sajnálom, a megtekinteni kívánt oldal nem létezik." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Megjegyzés" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "A Git tároló klónozásához használatos hivatkozásokat nem böngészővel kell megnyitni." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "A(z) %s Git tárolójának klónozásához futtasd a következőt: %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Kattints %side%s a(z) %s adatlapjának megnyitásához." - -#: html/503.php msgid "Service Unavailable" -msgstr "Szolgáltatás nem elérhető" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Nyugalom! Ez a webhely karbantartás miatt nem üzemel. Hamarosan visszajövünk." +msgstr "" -#: html/account.php msgid "Account" msgstr "Fiók" -#: html/account.php template/header.php msgid "Accounts" msgstr "Fiókok" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Nincs engedélyed hozzáférni ehhez a területhez." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Nem sikerült letölteni a megadott felhasználó információit." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Nincs engedélyed ennek a fióknak a szerkesztéséhez." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Érvénytelen jelszó." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Már meglévő felhasználói fiókok kereséséhez használd ezt az űrlapot." -#: html/account.php msgid "You must log in to view user information." msgstr "A felhasználói információ megtekintéshez be kell jelentkezned." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Használd ezt a űrlapot felhasználói fiók létrehozására." + msgid "Add Proposal" msgstr "Indítvány hozzáadása" -#: html/addvote.php msgid "Invalid token for user action." msgstr "A token érvénytelen a felhasználói művelethez." -#: html/addvote.php msgid "Username does not exist." msgstr "Ez a felhasználói név nem létezik." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s már megpályázta őket." -#: html/addvote.php msgid "Invalid type." msgstr "Érvénytelen típus." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Az indítvány nem lehet üres." -#: html/addvote.php msgid "New proposal submitted." msgstr "Új indítvány benyújtva." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Indítvány szavazásra bocsátása." -#: html/addvote.php msgid "Applicant/TU" msgstr "Jelölt/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(üres, ha nem alkalmazható)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Típus" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "TU hozzáadása" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "TU eltávolítása" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "TU eltávolítása (be nem jelentett inaktivitás)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Szabályzat módosítása" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Indítvány" -#: html/addvote.php msgid "Submit" msgstr "Feltöltés" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Társkarbantartók kezelése" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Hozzászólás szerkesztése" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Vezérlőpult" - -#: html/home.php template/header.php msgid "Home" msgstr "Honlap" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Elavultnak jelölt csomagjaim" - -#: html/home.php -msgid "My Requests" -msgstr "Kérelmeim" - -#: html/home.php -msgid "My Packages" -msgstr "Csomagjaim" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Csomagok keresése, amelyeknek karbantartója vagyok" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Csomagok, amelyeknek társkarbantartója vagyok" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Csomagok keresése, amelyeknek társkarbantartója vagyok" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Üdvözlünk az AUR-ban! További információért olvasd el az %sAUR felhasználói " +"irányelveket%s és az %sAUR TU irányelveket%s." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "A beküldött PKGBUILD-eknek meg %skell%s felelniük az %sArch csomagolási szabályoknak%s, különben törlésre kerülnek!" +msgstr "" +"A beküldött PKGBUILD-eknek meg %skell%s felelniük az %sArch csomagolási " +"szabályoknak%s, különben törlésre kerülnek!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Ne felejts el szavazni kedvenc csomagjaidra!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Néhány csomagot lehet, hogy a [extra] binárisként szolgáltat." +msgid "Some packages may be provided as binaries in [community]." +msgstr "Néhány csomagot lehet, hogy a [community] binárisként szolgáltat." -#: html/home.php msgid "DISCLAIMER" msgstr "NYILATKOZAT" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Az AUR csomagok felhasználók által készített tartalmak. A szolgáltatott fájlok használata csak saját felelősségre." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"A nem támogatott csomagok felhasználók által készített tartalmak. A " +"szolgáltatott fájlok bármilyen felhasználása csak saját felelősségre " +"történik." -#: html/home.php -msgid "Learn more..." -msgstr "Tudj meg többet..." - -#: html/home.php msgid "Support" -msgstr "Támogatás" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Csomagkérelmek" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Háromfajta kérelem tölthető ki a %sCsomagműveletek%s dobozban a csomag részletei oldalon:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Megtagadási kérelem" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Egy csomag megtagadásának kérése, pl. amikor a karbantartó inaktív, és a csomag régóta elavultnak lett jelölve." - -#: html/home.php -msgid "Deletion Request" -msgstr "Törlési kérelem" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Beolvasztási kérelem" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Egy csomag másik csomagba történő beolvasztásának kérése. Akkor használható, amikor egy csomagot át kell nevezni, vagy lecserélésre kerül egy osztott csomagra." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Ha meg szeretnél tárgyalni egy kérelmet, használd az %saur-requests%s levelezőlistát. Azonban ne használd ezt a listát kérvények beadására." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Csomagok beküldése" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Jelenleg SSH-n keresztüli Git használandó a csomagok beküldéséhez az AUR-ba. További részletekért lásd a %sCsomagok beküldése%s szakaszt az Arch User Repository ArchWiki oldalon." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Az alábbi SSH ujjlenyomatokat használjuk az AUR-hoz:" - -#: html/home.php msgid "Discussion" msgstr "Megbeszélés" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Hibajelentés" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Csomag keresése" -#: html/index.php msgid "Adopt" msgstr "Örökbe fogadás" -#: html/index.php msgid "Vote" msgstr "Szavazás" -#: html/index.php msgid "UnVote" msgstr "Szavazat visszavonása" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Értesítés" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Értesítés kikapcsolása" -#: html/index.php +msgid "Flag" +msgstr "Megjelölés" + msgid "UnFlag" msgstr "Megjelölés visszavonása" -#: html/login.php template/header.php msgid "Login" msgstr "Bejelentkezés" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Bejelentkezve mint: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Kijelentkezés" -#: html/login.php msgid "Enter login credentials" msgstr "Bejelentkezési adatok megadása" -#: html/login.php -msgid "User name or primary email address" -msgstr "Felhasználónév vagy elsődleges email cím" +msgid "Username" +msgstr "Felhasználónév" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Jelszó" -#: html/login.php msgid "Remember me" msgstr "Maradjak bejelentkezve" -#: html/login.php msgid "Forgot Password" msgstr "Elfelejtett jelszó" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "A HTTP bejelentkezés letiltásra került. Ha be szeretnél jelentkezni, akkor kérünk, hogy %sválts át HTTPs-re%s." +msgstr "" +"A HTTP bejelentkezés letiltásra került. Ha be szeretnél jelentkezni, akkor " +"kérünk, hogy %sválts át HTTPs-re%s." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Keresési feltételek" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Csomagok" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Hiba történt a csomag részletes információinak letöltése közben." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Egy kötelező mező megadása hiányzik." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "A jelszó mezők nem egyeznek." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "A jelszónak legalább %s karakter hosszúságúnak kell lennie." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Érvénytelen e-mail." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Jelszó visszaállítása" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Ellenőrizd az e-mailjeidet a megerősítő hivatkozáshoz." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Jelszavad sikeresen visszaállításra került." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Erősítsd meg a felhasználóneved vagy elsődleges email címed:" +msgid "Confirm your e-mail address:" +msgstr "Erősíts meg az e-mail címedet:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Add meg az új jelszavad:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Erősítsd meg az új jelszavad:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Folytatás" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Ha elfelejtetted a felhasználóneved és az elsődleges email címed, akkor kérlek küldj üzenetet az %saur-general%s levelezőlistára." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Ha elfelejtetted az e-mail címet, amit a regisztrációhoz használtál, akkor " +"küldj egy üzenetet az %saur-general%s levelezőlistára." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Add meg a felhasználóneved vagy elsődleges email címed:" +msgid "Enter your e-mail address:" +msgstr "Add meg az e-mail címedet:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Alapcsomagok" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "A kiválasztott csomagok nem kerültek megtagadásra, ellenőrizd a megerősítő jelölőnégyzetet." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Nem található csomag, amelybe a szavazatok és hozzászólások beolvaszthatók lennének." +msgstr "" +"Nem található csomag, amelybe a szavazatok és megjegyzések beolvaszthatók " +"lennének." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Egy alapcsomag nem olvasztható önmagába." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "A kiválasztott csomagok nem kerültek törlésre, ellenőrizd a megerősítő jelölőnégyzetet." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"A kiválasztott csomagok nem kerültek törlésre, ellenőrizd a megerősítő " +"jelölőnégyzetet." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Csomag törlése" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Csomag törlése" +#, php-format +msgid "Delete Package: %s" +msgstr "Csomag törlése: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Használd ezt az űrlapot a(z) %s%s%s alapcsomag és az alábbi csomagok törléséhez az AUR-ból:" +msgstr "" +"Használd ezt az űrlapot a(z) %s%s%s alapcsomag és az alábbi csomagok " +"törléséhez az AUR-ból:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Egy csomag törlése végleges. " -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "A művelet megerősítéséhez jelöld be a jelölőnégyzetet." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Csomag törlésének megerősítése" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Törlés" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Csak megbízható felhasználók és fejlesztők tudnak csomagokat törölni." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Csomag megtagadása" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Használd ezt az űrlapot a(z) %s%s%s alapcsomag megtagadásához, amely a következő csomagokat tartalmazza:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "A jelölőnégyzet megjelölésével megerősíted, hogy nem akarsz társkarbantartó lenni." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "A jelölőnégyzet kiválasztásával megerősíted, hogy szeretnéd megtagadni a csomagot, és átadni a tulajdonjogot neki: %s%s%s." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "A jelölőnégyzet kiválasztásával megerősíted, hogy szeretnéd megtagadni a csomagot." +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "Csomag megtagadásának megerősítése." +msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "Megtagadás" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Hozzászólás jelölése" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Csomag elvaultnak jelölése" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Használd ezt az űrlapot annak jelzésére, hogy a(z) %s%s%s alapcsomag és a következő csomagok elavultak:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Kérünk, %sne%s használd ezt az űrlapot hibák jelentéséhez. Használd a csomaghozzászólásokat helyette." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Add meg alább a részleteit, hogy miért avult el a csomag, lehetőleg hivatkozásokkal a kiadási közleményre vagy az új kiadás tarballjára." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Hozzászólások" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Megjelölés" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Csak regisztrált felhasználók jelölhetnek csomagokat elavultnak." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Csomag beolvasztása" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Csomag beolvasztása" +#, php-format +msgid "Merge Package: %s" +msgstr "Csomag beolvasztása: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Használd ezt az űrlapot a(z) %s%s%s alapcsomag másik csomagba történő beolvasztásához." +msgstr "" +"Használd ezt az űrlapot a(z) %s%s%s alapcsomag másik csomagba történő " +"beolvasztásához." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "A következő csomagok törlésre kerülnek:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " -msgstr "Ha egyszer egy csomag beolvasztásra került, többé nem lehet visszaállítani. " +msgstr "" +"Ha egyszer egy csomag beolvasztásra került, többé nem lehet visszaállítani. " -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Add meg a csomag nevét, amibe szeretnéd beolvasztani a csomagot." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Beolvasztás ebbe:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Csomag beolvasztásának megerősítése" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Beolvasztás" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." +msgid "Only Trusted Users and Developers can merge packages." msgstr "" +"Csak megbízható felhasználók és fejlesztők tudnak csomagokat beolvasztani." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Kérelem beküldése" +msgid "File Request" +msgstr "Kérelem beadása" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Kérelem lezárása" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Első" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Előző" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Következő" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Utolsó" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Kérelmek" -#: html/register.php template/header.php -msgid "Register" -msgstr "Regisztráció" +msgid "Trusted User" +msgstr "Megbízható felhasználó" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Használd ezt a űrlapot felhasználói fiók létrehozására." - -#: html/tos.php -msgid "Terms of Service" -msgstr "A szolgáltatás feltételei" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "A következő dokumentumok frissítésre kerültek. Kérlek nézd át őket alaposan:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "revízió %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Elfogadom a feljebb megadott feltételeket." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Nem sikerült az indítvány részletes információinak letöltése." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "A szavazás lezárult erre az indítványra." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "A szavazás csak megbízható felhasználóknak engedélyezett." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Nem szavazhatsz egy rólad szóló indítványra." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Már szavaztál erre az indítványra." -#: html/tu.php msgid "Vote ID not valid." msgstr "Érvénytelen szavazatazonosító." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Jelenlegi szavazatok" -#: html/tu.php msgid "Past Votes" msgstr "Korábbi szavazatok" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Szavazók" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "A felhasználói regisztráció jelenleg letiltásra került az IP címedre, valószínűleg rendszeres spam támadások miatt. Elnézést a kellemetlenségért." +msgstr "" +"A felhasználói regisztráció jelenleg letiltásra került az IP címedre, " +"valószínűleg rendszeres spam támadások miatt. Elnézést a kellemetlenségért." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Hiányzó felhasználóazonosító" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "A felhasználónév érvénytelen." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "%s és %s közötti karakterhosszúságúnak kell lennie" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Betűvel vagy számjeggyel kezdődjön és végződjön" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Csak egyetlen pontot, aláhúzást vagy kötőjelet tartalmazhat." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Kérlek erősítsd meg az új jelszavad." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "Érvénytelen e-mail cím." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "A másodlagos email cím érvénytelen." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "A főoldal érvénytelen, kérlek add meg a teljes HTTP(s) URL-t." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "A PGP kulcs ujjlenyomata érvénytelen." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "A nyilvános SSH kulcs érvénytelen." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Nem lehet megnövelni a fiók jogosultságait." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "A nyelv jelenleg nem támogatott." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Az időzóna jelenleg nem támogatott." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "A(z) %s%s%s felhasználónév már használatban van." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "A(z) %s%s%s cím már használatban van." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "A(z) %s%s%s nyilvános SSH kulcs már használatban van." +msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "Hiányzó CAPTCHA." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "A CAPTCHA lejárt. Kérlek próbáld újra." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "A megadott CAPTCHA érvénytelen." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Hiba történt a(z) %s%s%s fiók létrehozása során." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "A(z) %s%s%s fiók sikeresen létrejött." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Egy jelszó-visszaállító kulcs kiküldésre került az e-mail címedre." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "A fiókod használatához kattints a Bejelentkezés hivatkozásra feljebb." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Köszöntünk az %s-ban! Fiókodhoz tartozó kezdeti jelszó beállításához " +"kattints az alábbi hivatkozásra. Ha nem működik a hivatkozás, akkor próbáld " +"kimásolni és beilleszteni a böngészőbe." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "Egy jelszó-visszaállító kulcs kiküldésre került az e-mail címedre." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "A(z) %s%s%s fiók nem módosult." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "A(z) %s%s%s fiók sikeresen módosítva." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "A bejelentkező űrlap jelenleg letiltásra került az IP címedre, valószínűleg rendszeres spam támadások miatt. Elnézést a kellemetlenségért." +msgstr "" +"A bejelentkező űrlap jelenleg letiltásra került az IP címedre, valószínűleg " +"rendszeres spam támadások miatt. Elnézést a kellemetlenségért." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Fiók felfüggesztve" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "A jelszavad visszaállításra került. Ha most regisztráltál, akkor a megerősítő e-mailben található hivatkozással beállíthatsz egy kezdeti jelszót. Egyéb esetben kérj egy visszaállító kulcsot a %sJelszó visszaállítása%s oldalon." +msgstr "" +"A jelszavad visszaállításra került. Ha most regisztráltál, akkor a " +"megerősítő e-mailben található hivatkozással beállíthatsz egy kezdeti " +"jelszót. Egyéb esetben kérj egy visszaállító kulcsot a %sJelszó " +"visszaállítása%s oldalon." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Hibás felhasználónév vagy jelszó." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Hiba történt a felhasználói munkamenet létrehozásának megkísérlésekor." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Érvénytelen e-mail és visszaállító kulcs kombináció." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Nincs" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Fiók információinak megtekintése – %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Alapcsomag-azonosító vagy alapcsomagnév hiányzik." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Nem szerkesztheted ezt a hozzászólást." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "A hozzászólás nem létezik." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "A hozzászólás nem lehet üres." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "A hozzászólás hozzáadva." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "A csomag információinak szerkesztéséhez be kell jelentkezned." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Hiányzó hozzászólásazonosító." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "5-nél több hozzászólás nem rögzíthető." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Nem rögzítheted ezt a hozzászólást." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Nem oldhatod fel ezt a hozzászólást." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "A hozzászólás rögzítésre került." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "A hozzászólás feloldásra került." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Hiba történt a csomag részletes információinak letöltése közben." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "A csomag részletes információi nem találhatók." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Csomagok megjelöléséhez be kell jelentkezned." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Nem választottál ki egyetlen csomagot sem megjelölésre." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "A kiválasztott csomagok nem lettek jelölve, adj meg egy megjegyzést." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "A kiválasztott csomagok elavultnak lettek jelölve." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Csomagok megjelölésének visszavonásához be kell jelentkezned." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Nem választottál ki egyetlen csomagot sem megjelölés visszavonására." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "A kiválasztott csomagok bejelölése visszavonva." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Csomagok törléséhez nincs jogosultságod." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Nem választottál ki egyetlen törlendő csomagot sem." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "A kiválasztott csomagok törlése megtörtént." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Csomagok örökbefogadásához be kell jelentkezned." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Csomagok megtagadásához be kell jelentkezned." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Nem választottál ki egyetlen örökbe fogadandó csomagot sem." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Nem választottál ki egyetlen csomagot sem megtagadásra." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Sikeresen örökbe fogadtad a kiválasztott csomagokat." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "A kiválasztott csomagok megtagadva." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Csomagokra történő szavazáshoz be kell jelentkezned." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Csomagokra adott szavazatok visszavonásához be kell jelentkezned." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Nem választottál ki egyetlen csomagot sem, amire szavaznál." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Szavazatod eltávolításra került a kiválasztott csomagokról." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Leadtad a szavazatod a kiválasztott csomagokra." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Nem sikerült hozzáadni az értesítési listához." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." -msgstr "Sikeresen fel lettél véve a(z) %s csomag hozzászólásértesítési listájára." +msgstr "" +"Sikeresen fel lettél véve a(z) %s csomag megjegyzésértesítési listájára." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." -msgstr "El lettél távolítva a(z) %s csomag hozzászólásértesítési listájáról." +msgstr "El lettél távolítva a(z) %s csomag megjegyzésértesítési listájáról." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Ennek a hozzászólásnak nem vonhatod vissza a törlését." +msgid "You must be logged in before you can edit package information." +msgstr "A csomag információinak szerkesztéséhez be kell jelentkezned." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "A hozzászólás törlése visszavonásra került." +msgid "Missing comment ID." +msgstr "Hiányzó megjegyzésazonosító." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Nem törölheted ezt a hozzászólást." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." -msgstr "Hozzászólás törölve." +msgstr "Megjegyzés törölve." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "A hozzászólás szerkesztve lett." +msgid "You are not allowed to delete this comment." +msgstr "Nem törölheted ezt a megjegyzést." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Nem szerkesztheted ennek az alapcsomagnak a kulcsszavait." +msgid "Missing category ID." +msgstr "Hiányzó kategóriaazonosító." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Az alapcsomag kulcsszavai frissítve lettek." +msgid "Invalid category ID." +msgstr "Érvénytelen kategóriaazonosító." + +msgid "You are not allowed to change this package category." +msgstr "Nem változtathatod meg ennek a csomagnak a kategóriáját." + +msgid "Package category changed." +msgstr "A csomag kategóriája megváltoztatva." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Nem szerkesztheted ennek az alapcsomagnak a társkarbantartóit." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Érvénytelen felhasználónév: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "Az alapcsomag társkarbantartói frissítve lettek." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Csomag részleteinek megtekintése –" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "igényli ezt: %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "Csomagkérelmek beküldéséhez be kell jelentkezned." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Érvénytelen név: csak kisbetűk használata engedélyezett." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." -msgstr "A hozászólás mező nem lehet üres." +msgstr "A megjegyzés mező nem lehet üres." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Érvénytelen kérelemtípus." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Kérelem sikeresen hozzáadva." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Érvénytelen ok." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "Csak megbízható felhasználók és fejlesztők tudnak kérelmeket lezárni." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Kérelem sikeresen lezárva." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "Ez az űrlap %s AUR fiókjának végleges törléséhez használható." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sFIGYELMEZTETÉS%s: ez a művelet nem visszavonható." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Törlés megerősítése" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Felhasználónév" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Fióktípus" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Felhasználó" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Fejlesztő" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Megbízható felhasználó és fejlesztő" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "E-mail cím" -#: template/account_details.php -msgid "hidden" -msgstr "rejtett" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Valós név" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Honlap" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC becenév" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "PGP kulcs ujjlenyomata" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Állapot" -#: template/account_details.php msgid "Inactive since" msgstr "Ezóta inaktív:" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Aktív" -#: template/account_details.php -msgid "Registration date:" -msgstr "Regisztráció dátuma:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "ismeretlen" - -#: template/account_details.php msgid "Last Login" msgstr "Legutóbbi bejelentkezés" -#: template/account_details.php msgid "Never" msgstr "Soha" -#: template/account_details.php msgid "View this user's packages" -msgstr "Ezen felhasználó csomagjainak megtekintése" +msgstr "A felhasználó csomagjainak megtekintése" -#: template/account_details.php msgid "Edit this user's account" msgstr "Ezen felhasználó fiókjának szerkesztése" -#: template/account_details.php -msgid "List this user's comments" -msgstr "Ezen felhasználó hozzászólásainak megtekintése" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Kattints %side%s, ha véglegesen törölni szeretnéd ezt a fiókot." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Kattints %side%s a felhasználó részleteihez." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Kattints %side%s a felhasználó hozzászólásainak megtekintéséhez." - -#: template/account_edit_form.php msgid "required" msgstr "kötelező" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "A felhasználóneved a bejelentkezéshez használt név lesz. Látható a mindenki számára még akkor is, ha a fiókod inaktív." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Normál felhasználó" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Megbízható felhasználó" + msgid "Account Suspended" msgstr "Felhasználói fiók felfüggesztve" -#: template/account_edit_form.php msgid "Inactive" msgstr "Inaktív" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Kérünk, győződj meg arról, hogy helyesen adtad meg az e-mail címedet, különben ki leszel zárva." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "E-mail cím elrejtése" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "A nem rejted el az email címed, akkor minden regisztrált AUR felhasználó láthatja. Ha elrejted az email címed, akkor csak az Arch Linux személyzet láthatja." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Másodlagos email cím" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "Megadhatsz egy másodlagos email címet, amellyel visszaszerezheted a hozzáférést a fiókodhoz, ha elveszted a hozzáférést az elsődleges email címedhez." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "A jelszó visszaállító linkek az első- és másodlagos email címedre is kiküldésre kerülnek." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "A másodlagos email címed csak az Arch Linux személyzet számára látható, a(z) %s beállítástól függetlenül." - -#: template/account_edit_form.php -msgid "Language" -msgstr "Nyelv" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Időzóna" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Ha meg akarod változtatni a jelszavad, akkor add meg az új jelszót kétszer a megerősítéshez." - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Megismételt jelszó" -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Az alábbi információ csak akkor szükséges, ha csomagokat szeretnél beküldeni az Arch User Repositoryba." +msgid "Language" +msgstr "Nyelv" -#: templates/partials/account_form.html msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "Nyilvános SSH kulcs" +msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Értesítési beállítások" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Értesítés új hozzászólásról" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Értesítés csomagfrissítésekről." - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Értesítés tulajdonváltozásokról" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "A fiók módosításának megerősítéséhez kérlek add meg a jelenlegi jelszavad:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "Jelenlegi jelszavad" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "Az automatizált regisztrációk kiszűrése érdekében, kérlek add meg a következő parancs kimenetét:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Válasz" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Frissítés" -#: template/account_edit_form.php msgid "Create" msgstr "Létrehozás" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Visszaállítás" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Nincs a keresési feltételeknek megfelelő találat." -#: template/account_search_results.php msgid "Edit Account" msgstr "Felhasználói fiók szerkesztése" -#: template/account_search_results.php msgid "Suspended" msgstr "Felfüggesztve" -#: template/account_search_results.php msgid "Edit" msgstr "Szerkesztés" -#: template/account_search_results.php msgid "Less" msgstr "Kevesebb" -#: template/account_search_results.php msgid "More" msgstr "Több" -#: template/account_search_results.php msgid "No more results to display." msgstr "Nincs több kijelezhető eredmény." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Használd ezt az űrlapot társszerkesztők hozzáadásához a(z) %s%s%s csomaghoz (soronként egy felhasználónév):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "Felhasználók" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "Mentés" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Elavultnak jelölő hozzászólás: %s" +msgid "My Packages" +msgstr "Csomagjaim" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s elavultnak jelölte a(z) %s%s%s csomagot ekkor: %s%s%s a következő okból:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s nincs elavultnak jelölve." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Vissza a részletekhez" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d aurweb fejlesztői csapat." - -#: template/header.php msgid " My Account" msgstr " Fiókom" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Regisztráció" + +msgid "unknown" +msgstr "ismeretlen" + +msgid "Package Base Details" +msgstr "Alapcsomag részletei" + msgid "Package Actions" msgstr "Csomagműveletek" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "PKGBUILD megtekintése" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "Módosítások megtekintése" +msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" -msgstr "Pillanatkép letöltése" +msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Keresés wikiben" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Elavultnak jelölve (%s)" +msgid "Flagged out-of-date" +msgstr "Elavultnak jelölve" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Csomag elavultnak jelölése" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Csomag jelölésének visszavonása" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Szavazat eltávolítása" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Szavazás erre a csomagra" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Értesítések kikapcsolása" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Értesítések engedélyezése" +msgid "Notify of new comments" +msgstr "Értesítés új hozzászólásról" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "Társszerkesztők kezelése" +msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d függő kérelem" msgstr[1] "%d függő kérelem" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Csomag törlése" + +msgid "Merge Package" +msgstr "Csomag beolvasztása" + msgid "Adopt Package" msgstr "Csomag örökbe fogadása" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Alapcsomag részletei" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" -msgstr "Git klónozási URL" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "csak olvasható" +msgid "Category" +msgstr "Kategória" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "kattints a másoláshoz" +msgid "Change category" +msgstr "Kategória megváltoztatása" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Kulcsszavak" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Beküldő" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Fiók információinak megtekintése – %s" + msgid "Maintainer" msgstr "Karbantartó" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Legutóbbi csomagoló" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Szavazatok" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Népszerűség" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Először beküldve" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Legutóbb frissítve" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Hozzászólás szerkesztése ehhez: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" -msgstr "Hozzászólás" +msgstr "Hosszászólás" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "A csomag tárolójában lévő Git kommitok azonosítói automatikusan hivatkozássá lesznek alakítva." +msgid "Comment has been added." +msgstr "A megjegyzés hozzáadva." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "A %sMarkdown leíró nyelv%s részlegesen támogatott." +msgid "View all comments" +msgstr "Összes megjegyzés megjelenítése" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Rögzített hozzászólások" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Legújabb hozzászólások" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Felhasználó hozzászólásai:" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s hozzászólt ekkor: %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Névtelen hozzászólás ekkor: %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "Hozzászólás a(z) %s csomaghoz %s időpontban" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "törölve ekkor: %s %s által" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "törölve ekkor: %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "szerkesztve ekkor: %s %s által" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "szerkesztve ekkor: %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Hozzászólás törlésének visszavonása" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Hozzászólás törlése" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Hozzászólás rögzítése" +#, php-format +msgid "Comment by %s" +msgstr "%s hozzászólása" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Hozzászólás feloldása" +msgid "Anonymous comment" +msgstr "Névtelen megjegyzés" + +msgid "deleted" +msgstr "törölve" + +msgid "All comments" +msgstr "Összes hozzászólás" -#: template/pkg_details.php msgid "Package Details" msgstr "Részletes csomaginformáció" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Alapcsomag" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Leírás" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Upstream URL" -#: template/pkg_details.php msgid "Visit the website for" msgstr "A webhely meglátogatása –" -#: template/pkg_details.php msgid "Licenses" msgstr "Licencek" -#: template/pkg_details.php msgid "Groups" msgstr "Csoportok" -#: template/pkg_details.php msgid "Conflicts" msgstr "Ütközik" -#: template/pkg_details.php msgid "Provides" msgstr "Szolgáltatja" -#: template/pkg_details.php msgid "Replaces" msgstr "Lecseréli" -#: template/pkg_details.php msgid "Dependencies" msgstr "Függőségek" -#: template/pkg_details.php msgid "Required by" msgstr "Igényli" -#: template/pkg_details.php msgid "Sources" msgstr "Források" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Kérelem lezárása: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Használd ezt az űrlapot a(z) %s%s%s alapcsomaggal kapcsolatos kérelem lezárásához." +msgstr "" +"Használd ezt az űrlapot a(z) %s%s%s alapcsomaggal kapcsolatos kérelem " +"lezárásához." + +msgid "Note" +msgstr "Megjegyzés" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "A megjegyzések mező üresen hagyható. Viszont kérelem elutasításakor erősen javasolt megjegyzés hozzáadása." +msgstr "" +"A megjegyzések mező üresen hagyható. Viszont kérelem elutasításakor erősen " +"javasolt megjegyzés hozzáadása." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Ok" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Elfogadva" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Elutasítva" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Megjegyzések" + +#, php-format +msgid "File Request: %s" +msgstr "Kérelem benyújtása: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Használd ezt az űrlapot a(z) %s%s%s alapcsomaggal kapcsolatos kérelem benyújtásához, amely a következő csomagokat tartalmazza:" +msgstr "" +"Használd ezt az űrlapot a(z) %s%s%s alapcsomaggal kapcsolatos kérelem " +"benyújtásához, amely a következő csomagokat tartalmazza:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Kérelem típusa" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Törlés" -#: template/pkgreq_form.php msgid "Orphan" -msgstr "Megtagadás" +msgstr "Árva" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Beolvasztás ebbe:" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Nincs a keresési feltételeknek megfelelő kérelem." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "%d csomagokkal kapcsolatos kérelem található." msgstr[1] "%d csomagokkal kapcsolatos kérelem található." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "%d. oldal, összesen: %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Csomag" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Kitöltő" -#: template/pkgreq_results.php msgid "Date" msgstr "Dátum" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d nap van hátra" -msgstr[1] "~%d nap van hátra" +msgid "~%d days left" +msgstr "~%d nap van hátra" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "~%d óra van hátra" msgstr[1] "~%d óra van hátra" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "<1 óra van hátra" -#: template/pkgreq_results.php msgid "Accept" msgstr "Elfogadás" -#: template/pkgreq_results.php msgid "Locked" msgstr "Zárolva" -#: template/pkgreq_results.php msgid "Close" msgstr "Lezárás" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Függőben lévő" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Lezárva" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Név, leírás" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Csak név" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Pontos név" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Pontos alapcsomag" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Társkarbantartó" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Karbantartó, társkarbantartó" - -#: template/pkg_search_form.php msgid "All" msgstr "Összes" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Jelölt" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Nem jelölt" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Név" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Szavazva" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Legutóbb módosítva" +msgid "Age" +msgstr "Kor" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Növekvő" -#: template/pkg_search_form.php msgid "Descending" msgstr "Csökkenő" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Keresési feltételek megadása" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Bármi" + msgid "Search by" msgstr "Keresés eszerint" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Kulcsszavak" + msgid "Out of Date" msgstr "Elavult" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Rendezés" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Rendezési sorrend" -#: template/pkg_search_form.php msgid "Per page" msgstr "Laponként" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Mehet" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Árvák" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Hiba történt a csomaglista letöltése közben." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Nincs a keresési feltételeknek megfelelő csomag." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "%d csomag található." msgstr[1] "%d csomag található." -#: template/pkg_search_results.php msgid "Version" msgstr "Verzió" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "A népszerűség az összes szavazatból kerül számításra. Minden egyes szavazat súlyozásra kerül naponta %.2f-as faktorral a létrehozása óta." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Igen" -#: template/pkg_search_results.php msgid "orphan" msgstr "árva" -#: template/pkg_search_results.php msgid "Actions" msgstr "Tevékenységek" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Elavultnak jelölés" + msgid "Unflag Out-of-date" msgstr "Elavultság visszavonása" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Csomagok örökbefogadása" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Csomagok megtagadása" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Csomagok törlése" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Megerősítés" -#: template/search_accounts_form.php msgid "Any type" msgstr "Bármilyen típus" -#: template/search_accounts_form.php msgid "Search" msgstr "Keresés" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Statisztika" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Árva csomagok" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "A legutóbbi 7 napban hozzáadott csomagok" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "A legutóbbi 7 napban frissített csomagok" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Az utóbbi évben frissített csomagok" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Soha nem frissített csomagok" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Regisztrált felhasználók" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Megbízható felhasználók" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Legutóbbi frissítések" -#: template/stats/updates_table.php -msgid "more" -msgstr "több" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Statisztikám" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Csomagok az „unsupported”-ben" + msgid "Proposal Details" msgstr "Indítvány részletes információi" -#: template/tu_details.php msgid "This vote is still running." msgstr "A szavazás még zajlik." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Benyújtva: %s (%s által)" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Vége" -#: template/tu_details.php msgid "Result" msgstr "Eredmény" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Nem" -#: template/tu_details.php msgid "Abstain" msgstr "Tartózkodik" -#: template/tu_details.php msgid "Total" msgstr "Összesen" -#: template/tu_details.php msgid "Participation" msgstr "Részvétel" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Legutóbbi szavazatok TU szerint" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Legutóbbi szavazat" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Nincs találat." -#: template/tu_list.php msgid "Start" msgstr "Kezdés" -#: template/tu_list.php msgid "Back" msgstr "Vissza" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "AUR jelszó visszaállítása" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "Jelszó visszaállítást kezdeményeztek a te email címeddel rendelkező {user} felhasználó számára. Ha szeretnéd visszaállítani a jelszavad, akkor nyisd meg a lenti linket [1], egyébként hagyd figyelmen kívül ezt az üzenetet, és semmi sem fog történni." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Üdvözlünk az Arch User Repositoryban" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Üdvözlünk az Arch User Repositoryban! A jelszó beállításához, kérlek nyisd meg a lenti linket [1]. Ha nem működik, akkor próbáld meg kimásolni, és beilleszteni a böngésződ címsorába." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "AUR hozzászólás: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] hozzászólt a(z) {pkgbase} [2] csomaghoz:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Ha többé nem szeretnél értesítést kapni ezen csomaggal kapcsolatban, akkor kérlek nyisd meg a csomag adatlapját [2] és kattints a(z) \"{label}\" feliratra." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "AUR csomag frissítve: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] kommitolt a {pkgbase} [2] csomagba." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "AUR elavult csomag értesítés: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Az általad karbantartott {pkgbase} [1] csomagot elavultnak jelölte meg {user} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "AUR tulajdonlási értesítés: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "A(z) {pkgbase} [1] csomagot {user} [2] örökbefogadta." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "A(z) {pkgbase} [1] csomagról {user} [2] lemondott." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "AUR társkarbantartói értesítés: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "Hozzáadtak a(z) {pkgbase} [1] csomag társkarbantartóinak listájához." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "Eltávolítottak a(z) {pkgbase} [1] csomag társkarbantartóinak listájáról." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "AUR csomag törölve: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] egyesítette a(z) {old} [2] csomagot a(z) {new} [3] csomagba.\n\n--\nHa többé nem szeretnél értesítéseket kapni az új csomaggal kapcsolatban, akkor nyisd meg a [3] hivatkozást és kattints a(z) \"{label}\" feliratra." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] törölte a(z) {pkgbase} [2] csomagt.\n\nTöbbé nem fogsz értesítéseket kapni ezen csomaggal kapcsolatban." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Kérlek ne felejts el szavazni a(z) {id} azonosítójú javaslatról. A szavazási kevesebb, mint 48 óra múlva véget ér." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/id.po b/po/id.po deleted file mode 100644 index 62650942..00000000 --- a/po/id.po +++ /dev/null @@ -1,2371 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -# se7entime , 2013 -# se7entime , 2016 -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: se7entime , 2016\n" -"Language-Team: Indonesian (http://app.transifex.com/lfleischer/aurweb/language/id/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: id\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "Halaman Tidak Ditemukan" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "Maaf, halaman yang anda minta tidak ada." - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "Layanan Tidak Tersedia" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Jangan panik! Situs ini sedang tidak aktif karena sedang ada pemeliharaan. Kami akan kembali secepatnya." - -#: html/account.php -msgid "Account" -msgstr "Akun" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "Akun" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "Anda tidak diperbolehkan untuk mengakses area ini." - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "Tidak dapat mengambil informasi untuk pengguna spesifik." - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "Anda tidak mempunyai izin untuk menyunting akun ini." - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "Gunakan formulir berikut untuk mencari akun yang ada." - -#: html/account.php -msgid "You must log in to view user information." -msgstr "Anda harus masuk log untuk melihat informasi pengguna." - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "Tambahkan Proposal" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "Token tidak sah untuk aksi pengguna." - -#: html/addvote.php -msgid "Username does not exist." -msgstr "Nama pengguna tidak ada." - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "%s telah mempunyai proposal yang berjalan untuk mereka." - -#: html/addvote.php -msgid "Invalid type." -msgstr "Tipe tidak sah." - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "Proposal tidak bisa kosong." - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "Proposal baru telah dimasukkan." - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "Masukkan sebuah proposal untuk mengaktifkan voting." - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "Pemohon/TU" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "(kosong jika tidak dapat diterapkan)" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "Tipe" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "Amandemen Peraturan" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "Proposal" - -#: html/addvote.php -msgid "Submit" -msgstr "Masukkan" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "Kelola Co-maintainer" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Sunting komentar" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "Beranda" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "Ingat untuk memberika suara untuk paket favorit anda!" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Beberapa paket mungkin disediakan sebagai binabinari di [comunity]." - -#: html/home.php -msgid "DISCLAIMER" -msgstr "DISCLAIMER" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "Bantuan" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "Kriteria Pencarian" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "Paket" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "Galat saat mencoba untuk menerima rincian paket." - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Paket yang dipilih belum dihapus, periksa kotak centang konfirmasi." - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/id_ID.po b/po/id_ID.po deleted file mode 100644 index 4840ca1e..00000000 --- a/po/id_ID.po +++ /dev/null @@ -1,2369 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Indonesian (Indonesia) (http://app.transifex.com/lfleischer/aurweb/language/id_ID/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: id_ID\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/is.po b/po/is.po deleted file mode 100644 index 0ec59559..00000000 --- a/po/is.po +++ /dev/null @@ -1,2374 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Icelandic (http://app.transifex.com/lfleischer/aurweb/language/is/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: is\n" -"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/it.po b/po/it.po index bd145ea6..c5f83ba0 100644 --- a/po/it.po +++ b/po/it.po @@ -1,2385 +1,1391 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Fanfurlio Farolfi , 2021-2022 -# Giovanni Scafora , 2011-2015,2022 -# Giovanni Scafora , 2022-2023 -# Lorenzo Porta , 2014 +# Giovanni Scafora , 2011-2015 +# Lorenzo Porta , 2014 # Lukas Fleischer , 2011 -# mattia_b89 , 2019 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Giovanni Scafora , 2022-2023\n" -"Language-Team: Italian (http://app.transifex.com/lfleischer/aurweb/language/it/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-12 13:45+0000\n" +"Last-Translator: Giovanni Scafora \n" +"Language-Team: Italian (http://www.transifex.com/projects/p/aur/language/" +"it/)\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: it\n" -"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Impossibile trovare la pagina" -#: html/404.php msgid "Sorry, the page you've requested does not exist." -msgstr "Spiacenti, la pagina richiesta non esiste." +msgstr "Spiacenti, la pagina che hai richiesto non esiste." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Nota" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Le URL per clonare un repository git non sono visualizzabili nel browser." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Per clonare il repository git di %s, esegui %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Clicca %squi%s per ritornare alla pagina dei dettagli di %s." - -#: html/503.php msgid "Service Unavailable" msgstr "Servizio non disponibile" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Niente panico! Il sito è fuori servizio per lavori di manutenzione. Torneremo presto." +msgstr "" +"Niente panico! Il sito è fuori servizio per lavori di manutenzione. " +"Torneremo presto." -#: html/account.php msgid "Account" msgstr "Account" -#: html/account.php template/header.php msgid "Accounts" msgstr "Account" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." -msgstr "Non sei autorizzato ad accedere a quest'area." +msgstr "Non puoi accedere a quest'area." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Impossibile recuperare le informazioni dell'utente specificato." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Non hai i permessi necessari per modificare questo account." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "La password non è valida." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Usa questo modulo per cercare gli account esistenti." -#: html/account.php msgid "You must log in to view user information." msgstr "Devi autenticarti per visualizzare le informazioni dell'utente." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Usa questo modulo per creare un account." + msgid "Add Proposal" msgstr "Aggiungi una proposta" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Il token non è valido per l'intervento da parte dell'utente." -#: html/addvote.php msgid "Username does not exist." msgstr "Il nome utente non esiste." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s ha già avviato una proposta per loro." -#: html/addvote.php msgid "Invalid type." msgstr "Tipo non valido." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "La proposta non può essere vuota." -#: html/addvote.php msgid "New proposal submitted." msgstr "La nuova proposta è stata inviata." -#: html/addvote.php msgid "Submit a proposal to vote on." -msgstr "Invia una proposta da votare." +msgstr "Invia una proposta di voto." -#: html/addvote.php msgid "Applicant/TU" msgstr "Candidato/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(vuoto se non applicabile)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Tipo" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "Aggiunta di un manutentore del pacchetto" +msgid "Addition of a TU" +msgstr "Aggiunta di un TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "Rimozione di un manutentore del pacchetto" +msgid "Removal of a TU" +msgstr "Rimozione di un TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "Rimozione di un manutentore del pacchetto (inattività non dichiarata)" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Rimozione di un TU (inattività non dichiarata)" -#: html/addvote.php msgid "Amendment of Bylaws" -msgstr "Modifica del regolamento" +msgstr "Modifica dello statuto" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Proposta" -#: html/addvote.php msgid "Submit" msgstr "Invia" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "Gestisci i co-manutentori" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Edita il commento" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Pannello" - -#: html/home.php template/header.php msgid "Home" msgstr "Home" -#: html/home.php -msgid "My Flagged Packages" -msgstr "I miei pacchetti marcati" - -#: html/home.php -msgid "My Requests" -msgstr "Le mie richieste" - -#: html/home.php -msgid "My Packages" -msgstr "I miei pacchetti" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Cerca i pacchetti da me mantenuti" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Pacchetti co-mantenuti" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Cerca i pacchetti da me co-mantenuti" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "Benvenuti in AUR! Prima di inviare un PKGBUILD, per maggiori informazioni, leggete le %sAUR User Guidelines%s e le %sAUR Submission Guidelines%s." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." +msgstr "" +"Benvenuto in AUR! Per ottenere maggiori informazioni, leggi le %sAUR User " +"Guidelines%s e le %sAUR TU Guidelines%s." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "I PKGBUILD inviati %sdevono%s essere conformi agli %sArch Packaging Standards%s altrimenti saranno eliminati!" +msgstr "" +"I PKGBUILD inviati %sdevono%s essere conformi agli %sArch Packaging Standards" +"%s altrimenti saranno eliminati!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Ricorda di votare i tuoi pacchetti preferiti!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Alcuni pacchetti potrebbero essere disponibili come precompilati in [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"Alcuni pacchetti potrebbero essere disponibili come precompilati in " +"[community]." -#: html/home.php msgid "DISCLAIMER" msgstr "AVVISO" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "i pacchetti presenti in AUR sono stati inviati dagli utenti. Usali a tuo rischio e pericolo." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"I pacchetti presenti in AUR sono stati inviati dagli utenti. Usali a tuo " +"rischio e pericolo." -#: html/home.php -msgid "Learn more..." -msgstr "Ulteriori informazioni..." - -#: html/home.php msgid "Support" msgstr "Supporto" -#: html/home.php msgid "Package Requests" msgstr "Richieste dei pacchetti" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Ci sono tre tipi di richieste che si possono effettuare dal riquadro %sAzioni del pacchetto%s presente nella pagina dei dettagli del pacchetto:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" +"Ci sono tre tipi di richieste che possono essere effettuate tramite il box " +"%sAzioni del pacchetto%s, presente sulla pagina dei dettagli del pacchetto:" -#: html/home.php msgid "Orphan Request" msgstr "Richiesta di un pacchetto orfano" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "richiesta di un pacchetto che si vuole abbandonare, ad esempio, quando il manutentore è inattivo ed il pacchetto è stato contrassegnato come non aggiornato da molto tempo." +msgstr "" +"richiesta di un pacchetto che si vuole abbandonare, ad esempio, quando il " +"manutentore è inattivo ed il pacchetto è stato contrassegnato come non " +"aggiornato da molto tempo." -#: html/home.php msgid "Deletion Request" msgstr "Richiesta di rimozione di un pacchetto" -#: html/home.php msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "Richiesta di rimozione di un pacchetto dall'Arch User Repository. Non utilizzare questa procedura se un pacchetto non funziona e può essere sistemato facilmente. Contattare, invece, il manutentore e, se necessario, presentare una richiesta per abbandonarlo." +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" +"richiesta per rimuovere un pacchetto dall'Arch User Repository. Non usate " +"questo se il pacchetto non funziona e se può essere sistemato facilmente. " +"Contattate il manutentore del pacchetto e, se necessario, inviate una " +"richiesta per renderlo orfano." -#: html/home.php msgid "Merge Request" -msgstr "Richiesta di unione di un pacchetto" +msgstr "Richiesta di unione" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "richiesta di un pacchetto da unire con un altro. Può essere usata quando un pacchetto necessita di essere rinominato o rimpiazzato da un pacchetto suddiviso" +msgstr "" +"richiesta di un pacchetto da unire con un altro. Può essere usata quando un " +"pacchetto necessita di essere rinominato o sostituito da un pacchetto " +"suddiviso" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Se vuoi discutere una richiesta, puoi usare la lista di discussione %saur-requests%s. Non usare questa lista per inoltrare richieste." +msgstr "" +"Se vuoi discutere una richiesta, puoi usare la lista di discussione %saur-" +"requests%s. Non usare questa lista per inoltrare le tue richieste." -#: html/home.php -msgid "Submitting Packages" -msgstr "Invio dei pacchetti" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Per inviare i pacchetti in AUR, adesso, si utilizza Git via SSH. Per maggiori informazioni, vedi la sezione %sInviare i pacchetti%s della pagina Arch User Repository dell'ArchWiki." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Per AUR si usano le seguenti fingerprint SSH:" - -#: html/home.php msgid "Discussion" msgstr "Discussione" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "La discussione generale sulla struttura dell'Arch User Repository (AUR) e dei manutentori dei pacchetti si svolge su %saur-general%s. Per le discussioni relative allo sviluppo dell'interfaccia web di AUR, utilizzare la lista di discussione %saur-dev%s." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." +msgstr "" +"La discussione generale sull'Arch User Repository (AUR) e sulla struttura " +"dei TU avviene in %saur-general%s. Per la discussione relativa allo sviluppo " +"dell'interfaccia web di AUR, utilizza la lista di discussione %saur-dev%s." -#: html/home.php msgid "Bug Reporting" msgstr "Segnalazione di un bug" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "Se si trova un bug nell'interfaccia web di AUR, si prega di compilare una segnalazione sul nostro %sbug tracker%s. Utilizzare il tracker %ssolo%s per segnalare bug nell'interfaccia web di AUR. Per segnalare bug relativi ai pacchetti, contattare il manutentore o lasciare un commento nella pagina del pacchetto." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." +msgstr "" +"Se trovi un bug nell'interfaccia web di AUR, invia un report al nostro %sbug " +"tracker%s. Usa il tracker %ssolo%s per inviare i bug di AUR. Per inviare bug " +"inerenti alla pacchettizzazione, contatta il manutentore oppure lascia un " +"commento sulla pagina del pacchetto." -#: html/home.php msgid "Package Search" msgstr "Ricerca dei pacchetti" -#: html/index.php msgid "Adopt" msgstr "Adotta" -#: html/index.php msgid "Vote" msgstr "Vota" -#: html/index.php msgid "UnVote" msgstr "Rimuovi il voto" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Abilita le notifiche" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Disabilita le notifiche" -#: html/index.php +msgid "Flag" +msgstr "Seleziona" + msgid "UnFlag" msgstr "Deseleziona" -#: html/login.php template/header.php msgid "Login" msgstr "Accedi" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Connesso con il nome utente: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Esci" -#: html/login.php msgid "Enter login credentials" msgstr "Inserisci le credenziali di accesso" -#: html/login.php -msgid "User name or primary email address" -msgstr "Nome utente o indirizzo email primario" +msgid "Username" +msgstr "Nome utente" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Password" -#: html/login.php msgid "Remember me" msgstr "Ricordami" -#: html/login.php msgid "Forgot Password" msgstr "Password dimenticata" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "L'accesso tramite HTTP è stato disabilitato. Se vuoi accedere, %spassa ad HTTPs%s." +msgstr "" +"L'accesso tramite HTTP è stato disabilitato. Se vuoi accedere, %spassa ad " +"HTTPs%s." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" -msgstr "Criteri di ricerca" +msgstr "Criterio di ricerca" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Pacchetti" -#: html/packages.php msgid "Error trying to retrieve package details." -msgstr "Si è verificato un errore durante il recupero dei dettagli del pacchetto." +msgstr "" +"Si è verificato un errore durante il recupero dei dettagli del pacchetto." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Manca un campo obbligatorio." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "I campi password non corrispondono." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "La password deve contenere almeno %s caratteri." -#: html/passreset.php msgid "Invalid e-mail." msgstr "L'e-mail inserita non è valida." -#: html/passreset.php -msgid "Password Reset" -msgstr "Ripristina la password" +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" +"È stata inviata una richiesta per resettare la password dell'account %s " +"associato al tuo indirizzo e-mail. Se desideri resettare la tua password, " +"clicca sul link sottostante, altrimenti ignora questo messaggio e non " +"succederà nulla." + +msgid "Password Reset" +msgstr "Resetta la password" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Controlla la tua e-mail per il link di conferma." -#: html/passreset.php msgid "Your password has been reset successfully." -msgstr "La tua password è stata ripristinata con successo." +msgstr "La tua password è stata resettata con successo." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Conferma il tuo nome utente o il tuo indirizzo email primario:" +msgid "Confirm your e-mail address:" +msgstr "Conferma il tuo indirizzo e-mail:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Inserisci la tua nuova password:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Conferma la tua nuova password:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Continua" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Se hai dimenticato il nome utente e l'indirizzo email primario che hai usato per la registrazione, invia un messaggio alla lista di discussione %saur-general%s." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Se hai dimenticato l'indirizzo e-mail che hai utilizzato per registrarti, " +"invia un messaggio nella mailing list %saur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Inserisci il tuo nome utente o il tuo indirizzo email primario:" +msgid "Enter your e-mail address:" +msgstr "Inserisci il tuo indirizzo email:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Pacchetti base" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "I pacchetti selezionati non sono stati abbandonati, conferma la tua scelta inserendo un segno di spunta nell'apposita casella di controllo." +msgstr "" +"I pacchetti selezionati non sono stati abbandonati, conferma la tua scelta " +"inserendo un segno di spunta nell'apposita casella di controllo." -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "I pacchetti selezionati non sono stati adottati, conferma la tua scelta inserendo un segno di spunta nell'apposita casella di controllo." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Impossibile trovare il pacchetto da unire al suo interno i voti ed i commenti." +msgstr "" +"Impossibile trovare il pacchetto da unire al suo interno i voti ed i " +"commenti." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Impossibile unire un pacchetto base con se stesso." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "I pacchetti selezionati non sono stati eliminati, conferma la tua scelta inserendo un segno di spunta nell'apposita casella di controllo." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"I pacchetti selezionati non sono stati eliminati, conferma la tua scelta, " +"inserendo un segno di spunta nell'apposita casella di controllo." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Eliminazione del pacchetto" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Elimina il pacchetto" +#, php-format +msgid "Delete Package: %s" +msgstr "Elimina il pacchetto: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Usa questo modulo per eliminare il pacchetto base %s%s%s e i seguenti pacchetti da AUR:" +msgstr "" +"Usa questo modulo per eliminare il pacchetto base %s%s%s e i seguenti " +"pacchetti da AUR:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "La rimozione di un pacchetto è permanente." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Seleziona la casella di controllo per confermare l'azione richiesta." -#: html/pkgdel.php msgid "Confirm package deletion" -msgstr "Conferma di voler rimuovere il pacchetto" +msgstr "Conferma la rimozione del pacchetto" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Elimina" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "Solo i manutentori del pacchetto e gli sviluppatori possono eliminare i pacchetti." +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Solo i TU e gli sviluppatori possono eliminare i pacchetti." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Abbandona il pacchetto" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "Abbandona il pacchetto: %s" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Usa questo modulo per abbandonare il pacchetto base %s%s%s che contiene i seguenti pacchetti:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" +"Usa questo modulo per abbandonare il pacchetto base %s%s%s che contiene i " +"seguenti pacchetti:" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "Selezionando la casella di controllo, confermi che non vuoi più essere un co-mantenitore del pacchetto." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Selezionando la casella di controllo, confermi che vuoi abbandonare il pacchetto e trasferirlo a %s%s%s." +msgstr "" +"Selezionando la casella di controllo, confermi che vuoi abbandonare il " +"pacchetto e trasferirlo a %s%s%s." -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Selezionando la casella di controllo, confermi che vuoi abbandonare il pacchetto." +msgstr "" +"Selezionando la casella di controllo, confermi che vuoi abbandonare il " +"pacchetto." -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "Conferma di voler abbandonare il pacchetto" +msgstr "Conferma di abbandonare il pacchetto" -#: html/pkgdisown.php msgid "Disown" msgstr "Abbandona" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "Solo i manutentori e gli sviluppatori possono abbandonare un pacchetto." +msgid "Only Trusted Users and Developers can disown packages." +msgstr "Solo i TU e gli sviluppatori possono abbandonare i pacchetti." -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Segnala il commento" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Segnala che il pacchetto non è aggiornato" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "Sembra un pacchetto VCS. Fai %snon%s segnalarlo come non aggiornato, se la versione in AUR non corrisponde con il commit più recente. Questo pacchetto dovrebbe essere segnalato solo se i sorgenti vengono spostati o se sono necessarie delle modifiche al PKGBUILD a causa delle recenti modifiche al sorgente." - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Usa questo modulo per segnalare che il pacchetto base %s%s%s e i seguenti pacchetti non sono aggiornati:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "%sNon%s utilizzare questo modulo per inviare bug report. Utilizza i commenti nella pagina del pacchetto." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Immetti qui sotto i dettagli sul perché il pacchetto non è aggiornato, preferibilmente compresi il collegamento dell'annuncio del rilascio o del nuovo sorgente." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Commenti" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Seleziona" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Solo gli utenti registrati possono segnalare i pacchetti non aggiornati." - -#: html/pkgmerge.php msgid "Package Merging" -msgstr "Unione dei pacchetti" +msgstr "Fusione dei pacchetti" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Unisci il pacchetto" +#, php-format +msgid "Merge Package: %s" +msgstr "Unisci il pacchetto: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Usa questo modulo per unire il pacchetto base %s%s%s con un altro pacchetto." +msgstr "" +"Usa questo modulo per unire il pacchetto base %s%s%s in un altro pacchetto." -#: html/pkgmerge.php msgid "The following packages will be deleted: " -msgstr "I seguenti pacchetti saranno eliminati:" +msgstr "I seguenti pacchetti verranno eliminati:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " -msgstr "Una volta che il pacchetto è stato unito, non può essere più recuperato." +msgstr "" +"Una volta che il pacchetto è stato unito, non può essere più recuperato." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "Digita il nome del pacchetto che desideri unire all'interno del pacchetto." +msgstr "" +"Digita il nome del pacchetto che desideri unire all'interno del pacchetto." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Unisci con:" -#: html/pkgmerge.php msgid "Confirm package merge" -msgstr "Conferma di voler unire il pacchetto" +msgstr "Conferma l'unione del pacchetto" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Unisci" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "Solo i manutentori del pacchetto e gli sviluppatori possono unire i pacchetti." +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Solo i TU e gli sviluppatori possono unire i pacchetti." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Invia la richiesta" +msgid "File Request" +msgstr "Richiesta di file" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Chiudi la richiesta" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Primo" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Precedente" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Successivo" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Ultimo" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Richieste" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registrati" +msgid "Trusted User" +msgstr "TU" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Usa questo modulo per creare un account." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Termini di servizio" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "I seguenti documenti sono stati aggiornati. Riesaminali attentamente:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "revisione %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Io accetto i termini e le condizioni di cui sopra." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "Manutentore del pacchetto" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Impossibile recuperare i dettagli della proposta." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Non puoi più votare per questa proposta." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "Possono votare solo i manutentori del pacchetto." +msgid "Only Trusted Users are allowed to vote." +msgstr "Solo i Trusted User possono votare." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Non puoi votare per una proposta che ti riguarda in prima persona." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Hai già votato per questa proposta." -#: html/tu.php msgid "Vote ID not valid." msgstr "L'ID del voto non è valido." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Voti attuali" -#: html/tu.php msgid "Past Votes" msgstr "Vecchi voti" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Votanti" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "La registrazione dell'account è stata disabilitata per il tuo indirizzo IP, probabilmente a causa di prolungati attacchi di spam. Ci scusiamo per l'inconveniente." +msgstr "È stato inviato un key reset della password al tuo indirizzo e-mail." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Manca l'ID dell'utente" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Il nome utente non è valido." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Deve contenere un minino di %s ed un massimo di %s caratteri" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Inizia e termina con una lettera o un numero" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Può contenere solo un punto, un trattino basso o un trattino." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Conferma la tua nuova password." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "L'indirizzo email non risulta valido." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "L'indirizzo email di scorta non è valido." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "La homepage non è valida, specifica l'URL HTTP(s) completo." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." -msgstr "La fingerprint della chiave PGP non è valida." +msgstr "L'impronta della chiave PGP non è valida." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "La chiave pubblica SSH non è valida." -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." -msgstr "Non è possibile incrementare i permessi dell'account." +msgstr "Non è possibile aumentare i permessi dell'account." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Lingua attualmente non supportata." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Il fuso orario non è attualmente supportato." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "Il nome utente %s%s%s è già in uso." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "L'indirizzo %s%s%s è già in uso." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "La chiave pubblica SSH %s%s%s, è già in uso." +msgstr "La chiave pubblica SSH, %s%s%s, è già in uso." -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "Manca il CAPTCHA." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "Il CAPTCHA è scaduto. Riprova." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "Il CAPTCHA inserito non è valido." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Si è verificato un errore durante la creazione dell'account %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "L'account %s%s%s è stato creato con successo." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "È stata inviata una chiave di ripristino della password al tuo indirizzo e-mail." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Per utilizzare il tuo account, clicca sul link Accedi." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Benvenuto in %s! Per impostare una password iniziale del tuo nuovo account, " +"clicca sul link sottostante. Se il link non dovesse funzionare, prova a " +"copiarlo e ad incollarlo nella barra degli indirizzi del tuo browser." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "È stato inviato un key reset della password al tuo indirizzo e-mail." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Non sono state apportate modifiche all'account %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "L'account %s%s%s è stato modificato con successo." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Il modulo d'accesso è attualmente disabilitato per il tuo indirizzo IP, probabilmente a causa di prolungati attacchi di spam. Ci scusiamo per l'inconveniente." +msgstr "" +"Il modulo d'accesso è attualmente disabilitato per il tuo indirizzo IP, " +"probabilmente a causa di prolungati attacchi di spam. Ci scusiamo per " +"l'inconveniente." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Account sospeso" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "Non hai il permesso per sospendere gli account." - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "La tua password è stata ripristinata. Se hai creato da poco un nuovo account, usa il link presente nell'email di conferma, per impostare una password iniziale. Altrimenti, richiedi il ripristino della password dalla pagina %sRipristina la password%s." +msgstr "" +"La tua password è stata resettata. Se hai appena creato un nuovo account, " +"usa il link presente nell'email di conferma, per impostare una password " +"iniziale. Altrimenti, richiedi un key reset dalla pagina %sPassword Reset%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Nome utente o password errati." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." -msgstr "Si è verificato un errore provando a generare una sessione dell'utente." +msgstr "" +"Si è verificato un errore provando a generare una sessione dell'utente." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." -msgstr "La combinazione e-mail e chiave di ripristino non è valida." +msgstr "Combinazione non valida del pulsante reset e dell'e-mail." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Nessuno" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Mostra le informazioni dell'account %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Manca l'ID o il nome del pacchetto." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Non sei autorizzato a modificare questo commento." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Il commento è stato rimosso." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Il commento non può essere vuoto." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Il commento è stato inserito." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Devi autenticarti prima di poter modificare le informazioni del pacchetto." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Manca l'ID del commento." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Non possono essere evidenziati più di 5 commenti." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Non sei autorizzato ad inserire questo commento." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Non sei autorizzato a rimuovere questo commento." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Il commento è ora in evidenza." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "I commenti non sono più in evidenza." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." -msgstr "Si è verificato un errore durante il recupero dei dettagli del pacchetto." +msgstr "" +"Si è verificato un errore durante il recupero dei dettagli del pacchetto." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Impossibile trovare i dettagli del pacchetto." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "Intestazione Referer non valida." - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "Non hai selezionato nessun pacchetto su cui essere notificato." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "Le notifiche sui pacchetti selezionati sono state attivate." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "Non hai selezionato nessun pacchetto a cui disattivare la notifica." - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "Un pacchetto fra quelli selezionati non ha notifiche attive." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "Le notifiche sui pacchetti selezionati sono state disattivate." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Devi autenticarti prima di poter contrassegnare i pacchetti." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." -msgstr "Non hai selezionato nessun pacchetto da contrassegnare come non aggiornato." +msgstr "" +"Non hai selezionato nessun pacchetto da contrassegnare come non aggiornato." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "I pacchetti selezionati non sono stati contrassegnati, immetti un commento." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "I pacchetti selezionati sono stati contrassegnati come non aggiornati." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." -msgstr "Devi autenticarti prima di poter rimuovere il contrassegno ai pacchetti." +msgstr "" +"Devi autenticarti prima di poter rimuovere il contrassegno ai pacchetti." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." -msgstr "Non hai selezionato nessun pacchetto da contrassegnare come aggiornato." +msgstr "" +"Non hai selezionato nessun pacchetto da contrassegnare come aggiornato." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "I pacchetti selezionati non sono più contrassegnati." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Non hai il permesso per eliminare i pacchetti." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Non hai selezionato nessun pacchetto da eliminare." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "Uno dei pacchetti che hai selezionato non esiste." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "I pacchetti selezionati sono stati eliminati." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." -msgstr "Devi autenticarti prima di poter adottare i pacchetti." +msgstr "Devi autenticarti prima di poter adottare dei pacchetti." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "Non sei autorizzato ad adottare uno dei pacchetti selezionati." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Devi autenticarti prima di poter abbandonare i pacchetti." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "Non sei autorizzato ad abbandonare uno dei pacchetti selezionati." - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Non hai selezionato nessun pacchetto da adottare." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Non hai selezionato nessun pacchetto da abbandonare." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "I pacchetti selezionati sono stati adottati." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "I pacchetti selezionati sono stati abbandonati." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Devi autenticarti prima di poter votare i pacchetti." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Devi autenticarti prima di poter rimuovere il voto dai pacchetti." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Non hai selezionato nessun pacchetto a cui assegnare il voto." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "I voti sono stati rimossi dai pacchetti selezionati." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "I voti sono stati assegnati ai pacchetti selezionati." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Impossibile aggiungere alla lista delle notifiche." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Sei stato aggiunto alla lista delle notifiche dei commenti di %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Sei stato rimosso dalla lista delle notifiche dei commenti di %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Non sei autorizzato a ripristinare questo commento." +msgid "You must be logged in before you can edit package information." +msgstr "" +"Devi autenticarti prima di poter modificare le informazioni del pacchetto." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Il commento è stato ripristinato." +msgid "Missing comment ID." +msgstr "Manca l'ID del commento." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Non sei autorizzato a rimuovere questo commento." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Il commento è stato rimosso." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "I commenti sono stati modificati." +msgid "You are not allowed to delete this comment." +msgstr "Non puoi rimuovere questo commento." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Non sei autorizzato a modificare le parole chiave di questo pacchetto base." +msgid "Missing category ID." +msgstr "Manca l'ID della categoria." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Le parole chiave del pacchetto base sono state aggiornate." +msgid "Invalid category ID." +msgstr "L'ID della categoria non è valido." + +msgid "You are not allowed to change this package category." +msgstr "Non puoi modificare la categoria di questo pacchetto." + +msgid "Package category changed." +msgstr "La categoria del pacchetto è stata modificata." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Non sei autorizzato a gestire i co-manutentori di questo pacchetto base." +msgstr "" +"Non sei autorizzato a gestire i co-manutentori di questo pacchetto base." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "Il nome utente non è valido: %s" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "I co-menutentori del pacchetto base sono stati aggiornati." -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" -msgstr "Mostra i dettagli dei pacchetti di" +msgstr "Visualizza i dettagli dei pacchetti di" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "richiede %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "Devi autenticarti per richiedere i pacchetti." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Il nome non è valido: sono consentite solo le lettere minuscole." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "Il campo dei commenti non deve essere vuoto." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Il tipo di richiesta non è valido." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "La richiesta è stata aggiunta con successo." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Il motivo non è valido." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "Solo i TU e gli sviluppatori possono chiudere le richieste." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "La richiesta è stata chiusa con successo." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Puoi usare questo modulo per eliminare definitivamente da AUR l'account %s." +msgstr "" +"Puoi usare questo modulo per eliminare definitivamente l'account %s di AUR." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sATTENZIONE%s: questa azione non può essere incompiuta." -#: template/account_delete.php msgid "Confirm deletion" -msgstr "Conferma la rimozione" +msgstr "Conferma l'eliminazione" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Nome utente" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Tipo di account" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Utente" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Sviluppatore" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "Manutentore del pacchetto e sviluppatore" +msgid "Trusted User & Developer" +msgstr "Trusted User e Sviluppatore" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Indirizzo email" -#: template/account_details.php -msgid "hidden" -msgstr "nascosto" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Nome reale" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Homepage" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Nick IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Fingerprint della chiave PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Stato" -#: template/account_details.php msgid "Inactive since" msgstr "Inattivo da" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Attivo" -#: template/account_details.php -msgid "Registration date:" -msgstr "Data di registrazione:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "sconosciuta" - -#: template/account_details.php msgid "Last Login" msgstr "Ultimo accesso" -#: template/account_details.php msgid "Never" msgstr "Mai" -#: template/account_details.php msgid "View this user's packages" -msgstr "Mostra i pacchetti di quest'utente" +msgstr "Visualizza i pacchetti di quest'utente" -#: template/account_details.php msgid "Edit this user's account" -msgstr "Modifica l'account di quest'utente" +msgstr "Modifica l'account di questo utente" -#: template/account_details.php -msgid "List this user's comments" -msgstr "Elenca i commenti di questo utente" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Clicca %squi%s se vuoi eliminare definitivamente questo account." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Click %squì%s per visualizzare i dettagli dell'utente." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Clicca %squi%s per elencare i commenti inseriti da questo account." - -#: template/account_edit_form.php msgid "required" msgstr "obbligatorio" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Il tuo nome utente è il nome che userai per l'accesso. È visibile al pubblico, anche se il tuo account non è attivo." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Utente normale" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "TU" + msgid "Account Suspended" msgstr "Account sospeso" -#: template/account_edit_form.php msgid "Inactive" msgstr "Inattivo" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Assicurati di immettere correttamente il tuo indirizzo email, altrimenti sarai bloccato." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Nascondi l'indirizzo email" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "Se non nascondi il tuo indirizzo email, sarà visibile a tutti gli utenti registrati su AUR. Se nascondi il tuo indirizzo email, sarà visibile solo ai membri dello staff di Arch Linux." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Indirizzo email di scorta" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "Puoi fornire un secondo indirizzo email che potrà essere usato per ripristinare il tuo account, nel caso tu perdessi l'accesso al tuo indirizzo email primario." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "I link per resettare la password vengono sempre inviati ad entrambi i tuoi indirizzi email, primario e di scorta." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "Il tuo indirizzo email di scorta è sempre visibile soltanto ai membri dello staff di Arch Linux, indipendentemente dall'impostazione %s." - -#: template/account_edit_form.php -msgid "Language" -msgstr "Lingua" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Fuso orario" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Se vuoi cambiare la tua password, inseriscine una nuova e confermala digitandola di nuovo." - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Riscrivi la password" -#: template/account_edit_form.php +msgid "Language" +msgstr "Lingua" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "La seguente informazione è richiesta solo se vuoi inviare i pacchetti nell'Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." +msgstr "" +"La seguente informazione è richiesta solo se vuoi inviare i pacchetti " +"nell'Arch User Repository." -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "Specifica più chiavi SSH separate da una nuova riga, le linee vuote saranno ignorate." - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "Nascondi commenti eliminati" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "Chiave pubblica SSH" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Impostazioni delle notifiche" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Notifica dei nuovi commenti" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Notifica degli aggiornamenti dei pacchetti" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Notifica dei cambiamenti di proprietà" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "Per confermare le modifiche al profilo, inserisci la tua password:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "La tua password attuale" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "Per proteggere AUR contro la creazione automatica di account, ti chiediamo gentilmente di fornire l'output del seguente comando:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Rispondi" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Aggiorna" -#: template/account_edit_form.php msgid "Create" msgstr "Crea" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Cancella" -#: template/account_search_results.php msgid "No results matched your search criteria." -msgstr "Nessun risultato corrisponde ai tuoi criteri di ricerca." +msgstr "Nessun risultato corrisponde ai criteri della ricerca." -#: template/account_search_results.php msgid "Edit Account" msgstr "Modifica l'account" -#: template/account_search_results.php msgid "Suspended" msgstr "Sospeso" -#: template/account_search_results.php msgid "Edit" msgstr "Modifica" -#: template/account_search_results.php msgid "Less" msgstr "Precedente" -#: template/account_search_results.php msgid "More" msgstr "Successivo" -#: template/account_search_results.php msgid "No more results to display." -msgstr "Non vi sono ulteriori risultati da mostrare." +msgstr "Non vi sono ulteriori risultati da visualizzare." + +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "Gestisci i co-manutentori: %s" -#: template/comaintainers_form.php #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Usa questo modulo per aggiungere i co-manutentori di %s%s%s (un nome utente per linea):" +msgstr "" +"Usa questo modulo per aggiungere i co-manutentori di %s%s%s (un nome utente " +"per linea):" -#: template/comaintainers_form.php msgid "Users" msgstr "Utenti" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "Salva" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Commento per la segnalazione come Non Aggiornato: %s" +msgid "My Packages" +msgstr "I miei pacchetti" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s segnalato %s%s%s come non aggiornato su %s%s%s per il seguente motivo:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s non è segnalato come non aggiornato." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Ritorna ai dettagli" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d aurweb Development Team." - -#: template/header.php msgid " My Account" msgstr "Il mio account" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Registrati" + +msgid "unknown" +msgstr "sconosciuta" + +msgid "Package Base Details" +msgstr "Dettagli del pacchetto base" + msgid "Package Actions" msgstr "Azioni del pacchetto" -#: template/pkgbase_actions.php msgid "View PKGBUILD" -msgstr "Mostra il PKGBUILD" +msgstr "Visualizza il PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "Mostra le modifiche" +msgstr "Mostra i cambiamenti" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "Scarica lo snapshot" -#: template/pkgbase_actions.php msgid "Search wiki" -msgstr "Cerca nel wiki" +msgstr "Cerca nella wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Segnalato come non aggiornato (%s)" +msgid "Flagged out-of-date" +msgstr "Il pacchetto non è aggiornato" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Segnala che il pacchetto non è aggiornato" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Rimuovi la segnalazione del pacchetto" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Rimuovi il voto" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Vota per questo pacchetto" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Disabilita le notifiche" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Abilita le notifiche" +msgid "Notify of new comments" +msgstr "Notifica dei nuovi commenti" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" msgstr "Gestisci i co-manutentori" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d richiesta in attesa" msgstr[1] "%d richieste in attesa" -msgstr[2] "%d richieste in attesa" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Elimina il pacchetto" + +msgid "Merge Package" +msgstr "Unisci il pacchetto" + msgid "Adopt Package" msgstr "Adotta il pacchetto" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Dettagli del pacchetto base" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "Git Clone URL" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "sola lettura" +msgid "Category" +msgstr "Categoria" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "clicca per copiare" +msgid "Change category" +msgstr "Cambia la categoria" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Parole chiave" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Contributore" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Visualizza le informazioni dell'account %s" + msgid "Maintainer" msgstr "Manutentore" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Ultimo pacchettizzatore" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Voti" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popolarità" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Data del primo invio" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Ultimo aggiornamento" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Modifica il commento di: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Aggiungi un commento" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "Gli identificatori dei commit Git nel repository dei pacchetti AUR e le URL vengono convertiti automaticamente in link." +msgid "Comment has been added." +msgstr "Il commento è stato inserito." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "La %ssintassi Markdown%s è parzialmente supportata." +msgid "View all comments" +msgstr "Vedi tutti i commenti" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Commenti in evidenza" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Ultimi commenti" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Commenti per" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s ha commentato il %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Commento anonimo su %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "Ha commentato sul pacchetto %s il %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "eliminato il %s da %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "eliminato il %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "modificato il %s da %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "modificato il %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Ripristina commento" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Rimuovi il commento" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Inserisci il commento" +#, php-format +msgid "Comment by %s" +msgstr "Commento inviato da %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Elimina il commento" +msgid "Anonymous comment" +msgstr "Commento anonimo" + +msgid "deleted" +msgstr "eliminato" + +msgid "All comments" +msgstr "Tutti i commenti" -#: template/pkg_details.php msgid "Package Details" msgstr "Dettagli del pacchetto" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Pacchetto base" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Descrizione" -#: template/pkg_details.php msgid "Upstream URL" msgstr "URL dell'upstream" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Visita il sito web di" -#: template/pkg_details.php msgid "Licenses" msgstr "Licenze" -#: template/pkg_details.php msgid "Groups" msgstr "Gruppi" -#: template/pkg_details.php msgid "Conflicts" msgstr "Conflitti" -#: template/pkg_details.php msgid "Provides" msgstr "Fornisce" -#: template/pkg_details.php msgid "Replaces" msgstr "Rimpiazza" -#: template/pkg_details.php msgid "Dependencies" msgstr "Dipendenze" -#: template/pkg_details.php msgid "Required by" msgstr "Richiesto da" -#: template/pkg_details.php msgid "Sources" msgstr "Sorgenti" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Chiudi la richiesta: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "Usa questo modulo per chiudere la richiesta del pacchetto base %s%s%s." -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "Nota" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Il campo dei commenti può essere lasciato vuoto. Tuttavia, è consigliabile aggiungere un commento quando non si accetta una richiesta." +msgstr "" +"Il campo dei commenti può essere lasciato vuoto. Tuttavia, è consigliabile " +"aggiungere un commento quando non si accetta una richiesta." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Motivo" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Accettato" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Rifiutato" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Commenti" + +#, php-format +msgid "File Request: %s" +msgstr "Richiesta di file: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Usa questo modulo per inviare una richiesta per il pacchetto base %s%s%s che include i seguenti pacchetti:" +msgstr "" +"Usa questo modulo per inviare una richiesta per il pacchetto base %s%s%s che " +"include i seguenti pacchetti:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Tipo di richiesta" -#: template/pkgreq_form.php msgid "Deletion" -msgstr "Elimina" +msgstr "Eliminazione" -#: template/pkgreq_form.php msgid "Orphan" -msgstr "Abbandona" +msgstr "Orfano" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Unisci con" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "Inviando una richiesta di cancellazione, si chiede al manutentore del pacchetto di eliminare la base del pacchetto. Questo tipo di richiesta dovrebbe essere usata per i duplicati, per il software abbandonato dall'upstream, per i pacchetti illegali e per quelli non più funzionanti." - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "Inviando una richiesta di unione, si chiede al manutentore di eliminare un pacchetto e di trasferire i suoi voti ed i commenti ad un altro pacchetto. L'unione di un pacchetto non influisce sui repository Git corrispondenti. Assicuratevi di aggiornare voi stessi la cronologia Git del pacchetto di destinazione." - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "Inviando una richiesta di abbandono di un pacchetto, si chiede ad un manutentore di abbandonarlo. Si prega di farlo solo se il pacchetto necessita di un intervento del manutentore, se il manutentore è irreperibile e se si è già provato a contattarlo in precedenza." - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Nessuna richiesta corrisponde ai tuoi criteri di ricerca." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "È stato trovato %d pacchetto." msgstr[1] "Sono stati trovati %d pacchetti." -msgstr[2] "Sono stati trovati %d pacchetti." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." -msgstr "Pagina %d di %d." +msgstr "Pagina %d du %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Pacchetto" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Inviato da" -#: template/pkgreq_results.php msgid "Date" msgstr "Data" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d giorno rimanente" -msgstr[1] "~%d giorni rimanenti" -msgstr[2] "~%d giorni rimanenti" +msgid "~%d days left" +msgstr "~%d giorni rimanenti" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "~%d ora rimanente" msgstr[1] "~%d ore rimanenti" -msgstr[2] "~%d ore rimanenti" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "<1 ora rimanente" -#: template/pkgreq_results.php msgid "Accept" msgstr "Accetta" -#: template/pkgreq_results.php msgid "Locked" msgstr "Bloccato" -#: template/pkgreq_results.php msgid "Close" msgstr "Chiudi" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "In sospeso" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Chiuso" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Nome, descrizione" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Solo il nome" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Nome esatto" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Pacchetto base esatto" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Co-mantenitore" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Mantenitore, Co-mantenitore" - -#: template/pkg_search_form.php msgid "All" msgstr "Tutti" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Non aggiornati" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Aggiornati" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Nome" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "Popolarità" + msgid "Voted" msgstr "Votato" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Ultima modifica" +msgid "Age" +msgstr "Data" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Ascendente" -#: template/pkg_search_form.php msgid "Descending" msgstr "Discendente" -#: template/pkg_search_form.php msgid "Enter search criteria" -msgstr "Seleziona i criteri di ricerca" +msgstr "Inserisci un criterio di ricerca" + +msgid "Any" +msgstr "Qualsiasi" -#: template/pkg_search_form.php msgid "Search by" msgstr "Cerca per" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Parole chiave" + msgid "Out of Date" msgstr "Non aggiornati" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Ordina per" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Ordina in modo" -#: template/pkg_search_form.php msgid "Per page" msgstr "Per pagina" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" -msgstr "Cerca" +msgstr "Vai" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Orfani" -#: template/pkg_search_results.php msgid "Error retrieving package list." -msgstr "Si è verificato un errore durante il recupero della lista dei pacchetti." +msgstr "" +"Si è verificato un errore durante il recupero della lista dei pacchetti." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." -msgstr "Nessun pacchetto corrisponde ai tuoi criteri di ricerca." +msgstr "Nessun pacchetto corrisponde ai criteri della ricerca." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "È stato trovato %d pacchetto." msgstr[1] "Sono stati trovati %d pacchetti." -msgstr[2] "Sono stati trovati %d pacchetti." -#: template/pkg_search_results.php msgid "Version" msgstr "Versione" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "La popolarità è calcolata come somma di tutti i voti ponderati con un fattore di %.2f al giorno dalla sua creazione." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Sì" -#: template/pkg_search_results.php msgid "orphan" msgstr "orfano" -#: template/pkg_search_results.php msgid "Actions" msgstr "Azioni" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Il pacchetto non è aggiornato" + msgid "Unflag Out-of-date" msgstr "Il pacchetto è aggiornato" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adotta il pacchetto" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Abbandona il pacchetto" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Elimina il pacchetto" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Conferma" -#: template/search_accounts_form.php msgid "Any type" msgstr "Qualsiasi tipo" -#: template/search_accounts_form.php msgid "Search" msgstr "Cerca" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Statistiche" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Pacchetti orfani" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Pacchetti aggiunti negli ultimi 7 giorni" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Pacchetti aggiornati negli ultimi 7 giorni" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Pacchetti aggiornati nell'ultimo anno" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Pacchetti mai aggiornati" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Utenti registrati" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "Manutentori del pacchetto" +msgid "Trusted Users" +msgstr "TU" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Aggiornamenti recenti" -#: template/stats/updates_table.php -msgid "more" -msgstr "di più" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Le mie statistiche" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Pacchetti in unsupported" + msgid "Proposal Details" msgstr "Dettagli della proposta" -#: template/tu_details.php msgid "This vote is still running." msgstr "Questa votazione è ancora in corso." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Inviato: %s da %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Fine" -#: template/tu_details.php msgid "Result" msgstr "Risultato" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "No" -#: template/tu_details.php msgid "Abstain" msgstr "Astenuto" -#: template/tu_details.php msgid "Total" msgstr "Totale" -#: template/tu_details.php msgid "Participation" msgstr "Partecipazione" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" -msgstr "Ultimi voti dei TU" +msgstr "Ultimi voti dai TU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Ultimo voto" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "La ricerca non ha prodotto nessun risultato." -#: template/tu_list.php msgid "Start" msgstr "Home" -#: template/tu_list.php msgid "Back" msgstr "Precedente" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "Ripristino della password di AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "È stata inviata una richiesta per ripristinare la password dell'account {user} associato al tuo indirizzo email. Se desideri ripristinare la tua password, clicca sul link [1] sottostante, altrimenti ignora questo messaggio e non succederà nulla." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Benvenuto nell' Arch User Repository" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Benvenuto nell' Arch User Repository! Per impostare una password iniziale per il tuo nuovo account, clicca sul link [1] sottostante. Se il link non funzionasse, prova a copiarlo e ad incollarlo nella barra degli indirizzi del tuo browser." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "Commento AUR per {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] ha commentato su {pkgbase} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Se non vuoi più ricevere notifiche su questo pacchetto, vai alla pagina del pacchetto [2] e seleziona \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "Aggiornamento del pacchetto base: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] ha inviato un nuovo commit su {pkgbase} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "Notifica AUR per il pacchetto {pkgbase} non aggiornato" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Il tuo pacchetto {pkgbase} [1] è stato marcato come non aggiornato dall'utente {user} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "Notifica AUR di proprietà del pacchetto {pkgbase} " - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "Il pacchetto {pkgbase} [1] è stato adottato da {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "Il pacchetto {pkgbase} [1] è stato abbandonato da {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "Notifica AUR di co-manutenzione per il pacchetto {pkgbase} " - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "Sei stato aggiunto alla lista dei co-manutentori di {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "Sei stato rimosso dalla lista dei co-manutentori di {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "Pacchetto AUR eliminato: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] ha unito {old} [2] in {new} [3].\n\n-- \nSe non desideri più ricevere notifiche sul nuovo pacchetto, vai a [3] e clicca su \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] ha eliminato {pkgbase} [2].\n\nNon riceverai più notifiche per questo pacchetto." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "Promemoria per il voto del manutentore dei pacchetti: proposta {id}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Ricordati di votare la proposta di {id} [1]. La finestra di voto si chiude fra meno di 48 ore." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "L' account fornito non è valido." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "Non hai il permesso per modificare il tipo di account." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "Non hai il permesso per modificare il tipo di account di questo utente in %s." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "Non ci sono richieste di abbandono da accettare per %s." - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "Errore interno del server" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "Si è verificato un errore irreversibile." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "I dettagli sono stati registrati e verranno visionati al più presto dal postmaster. Ci scusiamo per gli eventuali disagi causati." - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "Errore del server di AUR" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "Commenti relativi alla richiesta di chiusura del pacchetto..." - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "Questa azione chiuderà tutte le richieste in sospeso dei pacchetti ad essa correlate. Se %scommenti%s vengono omessi, verrà generato automaticamente un commento di chiusura." - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "assegnato" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "Mostra altri %d" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "dipendenze" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "L'account non è stato eliminato, selezionare la casella di conferma." - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "Annulla" - -#: templates/requests.html -msgid "Package name" -msgstr "Nome del pacchetto" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "Si noti che, se si nasconde il proprio indirizzo e-mail, esso finirà nell'elenco BCC per qualsiasi notifica di richiesta. Nel caso in cui qualcuno risponda a queste notifiche, non si riceverà un'e-mail. Tuttavia, le risposte sono tipicamente inviate alla lista di discussione e saranno, quindi, visibili nell'archivio." diff --git a/po/ja.po b/po/ja.po index 4d356963..7d300a6b 100644 --- a/po/ja.po +++ b/po/ja.po @@ -1,2373 +1,1336 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# kusakata, 2013 -# kusakata, 2013 -# kusakata, 2013-2018,2020-2022 -# 尾ノ上卓朗 , 2017 +# kusakata , 2013 +# kusakata , 2013 +# kusakata , 2013-2014 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: kusakata, 2013-2018,2020-2022\n" -"Language-Team: Japanese (http://app.transifex.com/lfleischer/aurweb/language/ja/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Japanese (http://www.transifex.com/projects/p/aur/language/" +"ja/)\n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: html/404.php msgid "Page Not Found" msgstr "ページが見つかりませんでした" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "あなたがリクエストしたページは存在しませんでした。" -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "ノート" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Git のクローン URL はブラウザで開いてはいけません。" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "%s の Git リポジトリを複製するには、%s を実行してください。" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "%sこちら%sをクリックすると %s の詳細ページに戻ります。" - -#: html/503.php msgid "Service Unavailable" -msgstr "サービスは利用できません。" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "落ち着いて下さい!このサイトはメンテナンスのためにダウンしています。すぐに復帰する予定です。" +msgstr "" -#: html/account.php msgid "Account" msgstr "アカウント" -#: html/account.php template/header.php msgid "Accounts" msgstr "アカウント" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "このページへのアクセスは許可されていません。" -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "指定のユーザーの情報が取得できませんでした。" -#: html/account.php msgid "You do not have permission to edit this account." msgstr "あなたはこのアカウントを編集する権利を持っていません。" -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "不正なパスワード。" - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "アカウントの検索はこのフォームを使って下さい。" -#: html/account.php msgid "You must log in to view user information." msgstr "ユーザー情報を見るにはログインする必要があります。" -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "このフォームを使ってアカウントを作成してください。" + msgid "Add Proposal" msgstr "提案を追加する" -#: html/addvote.php msgid "Invalid token for user action." msgstr "アクションの不正なトークン。" -#: html/addvote.php msgid "Username does not exist." msgstr "ユーザー名が存在しません。" -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s はすでにその提案を持っています。" -#: html/addvote.php msgid "Invalid type." msgstr "不正なタイプ。" -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "提案が空です。" -#: html/addvote.php msgid "New proposal submitted." msgstr "新しい提案が投稿されました。" -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "採決する提案を提出してください。" -#: html/addvote.php msgid "Applicant/TU" msgstr "候補者/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(適当なものがない場合は空に)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "タイプ" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "TU の追加" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "TU の削除" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "TU の削除 (undeclared inactivity)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "規約の修正" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "提案" -#: html/addvote.php msgid "Submit" msgstr "投稿" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "共同メンテナの管理" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "コメントを編集" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "ダッシュボード" - -#: html/home.php template/header.php msgid "Home" msgstr "ホーム" -#: html/home.php -msgid "My Flagged Packages" -msgstr "自分のフラグが立っているパッケージ" - -#: html/home.php -msgid "My Requests" -msgstr "自分のリクエスト" - -#: html/home.php -msgid "My Packages" -msgstr "自分のパッケージ" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "メンテしているパッケージを検索" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "共同メンテしているパッケージ" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "共同メンテしているパッケージを検索" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"AUR にようこそ!AUR についての詳しい情報は %sAUR User Guidelines%s や %sAUR " +"TU Guidelines%s を読んで下さい。" -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "PKGBUILD を投稿するつもりならば%s必ず%s %sArch Packaging Standards%s に従って下さい。従っていないパッケージは削除されます!" +msgstr "" +"PKGBUILD を投稿するつもりならば%s必ず%s %sArch Packaging Standards%s に従って" +"下さい。従っていないパッケージは削除されます!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "お気に入りのパッケージに投票しましょう!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "パッケージがバイナリとして [extra] で提供されることになるかもしれません。" +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"パッケージがバイナリとして [community] で提供されることになるかもしれません。" -#: html/home.php msgid "DISCLAIMER" msgstr "免責事項" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "AUR のパッケージはユーザーによって作成されたものです。自己責任で使用して下さい。" +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"ユーザーが作成したパッケージにサポートはありません。それぞれのファイルの利用" +"は自己責任でお願いします。" -#: html/home.php -msgid "Learn more..." -msgstr "詳細..." - -#: html/home.php msgid "Support" -msgstr "サポート" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "パッケージリクエスト" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "各パッケージの詳細ページにある%sパッケージアクション%sボックスから送信することができるリクエストは3種類あります:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "孤児リクエスト" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "パッケージを孤児にするようにリクエストします。メンテナが活動を停止していてパッケージが長い間 out-of-date のまま放置されている場合などに使います。" - -#: html/home.php -msgid "Deletion Request" -msgstr "削除リクエスト" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "マージリクエスト" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "あるパッケージを他のパッケージとマージするようにリクエストします。パッケージの名前を変更する必要があるときや分割パッケージによって置き換えるときに使用します。" +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "リクエストについて議論したい場合、%saur-requests%s メーリングリストを使います。ただし、このメーリングリスト宛にリクエストを送るのは止めて下さい。" +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "パッケージの投稿" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "現在 AUR にパッケージを送信するときは SSH を介して Git を使うことになっています。詳しくは ArchWiki の Arch User Repository のページの%sパッケージの投稿%sセクションを見て下さい。" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "AUR では以下の SSH フィンガープリントが使われます:" - -#: html/home.php msgid "Discussion" msgstr "議論" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "バグレポート" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "パッケージ検索" -#: html/index.php msgid "Adopt" msgstr "承継" -#: html/index.php msgid "Vote" msgstr "投票" -#: html/index.php msgid "UnVote" msgstr "投票を削除" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "通知" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "通知を削除" -#: html/index.php +msgid "Flag" +msgstr "フラグ" + msgid "UnFlag" msgstr "フラグを降ろす" -#: html/login.php template/header.php msgid "Login" msgstr "ログイン" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "ログイン中: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "ログアウト" -#: html/login.php msgid "Enter login credentials" msgstr "ログイン情報を入力してください" -#: html/login.php -msgid "User name or primary email address" -msgstr "ユーザー名またはメインのメールアドレス" +msgid "Username" +msgstr "ユーザー名" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "パスワード" -#: html/login.php msgid "Remember me" msgstr "ログインしたままにする" -#: html/login.php msgid "Forgot Password" msgstr "パスワードを忘れた" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "HTTP ログインはできません。ログインするには %sHTTPs%s に切り替えてください。" +msgstr "" +"HTTP ログインはできません。ログインするには %sHTTPs%s に切り替えてください。" -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "検索条件" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "パッケージ" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "パッケージの詳細の取得エラー。" -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "必須項目が埋められていません。" -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "パスワードが一致しません。" -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "パスワードは最低でも %s 文字以上必要です。" -#: html/passreset.php msgid "Invalid e-mail." msgstr "不正なメールアドレス。" -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "パスワードのリセット" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "メールをチェックして確認リンクを開いて下さい。" -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "パスワードのリセットが成功しました。" -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "ユーザー名またはメインのメールアドレスの確認:" +msgid "Confirm your e-mail address:" +msgstr "メールアドレスの確認:" -#: html/passreset.php msgid "Enter your new password:" msgstr "新しいパスワードを入力:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "新しいパスワードを再入力:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "続行" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "登録したときに使用したユーザー名とメインのメールアドレスを忘れてしまった場合、メッセージを %saur-general%s メーリングリストに送信してください。" +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"登録したメールアドレスを忘れてしまった場合は、%saur-general%s メーリングリス" +"トにメッセージを送って下さい。" -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "ユーザー名またはメインのメールアドレスを入力:" +msgid "Enter your e-mail address:" +msgstr "メールアドレスを入力:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "パッケージベース" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "選択されたパッケージは孤児になっていません。確認チェックボックスにチェックを入れて下さい。" +msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "選択されたパッケージはまだ継承されていません。確認チェックボックスにチェックを入れてください。" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "投票やコメントのマージをするパッケージが見つかりません。" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "パッケージベースをそれ自体とマージすることはできません。" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "選択されたパッケージは削除されませんでした、確認チェックボックスにチェックを入れてください。" +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"選択されたパッケージは削除されませんでした、確認チェックボックスにチェックを" +"入れてください。" -#: html/pkgdel.php msgid "Package Deletion" msgstr "パッケージの削除" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "パッケージを削除" +#, php-format +msgid "Delete Package: %s" +msgstr "削除するパッケージ: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "AUR からパッケージベース %s%s%s と以下のパッケージを削除するにはこのフォームを使って下さい:" +msgstr "" +"AUR からパッケージベース %s%s%s と以下のパッケージを削除するにはこのフォーム" +"を使って下さい:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "パッケージの削除は戻すことができません。" -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "アクションを確認するためにチェックボックスを選択してください。" -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "パッケージ削除の確認" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "削除" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Trusted User と開発者だけがパッケージを削除できます。" -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "パッケージの放棄" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "このフォームを使って以下のパッケージを含むパッケージベース %s%s%s を孤児にすることができます:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "チェックボックスを選択して、パッケージの共同メンテナから降りることを確定してください。" - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "チェックボックスを選択して、パッケージを孤児にして所有権を %s%s%s に移すことを確定して下さい。" +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "チェックボックスを選択して、パッケージを孤児にすることを確定してください。" +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "パッケージを孤児にすることの確認" +msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "放棄" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "コメントのフラグを立てる" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "パッケージの Out-Of-Date フラグを立てる" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "このパッケージは VCS パッケージです。AUR 上のパッケージのバージョンと最新のコミットが一致してない場合でも out-of-date フラグを%s立てないでください%s。フラグを立てていいのはソースが変わってしまった場合や上流の変更によって PKGBUILD に変更が必要な場合だけです。" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "このフォームを使ってパッケージベース %s%s%s と以下のパッケージの out-of-date フラグを立てます:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "このフォームはバグを報告するためのものでは%sありません%s。バグを報告するときはパッケージのコメント欄を使って下さい。" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "以下にパッケージが out-of-date となっている理由を記述してください。なるべくリリースアナウンスや最新の tarball へのリンクも書きましょう。" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "コメント" - -#: html/pkgflag.php -msgid "Flag" -msgstr "フラグ" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "パッケージの out-of-date フラグを立てることができるのは登録済みのユーザーだけです。" - -#: html/pkgmerge.php msgid "Package Merging" msgstr "パッケージのマージ" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "パッケージのマージ" +#, php-format +msgid "Merge Package: %s" +msgstr "マージするパッケージ: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "他のパッケージにパッケージベース %s%s%s をマージするにはこのフォームを使って下さい。" +msgstr "" +"他のパッケージにパッケージベース %s%s%s をマージするにはこのフォームを使って" +"下さい。" -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "次のパッケージが削除されます:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "一度パッケージがマージされると戻すことはできません。" -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "このパッケージをマージしたいパッケージ名を入力してください。" -#: html/pkgmerge.php msgid "Merge into:" msgstr "マージ先:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "パッケージマージの確認" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "マージ" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Trusted User と開発者だけがパッケージをマージできます。" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "リクエストを送信" +msgid "File Request" +msgstr "リクエストを送る" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "リクエストをクローズ" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "最初" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "前へ" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "次へ" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "最後" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "リクエスト" -#: html/register.php template/header.php -msgid "Register" -msgstr "登録" +msgid "Trusted User" +msgstr "Trusted User" -#: html/register.php -msgid "Use this form to create an account." -msgstr "このフォームを使ってアカウントを作成してください。" - -#: html/tos.php -msgid "Terms of Service" -msgstr "利用規約" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "以下の文章は更新されています。注意して読んでください:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "改訂 %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "私は上記の利用規約を承認します。" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "提案内容が取得できませんでした。" -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "この提案への投票は締め切られています。" -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Trusted User だけが投票できます。" -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "あなたについての提案に投票することはできません。" -#: html/tu.php msgid "You've already voted for this proposal." msgstr "既にこの提案に投票しています。" -#: html/tu.php msgid "Vote ID not valid." msgstr "投票 ID が不正です。" -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "現在の投票" -#: html/tu.php msgid "Past Votes" msgstr "過去の投票" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "投票者" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "スパムのために、あなたのIPアドレスからアカウント登録はできません。ご迷惑をおかけして申し訳ございません。" +msgstr "" +"スパムのために、あなたのIPアドレスからアカウント登録はできません。ご迷惑をお" +"かけして申し訳ございません。" -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "ユーザー ID の消失" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "ユーザー名が不正です。" -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "文字の長さは %s から %s の間である必要があります" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "最初と最後の文字は英数字にしてください" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "ピリオド、アンダーライン、ハイフンはひとつだけ含めることができます。" -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "新しいパスワードを確認してください。" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "メールアドレスが不正です。" -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "バックアップメールアドレスが不正です。" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "ホームページが不正です。完全な HTTP(s) URL を入力してください。" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "PGP 鍵のフィンガープリントが不正です。" -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "SSH 公開鍵が不正です。" +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "アカウント権限を増やすことはできません。" -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "言語は現在サポートされていません。" -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "タイムゾーンは現在サポートされていません。" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "%s%s%s というユーザー名は既に使われています。" -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "%s%s%s というメールアドレスは既に使われています。" -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "SSH 公開鍵、%s%s%s は既に使われています。" +msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "CAPTCHA が入力されていません。" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "CAPTCHA の有効期限が切れました。もう一度入力してください。" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "入力された CAPTCHA の答えが合っていません。" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "アカウントの作成エラー、%s%s%s。" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "アカウント %s%s%s の作成が完了しました。" -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "パスワードのリセットキーがあなたのメールアドレスに送られました。" - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "あなたのアカウントを使うには上のログインリンクをクリックして下さい。" -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"%s にようこそ!アカウントのパスワードを設定するために、下のリンクをクリックし" +"てください。リンクを押せないときは、一旦ブラウザにURLをコピーしてください。" + +msgid "A password reset key has been sent to your e-mail address." +msgstr "パスワードのリセットキーがあなたのメールアドレスに送られました。" + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "アカウントに変更は加えられませんでした、%s%s%s。" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "アカウント %s%s%s の修正が完了しました。" -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "スパムのために、現在あなたのIPアドレスからはログインフォームが無効になっています。ご迷惑をおかけして申し訳ございません。" +msgstr "" +"スパムのために、現在あなたのIPアドレスからはログインフォームが無効になってい" +"ます。ご迷惑をおかけして申し訳ございません。" -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "休眠アカウント" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "あなたはアカウントを停止する権限を持っていません。" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "あなたのパスワードはリセットされました。新しいアカウントを作成したときは、確認メールにあるリンクからパスワードを設定してください。もしくは、%sPassword Reset%s ページでリセットキーを申請してください。" +msgstr "" +"あなたのパスワードはリセットされました。新しいアカウントを作成したときは、確" +"認メールにあるリンクからパスワードを設定してください。もしくは、%sPassword " +"Reset%s ページでリセットキーを申請してください。" -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "不正なユーザー名またはパスワードです。" -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "ユーザーセッションの生成時にエラーが発生しました。" -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "メールアドレスとリセットキーの不正な組み合わせ。" -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "なし" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "%s のアカウント情報を見る" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "パッケージベース ID やパッケージベース名が見つかりません。" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "このコメントを編集する権限がありません。" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "コメントが存在しません。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "コメントには何か文字列を記入してください。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "コメントが追加されました。" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "パッケージの情報を編集するにはログインする必要があります。" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "コメント ID が見つかりません。" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "5個までコメントをピン留めできます。" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "このコメントをピン留めする権限がありません。" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "このコメントのピン留めを解除する権限がありません。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "コメントはピン留めされました。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "コメントのピン留めは解除されました。" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "パッケージの詳細の取得エラー。" -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "パッケージの詳細が見つかりませんでした。" -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "不正なリファラヘッダー。" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "通知するパッケージが選ばれていません。" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "選択されたパッケージの通知が有効になりました。" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "通知から外すパッケージが選ばれていません。" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "選択されたパッケージの通知は有効になっていません。" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "選択されたパッケージの通知は解除されました。" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "パッケージのフラグを立てるにはログインする必要があります。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "フラグを立てるパッケージが選ばれていません。" -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "選択されたパッケージはまだフラグが立てられていません、コメントを入力してください。" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "選択されたパッケージの out-of-date フラグが立てられました。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "パッケージのフラグを降ろすにはログインする必要があります。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "フラグを降ろすパッケージが選ばれていません。" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "選択されたパッケージのフラグが降ろされました。" -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "あなたはパッケージを削除する許可を持っていません。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "削除するパッケージが選ばれていません。" -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "存在しないパッケージが選択されています。" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "選択されたパッケージが削除されました。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "パッケージを承継するにはログインする必要があります。" -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "承継できないパッケージが選択されています。" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "パッケージを放棄するにはログインする必要があります。" -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "放棄できないパッケージが選択されています。" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "承継するパッケージが選択されていません。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "放棄するパッケージが選択されていません。" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "選択されたパッケージを承継しました。" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "選択されたパッケージを放棄しました。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "パッケージに投票するにはログインする必要があります。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "パッケージへの投票を取り消すにはログインする必要があります。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "投票するパッケージが選ばれていません。" -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "選択されたパッケージからあなたの投票が削除されました。" -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "選択されたパッケージに投票しました。" -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "通知リストに追加できませんでした。" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "%s がコメントの通知リストに追加されました。" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "%s がコメントの通知リストから削除されました。" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "このコメントを復元する権限がありません。" +msgid "You must be logged in before you can edit package information." +msgstr "パッケージの情報を編集するにはログインする必要があります。" -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "コメントは復元されました。" +msgid "Missing comment ID." +msgstr "コメント ID が見つかりません。" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "このコメントを削除することはできません。" - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "コメントが削除されました。" -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "コメントは編集されました。" +msgid "You are not allowed to delete this comment." +msgstr "このコメントを削除することはできません。" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "このパッケージベースのキーワードを編集することはできません。" +msgid "Missing category ID." +msgstr "カテゴリ ID がありません。" -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "パッケージベースのキーワードは更新されました。" +msgid "Invalid category ID." +msgstr "不正なカテゴリ ID です。" + +msgid "You are not allowed to change this package category." +msgstr "このパッケージのカテゴリを変更することはできません。" + +msgid "Package category changed." +msgstr "パッケージのカテゴリが変更されました。" -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "このパッケージベースの共同メンテナを管理することはできません。" +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "不正なユーザー名: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "パッケージベースの共同メンテナが更新されました。" +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "パッケージの詳細を見る" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "%s が必要" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "パッケージリクエストを送るにはログインする必要があります。" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "不正な名前です: 小文字だけが使用できます。" -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "コメント欄には何か記入して下さい。" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "不正なリクエストの種類。" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "リクエストの追加が完了しました。" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "不正な理由。" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "TU と開発者だけがリクエストをクローズできます。" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "リクエストのクローズが完了しました。" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "このフォームを使って AUR アカウント %s を恒久的に削除することができます。" +msgstr "" +"このフォームを使って AUR アカウント %s を恒久的に削除することができます。" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%s警告%s: この操作は元に戻すことができません。" -#: template/account_delete.php msgid "Confirm deletion" msgstr "削除の確認" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "ユーザー名" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "アカウントタイプ" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "ユーザー" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "開発者" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Trusted User & 開発者" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "メールアドレス" -#: template/account_details.php -msgid "hidden" -msgstr "非公開" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "本名" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "ホームページ" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC ニックネーム" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "PGP 鍵のフィンガープリント" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "状態" -#: template/account_details.php msgid "Inactive since" msgstr "休止開始" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "活動中" -#: template/account_details.php -msgid "Registration date:" -msgstr "登録日:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "不明" - -#: template/account_details.php msgid "Last Login" msgstr "最後のログイン" -#: template/account_details.php msgid "Never" msgstr "Never" -#: template/account_details.php msgid "View this user's packages" msgstr "ユーザーのパッケージを見る" -#: template/account_details.php msgid "Edit this user's account" msgstr "このユーザーのアカウントを編集" -#: template/account_details.php -msgid "List this user's comments" -msgstr "このユーザーのコメントを表示" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "このアカウントを恒久的に削除したい場合は%sこちら%sをクリック。" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "ユーザーの詳細は%sこちら%sをクリック。" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "このアカウントによって作成されたコメントを表示するには %sこちら%s をクリック。" - -#: template/account_edit_form.php msgid "required" msgstr "必須" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "ユーザー名はログインするときに使用する名前です。活動休止中でも一般に公開されます。" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "ノーマルユーザー" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Trusted user" + msgid "Account Suspended" msgstr "休眠アカウント" -#: template/account_edit_form.php msgid "Inactive" msgstr "活動休止" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "入力したメールアドレスが正しいか確認してください。間違っていた場合、アカウントが使えなくなります。" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "メールアドレスを非公開にする" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "メールアドレスを非公開にしない場合、登録されている AUR ユーザー全てから閲覧できる状態になります。メールアドレスを非表示にした場合、Arch Linux のスタッフからしか表示されません。" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "バックアップメールアドレス" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "メールアドレスをふたつ登録することで、メインのメールアドレスが使えなくなってしまった場合にアカウントを復帰することができます。" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "パスワードのリセットリンクはメインとバックアップ両方のメールアドレスに送信されます。" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "%s の設定に関わらず、バックアップメールアドレスを確認できるのは Arch Linux のスタッフメンバーだけです。" - -#: template/account_edit_form.php -msgid "Language" -msgstr "言語" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "タイムゾーン" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "パスワードを変更したい場合、新しいパスワードを入力して、もう一度確認のため新しいパスワードを入力してください。" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "パスワードの再入力" -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "以下の情報は Arch User Repository にパッケージを送信したい場合にのみ必要になります。" +msgid "Language" +msgstr "言語" -#: templates/partials/account_form.html msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "SSH 公開鍵" +msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "通知設定" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "新しいコメントを通知" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "パッケージアップデートの通知" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "所有者の変更の通知" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "プロフィールの変更を確認するため、現在のパスワードを入力してください:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "現在のパスワード" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "機械的なアカウント作成から AUR を保護するため、次のコマンドの出力結果を入力してください:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "答え" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "更新" -#: template/account_edit_form.php msgid "Create" msgstr "作成" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "リセット" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "検索条件に一致する結果が見つかりませんでした。" -#: template/account_search_results.php msgid "Edit Account" msgstr "アカウントを編集" -#: template/account_search_results.php msgid "Suspended" msgstr "休止" -#: template/account_search_results.php msgid "Edit" msgstr "編集" -#: template/account_search_results.php msgid "Less" msgstr "Less" -#: template/account_search_results.php msgid "More" msgstr "More" -#: template/account_search_results.php msgid "No more results to display." msgstr "表示する結果はもうありません。" -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "このフォームを使って %s%s%s の共同メンテナを追加することができます (一行につき一人のユーザー名を入力):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "ユーザー" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "保存" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Out-of-Date フラグが立てられたコメント: %s" +msgid "My Packages" +msgstr "自分のパッケージ" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s は %s%s%s を %s%s%s に以下の理由で out-of-date フラグを立てました:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s は out-of-date フラグが立てられていません。" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "詳細に戻る" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d aurweb Development Team." - -#: template/header.php msgid " My Account" msgstr "アカウント" -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "パッケージアクション" +msgid "Register" +msgstr "登録" -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "PKGBUILD を見る" +msgid "unknown" +msgstr "不明" -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "変更履歴" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "スナップショットのダウンロード" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "wiki を検索" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "out-of-date フラグが立てられています (%s)" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "パッケージの out-of-date フラグを立てる" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "パッケージのフラグを降ろす" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "投票を削除する" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "このパッケージに投票する" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "通知を止める" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "通知を有効にする" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "共同メンテナの管理" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "%d 件の保留リクエスト。" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "パッケージを承継する" - -#: template/pkgbase_details.php msgid "Package Base Details" msgstr "パッケージベースの詳細" -#: template/pkgbase_details.php template/pkg_details.php +msgid "Package Actions" +msgstr "パッケージアクション" + +msgid "View PKGBUILD" +msgstr "PKGBUILD を見る" + +msgid "View Changes" +msgstr "" + +msgid "Download snapshot" +msgstr "" + +msgid "Search wiki" +msgstr "wiki を検索" + +msgid "Flagged out-of-date" +msgstr "out-of-date フラグを立てる" + +msgid "Flag package out-of-date" +msgstr "パッケージの out-of-date フラグを立てる" + +msgid "Unflag package" +msgstr "パッケージのフラグを降ろす" + +msgid "Remove vote" +msgstr "投票を削除する" + +msgid "Vote for this package" +msgstr "このパッケージに投票する" + +msgid "Disable notifications" +msgstr "通知を止める" + +msgid "Notify of new comments" +msgstr "新しいコメントを通知" + +msgid "Manage Co-Maintainers" +msgstr "" + +#, php-format +msgid "%d pending request" +msgid_plural "%d pending requests" +msgstr[0] "%d 個の保留リクエスト。" + +msgid "Delete Package" +msgstr "パッケージを削除" + +msgid "Merge Package" +msgstr "パッケージのマージ" + +msgid "Adopt Package" +msgstr "パッケージを承継する" + msgid "Git Clone URL" -msgstr "Git クローン URL" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "リードオンリー" +msgid "Category" +msgstr "カテゴリ" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "クリックしてコピー" +msgid "Change category" +msgstr "カテゴリの変更" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "キーワード" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "投稿者" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "%s のアカウント情報を見る" + msgid "Maintainer" msgstr "メンテナ" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "最後のパッケージ作成者" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "投票数" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "人気度" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "最初の投稿" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "最終更新" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "コメントを編集: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "コメントを投稿する" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "AUR パッケージリポジトリの Git コミット ID や URL は自動的にリンクに変換されます。" +msgid "Comment has been added." +msgstr "コメントが追加されました。" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "%sMarkdown 構文%s が一部サポートされています。" +msgid "View all comments" +msgstr "全てのコメントを表示" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "ピン留めされたコメント" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "最新のコメント" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "コメント履歴" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s が %s にコメントを投稿しました" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "匿名ユーザーが %s にコメントを投稿しました" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "%s パッケージのコメント欄に %s に投稿したコメント" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "%s によって %s に削除" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "%s に削除" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "%s に %s によって編集" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "%s に編集" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "コメントを復元" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "コメントを削除" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "コメントをピン留めする" +#, php-format +msgid "Comment by %s" +msgstr "%s によるコメント" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "コメントのピン留めを解除" +msgid "Anonymous comment" +msgstr "匿名のコメント" + +msgid "deleted" +msgstr "削除済み" + +msgid "All comments" +msgstr "全てのコメント" -#: template/pkg_details.php msgid "Package Details" msgstr "パッケージの詳細" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "パッケージベース" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "説明" -#: template/pkg_details.php msgid "Upstream URL" msgstr "上流 URL" -#: template/pkg_details.php msgid "Visit the website for" msgstr "ウェブサイトを見る" -#: template/pkg_details.php msgid "Licenses" msgstr "ライセンス" -#: template/pkg_details.php msgid "Groups" msgstr "グループ" -#: template/pkg_details.php msgid "Conflicts" msgstr "衝突" -#: template/pkg_details.php msgid "Provides" msgstr "提供" -#: template/pkg_details.php msgid "Replaces" msgstr "置換" -#: template/pkg_details.php msgid "Dependencies" msgstr "依存パッケージ" -#: template/pkg_details.php msgid "Required by" msgstr "必要としているパッケージ" -#: template/pkg_details.php msgid "Sources" msgstr "ソース" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "クローズリクエスト: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "このフォームを使ってパッケージベース %s%s%s のリクエストをクローズすることができます。" +msgstr "" +"このフォームを使ってパッケージベース %s%s%s のリクエストをクローズすることが" +"できます。" + +msgid "Note" +msgstr "ノート" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "コメント欄は空でもかまいません。ただし、リクエストを却下されたときはコメントを追加することを強く推奨します。" +msgstr "" +"コメント欄は空でもかまいません。ただし、リクエストを却下されたときはコメント" +"を追加することを強く推奨します。" -#: template/pkgreq_close_form.php msgid "Reason" msgstr "理由" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "承認されました" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "却下されました" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "コメント" + +#, php-format +msgid "File Request: %s" +msgstr "リクエストを送る: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "このフォームを使って以下のパッケージを含むパッケージベース %s%s%s にリクエストを送ることができます:" +msgstr "" +"このフォームを使って以下のパッケージを含むパッケージベース %s%s%s にリクエス" +"トを送ることができます:" -#: template/pkgreq_form.php msgid "Request type" msgstr "リクエストの種類" -#: template/pkgreq_form.php msgid "Deletion" msgstr "削除" -#: template/pkgreq_form.php msgid "Orphan" msgstr "孤児" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "マージ" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "検索条件に一致するリクエストがありません。" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "パッケージリクエストが %d 個見つかりました。" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "ページ %d / %d。" -#: template/pkgreq_results.php msgid "Package" msgstr "パッケージ" -#: template/pkgreq_results.php msgid "Filed by" msgstr "送信者" -#: template/pkgreq_results.php msgid "Date" msgstr "日付" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "残り ~%d 日" +msgid "~%d days left" +msgstr "残り ~%d 日" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "残り ~%d 時間" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "残り <1 時間" -#: template/pkgreq_results.php msgid "Accept" msgstr "承認" -#: template/pkgreq_results.php msgid "Locked" msgstr "ロックされています" -#: template/pkgreq_results.php msgid "Close" msgstr "クローズ" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "保留中" - -#: template/pkgreq_results.php msgid "Closed" msgstr "クローズされました" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "名前、説明" -#: template/pkg_search_form.php msgid "Name Only" msgstr "名前のみ" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "名前完全一致" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "パッケージベース完全一致" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "共同メンテナ" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "メンテナ, 共同メンテナ" - -#: template/pkg_search_form.php msgid "All" msgstr "全て" -#: template/pkg_search_form.php msgid "Flagged" msgstr "フラグ付き" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "フラグなし" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "名前" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "投票済" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "最終更新日" +msgid "Age" +msgstr "年齢" -#: template/pkg_search_form.php msgid "Ascending" msgstr "昇順" -#: template/pkg_search_form.php msgid "Descending" msgstr "降順" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "検索条件を入力" -#: template/pkg_search_form.php +msgid "Any" +msgstr "全て" + msgid "Search by" msgstr "検索対象" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "キーワード" + msgid "Out of Date" msgstr "Out of Date" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "ソート" -#: template/pkg_search_form.php msgid "Sort order" msgstr "ソート順" -#: template/pkg_search_form.php msgid "Per page" msgstr "表示件数" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "検索" -#: template/pkg_search_form.php msgid "Orphans" msgstr "孤児のパッケージ" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "パッケージリスト取得エラー。" -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "検索条件に一致するパッケージがありません。" -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "パッケージが %d 個見つかりました。" -#: template/pkg_search_results.php msgid "Version" msgstr "バージョン" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "人気度は各投票にパッケージ作成日からの日数を %.2f 倍した全投票の合計で計算されます。" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "はい" -#: template/pkg_search_results.php msgid "orphan" msgstr "孤児" -#: template/pkg_search_results.php msgid "Actions" msgstr "アクション" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Out-of-date フラグを立てる" + msgid "Unflag Out-of-date" msgstr "Out-of-date フラグを降ろす" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "パッケージの承継" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "パッケージの放棄" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "パッケージの削除" -#: template/pkg_search_results.php msgid "Confirm" msgstr "確認" -#: template/search_accounts_form.php msgid "Any type" msgstr "全てのタイプ" -#: template/search_accounts_form.php msgid "Search" msgstr "検索" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "統計" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "孤児のパッケージ" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "過去7日間で追加されたパッケージ" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "過去7日間で更新されたパッケージ" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "過去1年間で更新されたパッケージ" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "更新されたことがないパッケージ" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "登録ユーザー" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Trusted User" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "最近のアップデート" -#: template/stats/updates_table.php -msgid "more" -msgstr "詳細" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "自分の統計" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "unsupported のパッケージ" + msgid "Proposal Details" msgstr "提案の詳細" -#: template/tu_details.php msgid "This vote is still running." msgstr "投票が実行されています。" -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "投稿: %s by %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "終了" -#: template/tu_details.php msgid "Result" msgstr "結果" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "いいえ" -#: template/tu_details.php msgid "Abstain" -msgstr "棄権" +msgstr "Abstain" -#: template/tu_details.php msgid "Total" msgstr "合計" -#: template/tu_details.php msgid "Participation" msgstr "参加" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "TU による最後の投票" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "最後の投票" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "結果が見つかりませんでした。" -#: template/tu_list.php msgid "Start" msgstr "開始" -#: template/tu_list.php msgid "Back" msgstr "前へ" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "AUR パスワードのリセット" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "あなたのメールアドレスと関連付けられたアカウント {user} のパスワードのリセットリクエストが送信されました。パスワードをリセットしたいときは下のリンク [1] を開いて下さい、そうでない場合はこのメッセージは無視して下さい。" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Arch User Repository にようこそ" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Arch User Repository にようこそ!アカウントのパスワードを設定するために、下のリンク [1] をクリックしてください。リンクを押せないときは、一旦ブラウザにURLをコピーしてください。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "{pkgbase} の AUR コメント" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] は以下のコメントを {pkgbase} [2] に追加しました:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "このパッケージの通知を受け取りたくない場合は、パッケージのページ [2] を開いて \"{label}\" を選択してください。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "AUR パッケージアップデート: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] は {pkgbase} [2] に新しいコミットを投稿しました。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "{pkgbase} の AUR Out-of-date 通知" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "あなたのパッケージ {pkgbase} [1] は {user} [2] によって out-of-date フラグが立てられました:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "{pkgbase} の AUR 所有者通知" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "パッケージ {pkgbase} [1] は {user} [2] によって継承されました。" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "パッケージ {pkgbase} [1] は {user} [2] から放棄されました。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "{pkgbase} の AUR 共同メンテナ通知" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "あなたは {pkgbase} [1] の共同メンテナリストに追加されました。" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "あなたは {pkgbase} [1] の共同メンテナリストから削除されました。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "AUR パッケージ削除: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] によって {old} [2] は {new} [3] にマージされました。\n\n-- \n新しいパッケージの通知を受け取りたくない場合、[3] を開いて \"{label}\" をクリックしてください。" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] は {pkgbase} [2] を削除しました。\n\nこのパッケージの通知が送信されることはありません。" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "{id} [1] の提案について投票してください。投票期限は48時間以内です。" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "不正なアカウントタイプが指定されました。" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "あなたはアカウントタイプを変更する権限を持っていません。" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "あなたはこのユーザーのアカウントタイプを %s に変更する権限を持っていません。" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "%s の承認できる孤児リクエストは存在しません。" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "内部サーバーエラー" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "深刻なエラーが発生しました。" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "詳細はログに記録され即座に管理者によって確認されます。ご不便をおかけして申し訳ございません。" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "AUR サーバーエラー" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "関連するパッケージリクエストの取り消しコメント..." - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "このアクションは関連するパッケージリクエストをすべて取り消します。%sコメント%sを省略した場合、自動的にコメントが生成されます。" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/ko.po b/po/ko.po deleted file mode 100644 index b6d8de3b..00000000 --- a/po/ko.po +++ /dev/null @@ -1,2369 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Korean (http://app.transifex.com/lfleischer/aurweb/language/ko/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ko\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/lt.po b/po/lt.po deleted file mode 100644 index f9e7f258..00000000 --- a/po/lt.po +++ /dev/null @@ -1,2384 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Lithuanian (http://app.transifex.com/lfleischer/aurweb/language/lt/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: lt\n" -"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/nb.po b/po/nb.po index f67571d7..ee2e2514 100644 --- a/po/nb.po +++ b/po/nb.po @@ -1,2380 +1,1339 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Alexander F. Rødseth , 2015,2017-2019 -# Alexander F. Rødseth , 2011,2013-2014 -# Harald H. , 2015 -# Kim Nordmo , 2016 +# Alexander F Rødseth , 2015 +# Alexander F Rødseth , 2011,2013-2014 # Lukas Fleischer , 2011 -# Thor K. H. , 2016 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Alexander F. Rødseth , 2015,2017-2019\n" -"Language-Team: Norwegian Bokmål (http://app.transifex.com/lfleischer/aurweb/language/nb/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/projects/p/aur/" +"language/nb/)\n" +"Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Finner ikke siden" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Den ønskede siden finnes ikke." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "OBS" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Nettleseren kan ikke åpne Git URL-er." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "For å klone et Git arkiv fra %s, kjør %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Klikk %sher%s for å gå tilbake til detalj-siden for %s." - -#: html/503.php msgid "Service Unavailable" -msgstr "Tjenesten er utilgjengelig" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Slapp av! Siden er nede på grunn av vedlikehold. Vi er snart tilbake." +msgstr "" -#: html/account.php msgid "Account" msgstr "Konto" -#: html/account.php template/header.php msgid "Accounts" msgstr "Kontoer" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Du har ikke adgang til dette området." -#: html/account.php msgid "Could not retrieve information for the specified user." -msgstr "Kunne ikke hente informasjon om den valgte brukeren." +msgstr "Kunne ikke motta informasjon for den valgte brukeren." -#: html/account.php msgid "You do not have permission to edit this account." -msgstr "Du har ikke tilgang til å endre denne kontoen." +msgstr "Du har ikke adgang til å endre denne kontoen." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php msgid "Use this form to search existing accounts." -msgstr "Bruk skjemaet for å søke etter eksisterende kontoer." +msgstr "Bruk dette skjemaet for å lete etter eksisterende kontoer." -#: html/account.php msgid "You must log in to view user information." -msgstr "Du må logge inn for å kunne se brukerinformasjon." +msgstr "Du må logge inn for å se brukerinformasjon." + +msgid "Use this form to create an account." +msgstr "Bruk dette feltet for å opprette en konto." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "Legg til forslag" -#: html/addvote.php msgid "Invalid token for user action." -msgstr "Ugyldig billett for brukerhandling." +msgstr "Ugyldig billett for brukerens handling." -#: html/addvote.php msgid "Username does not exist." -msgstr "Brukernavnet finnes ikke." +msgstr "Brukernavn finnes ikke." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s har allerede et forslag på gang." -#: html/addvote.php msgid "Invalid type." msgstr "Ugyldig type." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Forslag kan ikke være tomme." -#: html/addvote.php msgid "New proposal submitted." msgstr "Nytt forslag innsendt." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Send inn et forslag for å stemme over." -#: html/addvote.php msgid "Applicant/TU" msgstr "Søker/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(tomt hvis det ikke gjelder her)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Type" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Oppnevnelse av TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Fjerning av TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Fjerning av TU (uannonsert inaktivitet)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Endring av vedtekter" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Forslag" -#: html/addvote.php msgid "Submit" msgstr "Send inn" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Administrer med-vedlikeholdere" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Rediger kommentar" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Instrumentpanel" - -#: html/home.php template/header.php msgid "Home" msgstr "Hjem" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Mine flaggede pakker" - -#: html/home.php -msgid "My Requests" -msgstr "Mine forespørsler" - -#: html/home.php -msgid "My Packages" -msgstr "Mine pakker" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Søk etter pakker jeg vedlikeholder" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Med-vedlikeholdte pakker" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Søk etter pakker jeg er med på å vedlikeholde" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Velkommen til AUR! Vennligst les %sAUR Brukerveiledning%s og %sAUR TU " +"Veiledning%s for mer informasjon." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Innsendte PKGBUILD-filer %små%s følge %sStandarden for Arch Pakker%s ellers vil de bli slettet!" +msgstr "" +"Innsendte PKGBUILD-filer %små%s følge %sStandarden for Arch Pakker%s ellers " +"vil de bli slettet!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Husk å stemme på dine favorittpakker!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Noen pakker finnes som binærfiler i [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "Noen pakker finnes som binærfiler i [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "ANSVARSFRASKRIVELSE" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Pakker i AUR kan lages av hvem som helst. All bruk av filer herfra skjer på eget ansvar." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Uoffisielle pakker har innhold produsert av andre brukere. All bruk av de " +"tilgjengelige filene er på eget ansvar." -#: html/home.php -msgid "Learn more..." -msgstr "Lær mer..." - -#: html/home.php msgid "Support" -msgstr "Brukerstøtte" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Pakkeforespørsler" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Det er tre forskjellige forespørsler som kan velges i %sPakkenhandling%s-boksen på siden til en pakke:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Frigjøringsforespørsel" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Forespør at pakken gjøres eierløs, f.eks. når vedlikeholderen er inaktiv og pakken har vært flagget som utdatert i en lengre periode." - -#: html/home.php -msgid "Deletion Request" -msgstr "Forespør sletting" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Fletteforespørsel" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Forespør at pakken flettes inn i en annen. Kan brukes når en pakke trenger å bytte navn eller å bli erstattet av en oppsplittet pakke." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Hvis du vil diskutere en gitt forespørsel kan du kontakte e-postlisten %saur-request%s. Vennligst ikke send selve forespørselen dit." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Innsending av pakker" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Git over SSH brukes nå for å sende inn pakker til AUR. Ta en titt på %sSubmitting packages%s-seksjonen til Arch User Repository sin wikiside for nærmere detaljer." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Følgende SSH-fingeravtrykk brukes for AUR:" - -#: html/home.php msgid "Discussion" msgstr "Diskusjon" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Feilrapportering" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Pakkesøk" -#: html/index.php msgid "Adopt" msgstr "Adopter" -#: html/index.php msgid "Vote" msgstr "Stem" -#: html/index.php msgid "UnVote" msgstr "Fjern stemme" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Påminnelse" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Fjern påminnelse" -#: html/index.php -msgid "UnFlag" -msgstr "Ta bort flagg" +msgid "Flag" +msgstr "Markering" + +msgid "UnFlag" +msgstr "Fjern markering" -#: html/login.php template/header.php msgid "Login" msgstr "Logg inn" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Logget inn som: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Logg ut" -#: html/login.php msgid "Enter login credentials" msgstr "Fyll ut innloggingsinformasjon" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "Brukernavn" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Passord" -#: html/login.php msgid "Remember me" msgstr "Husk meg" -#: html/login.php msgid "Forgot Password" msgstr "Glemt passord" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "HTTP-innlogging er slått av. %sBytt til HTTPs%s for å logge inn." +msgstr "HTTP-innlogging er deaktivert. %sBytt til HTTPs%s for å logge inn." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Søkekriterier" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Pakker" -#: html/packages.php msgid "Error trying to retrieve package details." -msgstr "Feil ved henting av pakkedetaljer." +msgstr "Feil oppstod ved uthenting av pakkedetaljer." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Mangler et nødvendig felt." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Passord-feltene stemmer ikke overens." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." -msgstr "Passordet må være på minst %s tegn." +msgstr "Passordet ditt må være minst %s tegn." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Ugyldig e-post." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Tilbakestill passord" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." -msgstr "Sjekk e-posten og bruk den tilsendte lenken for å bekrefte registreringen." - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "Passordet ditt er nullstilt." - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" msgstr "" +"Sjekk e-posten din og bruk den tilsendte lenken for å bekrefte " +"registreringen." + +msgid "Your password has been reset successfully." +msgstr "Passordet ditt har blitt tilbakestilt." + +msgid "Confirm your e-mail address:" +msgstr "Bekreft din e-post addresse:" -#: html/passreset.php msgid "Enter your new password:" -msgstr "Angi et nytt passord:" +msgstr "Skriv inn ditt nye passord:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Bekreft ditt nye passord:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Fortsett" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" +"Hvis du har glemt e-post adressen du brukte for å registrere deg, så kan du " +"sende en e-post til listen %saur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "Fyll ut e-post adressen din:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Pakkebaser" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "De valgte pakkene har ikke blitt gjort eierløse, kryss av i boksen for å bekrefte." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "Kunne ikke finne pakke for å flette stemmer og kommentarer inn i." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Kan ikke slå sammen en basispakke med seg selv." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "De valgte pakkene har ikke blitt slettet, kryss av i boksen for å bekrefte." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Den valgte pakken har ikke blitt slettet, kryss av i boksen for å bekrefte." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Sletting av pakke" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Slett pakke" +#, php-format +msgid "Delete Package: %s" +msgstr "Slett pakke: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Bruk dette skjemaet for å slette basispakken %s%s%s og følgende pakker fra AUR:" +msgstr "" +"Bruk dette skjemaet for å slette grunnpakken %s%s%s og følgende pakker fra " +"AUR:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " -msgstr "Slettingen av en pakke er endelig. " +msgstr "Slettingen av en pakke er permanent. " -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Kryss av i boksen for å bekrefte." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Bekreft sletting av pakke" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Slett" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Bare betrodde brukere og utviklere kan slette pakker." + +msgid "Disown Package" +msgstr "Gjør foreldreløs" + +#, php-format +msgid "Disown Package: %s" msgstr "" -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "Gjør eierløs" - -#: html/pkgdisown.php #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Bruk dette skjemaet for å gjøre pakkebasen %s%s%s eierløs. Den inkluderer følgende pakker:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "Ved krysse av i boksen bekrefter du at du ikke lenger vil være bonusforelder for denne pakken." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Ved å krysse av i boksen bekrefter du at du ønsker å si fra deg pakken samt overføre eierskapet til %s%s%s." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Ved å krysse av i boksen bekrefter du at du ønsker å gjøre pakken eierløs." +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "Bekreft at du ønsker å gjøre pakken eierløs." +msgstr "" -#: html/pkgdisown.php msgid "Disown" -msgstr "Gjør eierløs" +msgstr "Gjør foreldreløs" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Flagg kommentar" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Rapporter utdatert pakke" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Bruk skjemaet for å flagge pakkebasen %s%s%s og følgende pakker som utdaterte:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Vennligst %sikke%s bruk dette skjemaet for å rapportere feil. Bruk kommentarfeltet for pakken istedenfor." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Skriv inn hvorfor pakken er utdatert nedenfor, helst med lenker til teksten som annonserer slippet av den nye versjonen, eller den nye kildekodepakken." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Kommentar" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Flagg" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Bare registrerte brukere kan flagge pakker som utdaterte." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Pakkesammenslåing" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Slå sammen med en annen" +#, php-format +msgid "Merge Package: %s" +msgstr "Slå sammen pakke: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Bruk dette skjemaet for å slå sammen basispakken %s%s%s med en annen pakke." +msgstr "" +"Bruk dette skjemaet for å slå sammen grunnpakken %s%s%s med en annen pakke." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Følgende pakker vil slettes:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " -msgstr "Når pakken har blitt slått sammen med en annen, kan det ikke angres." +msgstr "Når pakken har blitt sammenslått, så kan det ikke angres. " -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "Angi navnet på pakken du ønsker å slå denne pakken sammen med." +msgstr "Fyll ut navnet på pakken du ønsker å slå sammen denne pakken til." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Slå sammen til:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Bekreft sammenslåing" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Slå sammen" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Bare betrodde brukere og utviklere kan slå sammen pakker." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" +msgid "File Request" msgstr "Send inn forespørsel" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Lukk forespørsel" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Første" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Forrige" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Neste" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Siste" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Forespørsler" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registrer" +msgid "Trusted User" +msgstr "Betrodd bruker" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Bruk dette feltet for å opprette en konto." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Betingelser" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Disse dokumentene har blitt oppdatert. Vennligst les nøye gjennom:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "revisjon %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Jeg godtar betingelsene ovenfor." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Kan ikke finne detaljer om forslaget." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Avstemningen er ferdig for dette forslaget." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Bare betrodde brukere har stemmerett." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Du kan ikke stemme på et forslag som gjelder deg." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Du har allerede stemt på dette forslaget." -#: html/tu.php msgid "Vote ID not valid." msgstr "Stemme-ID ikke gyldig." -#: html/tu.php template/tu_list.php msgid "Current Votes" -msgstr "Pågående avstemninger" +msgstr "Foreløpige stemmer" -#: html/tu.php msgid "Past Votes" -msgstr "Tidligere avstemninger" +msgstr "Tidligere stemmer" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Velgere" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Funksjonen for registrering av nye kontoer har blitt slått av for din IP adresse, sannsynligvis på grunn av vedvarende spam-angrep. Vi beklager ulempen dette medfører." +msgstr "" +"Funksjonen for registrering av nye kontoer har blitt slått av for din IP " +"adresse, sannsynligvis på grunn av vedvarende spam-angrep. Vi beklager " +"ulempen dette medfører." -#: lib/acctfuncs.inc.php msgid "Missing User ID" -msgstr "Manglende bruker-ID" +msgstr "Mangler bruker-ID" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Brukernavnet er ugyldig." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Det må være mellom %s og %s tegn langt" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Start og slutt med en bokstav eller et siffer" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Kan kun innehold ett punktum, en understrek, eller en bindestrek." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "E-postadressen er ugyldig." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "Ugyldig hjemmeside, vennligst spesifiser hele HTTP(s) adressen." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "PGP fingeravtrykket er ikke gyldig." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "Den offentlige SSH-nøkkelen er ugyldig." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Kan ikke gi flere tillatelser til kontoen." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Språket støttes ikke på dette tidspunktet." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Den tidssonen støttes ikke akkurat nå" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "Brukernavnet, %s%s%s, er allerede i bruk." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "Adressen, %s%s%s, er allerede i bruk." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "Den offentlige SSH-nøkkelen, %s%s%s, er allerede i bruk." - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." msgstr "" -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Feil ved oppretting av konto, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "Kontoen, %s%s%s, har nå blitt laget." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Nullstillingskode har blitt sendt til e-post adressen din." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Klikk på Logg inn lenken over for å bruke kontoen." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Velkommen til %s! Lag et passord for din nye konto ved å trykke på lenken " +"nedenfor. Dersom lenken ikke virker, kopier og lim adressen inn i " +"nettleseren din." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "Nullstillingskode har blitt sendt til e-post adressen din." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Ingen endringer ble utført på kontoen, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "Kontoen, %s%s%s, har nå blitt endret." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Inlogging er slått av for din IP adresse, sannsynligvis på grunn av vedvarende spam-angrep. Beklager ulempen dette medfører." +msgstr "" +"Inlogging er slått av for din IP adresse, sannsynligvis på grunn av " +"vedvarende spam-angrep. Beklager ulempen dette medfører." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Kontoen er stengt" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Passordet har blitt nullstilt. Dersom du akkurat laget en ny konto, vennligst følg lenken som ble sendt på e-post og sett så et nytt passord. Ellers kan du bruke %sNullstill Passord% siden til å få tilsendt en nullstillingskode." +msgstr "" +"Passordet har blitt nullstilt. Dersom du akkurat laget en ny konto, " +"vennligst følg lenken som ble sendt på e-post og sett så et nytt passord. " +"Ellers kan du bruke %sNullstill Passord% siden til å få tilsendt en " +"nullstillingskode." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Ugyldig brukernavn eller passord." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Feil oppstod ved generering av sesjon for bruker." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Ugyldig kombinasjon av e-post og nullstillingsnøkkel." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Ingen" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Vis kontoinformasjon for %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "ID eller navn for pakkebasen mangler." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Du får ikke lov til å redigere denne kommentaren." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Kommentaren finnes ikke." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Kommentaren kan ikke være tom." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Kommentar har blitt lagt til." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Du må være logget inn for å kunne redigere pakkeinformasjon." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Mangler kommentar-ID." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Maks 5 kommentarer kan festes." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Du får ikke lov til å feste denne kommentaren." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Du får ikke lov til å løsrive denne kommentaren." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Kommentar har blitt festet." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Kommentar har blitt løsrevet." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Kunne ikke finne frem pakkedetaljer." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Kunne ikke finne pakkedetaljer." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Du må være logget inn for å kunne markere pakker." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Ingen pakker ble valgt for å bli markert." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "De valgte pakkene har ikke blitt flagget. Vennligst skriv inn en kommentar." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." -msgstr "De valgte pakkene har nå blitt flagget som utdaterte." +msgstr "De valgte pakkene har nå blitt markert som utdaterte." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." -msgstr "Du må være logget inn for å kunne fjerne flagg fra pakker." +msgstr "" +"Du må være logget inn for å kunne fjerne \"utdatert\"-markeringen fra pakker." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." -msgstr "Ingen pakker ble valgt for å fjerne flagg fra." +msgstr "Ingen pakker ble valgt for å fjerne markeringer fra." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." -msgstr "De valgte pakkene har nå fått fjernet flaggene." +msgstr "De valgte pakkene har nå fått fjernet markeringen." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Du har ikke rettighetene som skal til for å kunne slette pakker." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Du valgte ingen pakker for sletting." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "De valgte pakkene har blitt slettet." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Du må være logget inn for å kunne adoptere pakker." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." -msgstr "Du må være logget inn for å kunne gjøre pakker eierløse." +msgstr "Du må være logget inn for å kunne gjøre pakker foreldreløse." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Du valgte ingen pakker for adopsjon." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." -msgstr "Du valgte ingen pakker som skal gjøres eierløse." +msgstr "Du valgte ingen pakker for å gjøre de foreldreløse." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Den valgte pakken har blitt adoptert." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." -msgstr "De valgte pakkene er nå eierløse." +msgstr "De valgte pakkene er nå foreldreløse." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Du må være logget inn for å kunne stemme på pakker." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Du må være logget inn for å kunne trekke tilbake stemmer på pakker." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Du valgte ingen pakker å stemme på." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Stemmene dine har blitt trukket tilbake fra de valgte pakkene." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Du har nå stemt på de valgte pakkene." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Kunne ikke legge til i påminnelseslisten." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Du har blitt lagt til påminnelselisten for kommentarer for %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Du har blitt fjernet fra kommentarpåminnelselisten for %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Du får ikke lov til å angre på å slette denne kommentaren." +msgid "You must be logged in before you can edit package information." +msgstr "Du må være logget inn for å kunne redigere pakkeinformasjon." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Kommentaren har ikke blitt slettet allikevel." +msgid "Missing comment ID." +msgstr "Mangler kommentar-ID." + +msgid "Comment has been deleted." +msgstr "Kommentar slettet." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to delete this comment." msgstr "Du har ikke tilgang til å slette denne kommentaren." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "Kommentaren har blitt slettet." +msgid "Missing category ID." +msgstr "Manglende kategori-ID." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Kommentaren har blitt redigert." +msgid "Invalid category ID." +msgstr "Ugyldig kategori-ID." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Du får ikke lov til å redigere nøkkelordene til denne pakkebasen." +msgid "You are not allowed to change this package category." +msgstr "Du har ikke tilgang til å endre denne pakkekategorien." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Pakkebasenøkkelordene har blitt oppdatert." +msgid "Package category changed." +msgstr "Pakkekategori endret." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Du får ikke lov til å håndtere med-vedlikeholdere for denne pakkebasen." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Ugyldig brukernavn: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "Med-vedlikeholdere for denne pakkebasen har blitt oppdatert." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Vis pakkedetaljer for" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "trenger %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "Du må være logget inn for å kunne sende inn forespørsler om pakker." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Ugyldig navn: kun små bokstaver er lov." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "Kommentarfeltet kan ikke være tomt." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Ugyldig type forspørsel." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Forespørsel er registrert." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Ugyldig grunn." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "Bare betrodde brukere og utviklere kan lukke forespørsler." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Forespørselen ble lukket." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "Dette skjemaet kan brukes for å permanent slette AUR kontoen %s." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sADVARSEL%s: Denne handlingen kan ikke angres." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Bekreft sletting" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Brukernavn" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Konto-type" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Bruker" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Utvikler" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Betrodd bruker & Utvikler" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "E-postadresse" -#: template/account_details.php -msgid "hidden" -msgstr "gjemt" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Ekte navn" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Hjemmeside" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC-kallenavn" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "PGP-nøkkel/fingeravtrykk" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Status" -#: template/account_details.php msgid "Inactive since" msgstr "Inaktiv siden" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Aktiv" -#: template/account_details.php -msgid "Registration date:" -msgstr "Registreringsdato:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "ukjent" - -#: template/account_details.php msgid "Last Login" msgstr "Sist logget inn" -#: template/account_details.php msgid "Never" msgstr "Aldri" -#: template/account_details.php msgid "View this user's packages" msgstr "Vis pakkene til denne brukereren" -#: template/account_details.php msgid "Edit this user's account" msgstr "Endre brukerkonto" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." -msgstr "Klikk %sher%s hvis du vil slette denne kontoen for alltid." +msgstr "Klikk %sher%s hvis du vil slette denne kontoen, for alltid." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Klikk %sher%s for brukerdetaljer." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "trengs" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Brukernavnet er navnet du vil bruke for å logge inn med. Det er synlig for allmenheten, selv hvis kontoen din er inaktiv." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Vanlig bruker" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Betrodd bruker" + msgid "Account Suspended" msgstr "Konto suspendert" -#: template/account_edit_form.php msgid "Inactive" msgstr "Inaktiv" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Kontroller at du har skrevet e-postadressen din korrekt, ellers vil du bli utestengt." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Gjem e-postadresse" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Språk" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Tidssone" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Skriv inn passordet på nytt" -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Følgende informasjon behøves bare hvis du har tenkt til å sende inn pakker til Arch sitt brukerstyrte pakkebibliotek." +msgid "Language" +msgstr "Språk" -#: templates/partials/account_form.html msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "Offentlig SSH-nøkkel" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Varslingsinstillinger" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Gi beskjed om nye kommentarer" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Gi beskjed om pakkeoppdateringer" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Gi beskjed om endring av eierskap" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" msgstr "" -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Oppdater" -#: template/account_edit_form.php msgid "Create" msgstr "Opprett" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" -msgstr "Nullstill" +msgstr "Omstart" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Ingen treff for de oppgitte søkekriteriene." -#: template/account_search_results.php msgid "Edit Account" msgstr "Endre brukerkonto" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspendert" -#: template/account_search_results.php msgid "Edit" msgstr "Rediger" -#: template/account_search_results.php msgid "Less" msgstr "Færre" -#: template/account_search_results.php msgid "More" msgstr "Flere" -#: template/account_search_results.php msgid "No more results to display." msgstr "Ingen flere resultater å vise." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Bruk dette skjemaet for å legge til med-vedlikeholdere for %s%s%s (ett brukernavn per linje):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "Brukere" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "Lagre" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Flagget kommentar som utdatert: %s" +msgid "My Packages" +msgstr "Mine pakker" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s flagget %s%s%s som utdatert den %s%s%s av følgende årsak:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s er ikke flagget som utdatert." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Returner til detaljer" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Kopibeskyttet %s 2004-%d aurweb utviklingsgruppe." - -#: template/header.php msgid " My Account" msgstr " Min konto" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Registrer" + +msgid "unknown" +msgstr "ukjent" + +msgid "Package Base Details" +msgstr "Grunnpakkedetaljer" + msgid "Package Actions" msgstr "Pakkehandlinger" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Vis PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "Vis endringer" +msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" -msgstr "Last ned kildekode" +msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" -msgstr "Søk på wiki" +msgstr "Søk wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Flagget som utdatert (%s)" +msgid "Flagged out-of-date" +msgstr "Markert som utdatert" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" -msgstr "Marker som utdatert" +msgstr "Marker pakke som utdatert" -#: template/pkgbase_actions.php msgid "Unflag package" -msgstr "Fjern flagg" +msgstr "Fjern markering" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Angre stemme" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Stem på denne pakken" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Slå av beskjeder" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Gi beskjed" +msgid "Notify of new comments" +msgstr "Gi beskjed om nye kommentarer" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "Med-vedlikeholdere" +msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d ventende forespørsel" msgstr[1] "%d ventende forespørsler" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Slett pakke" + +msgid "Merge Package" +msgstr "Slå sammen pakke" + msgid "Adopt Package" msgstr "Adopter pakke" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Basispakkedetaljer" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" -msgstr "Git-arkiv" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "skrivebeskyttet" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Nøkkelord" +msgid "Category" +msgstr "Kategori" + +msgid "Change category" +msgstr "Endre kategori" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Innsender" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Vis kontoinformasjon for %s" + msgid "Maintainer" -msgstr "Eier" +msgstr "Vedlikeholder" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" -msgstr "Forrige innpakker" +msgstr "Siste innpakker" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Stemmer" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularitet" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" -msgstr "Opprettet" +msgstr "Først innsendt" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Sist oppdatert" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Rediger kommentar for: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Legg til kommentar" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" +msgid "Comment has been added." +msgstr "Kommentar har blitt lagt til." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" +msgid "View all comments" +msgstr "Vis alle kommentarer" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "La stå" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Siste kommentarer" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s kommenterte %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Anonym kommenterte %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "slettet %s av %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "slettet %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "redigert %s av %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "redigert %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Angre sletting av kommentar" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Slett kommentar" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Fest kommentar" +#, php-format +msgid "Comment by %s" +msgstr "Kommentert av %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Løsne kommentar" +msgid "Anonymous comment" +msgstr "Anonym kommentar" + +msgid "deleted" +msgstr "slettet" + +msgid "All comments" +msgstr "Alle kommentarer" -#: template/pkg_details.php msgid "Package Details" -msgstr "Om pakken" +msgstr "Pakkedetaljer" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" -msgstr "Basispakke" +msgstr "Grunnpakke" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Beskrivelse" -#: template/pkg_details.php msgid "Upstream URL" -msgstr "Prosjektside" +msgstr "Prosjektets URL" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Besøk nettsiden til" -#: template/pkg_details.php msgid "Licenses" msgstr "Lisenser" -#: template/pkg_details.php msgid "Groups" msgstr "Grupper" -#: template/pkg_details.php msgid "Conflicts" msgstr "Konflikter" -#: template/pkg_details.php msgid "Provides" msgstr "Tilbyr" -#: template/pkg_details.php msgid "Replaces" msgstr "Erstatter" -#: template/pkg_details.php msgid "Dependencies" msgstr "Avhengigheter" -#: template/pkg_details.php msgid "Required by" msgstr "Trengs av" -#: template/pkg_details.php msgid "Sources" msgstr "Kilder" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Lukk forespørsel: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Bruk dette skjemaet for å lukke forespørselen for basispakken %s%s%s." +msgstr "Bruk dette skjemaet for å lukke forespørselen for grunnpakken %s%s%s." + +msgid "Note" +msgstr "OBS" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Kommentarfeltet kan stå tomt, men det anbefales å legge igjen en melding når en forespørsel avvises." +msgstr "" +"Kommentarfeltet kan stå tomt, men det anbefales å legge igjen en melding når " +"en forespørsel avvises." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Begrunnelse" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Akseptert" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Avvist" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Kommentarer" + +#, php-format +msgid "File Request: %s" +msgstr "Send inn forespørsel: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Bruk dette skjemaet for å registrere en forespørsel for basispakken %s%s%s som inkluderer følgende pakker:" +msgstr "" +"Bruk dette skjemaet for å registrere en forespørsel for grunnpakken %s%s%s " +"som inkluderer følgende pakker:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Type forespørsel" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Sletting" -#: template/pkgreq_form.php msgid "Orphan" -msgstr "Eierløs" +msgstr "Foreldreløs" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Flett med" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Ingen treff på forespørsler." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "Fant %d pakkeforespørsel." msgstr[1] "Fant %d pakkeforespørsler." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Side %d av %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Pakke" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Registrert av" -#: template/pkgreq_results.php msgid "Date" msgstr "Dato" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d dag igjen" -msgstr[1] "~%d dager igjen" +msgid "~%d days left" +msgstr "~%d dager igjen" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "~%d time igjen" msgstr[1] "~%d timer igjen" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "<1 time igjen" -#: template/pkgreq_results.php msgid "Accept" msgstr "Godta" -#: template/pkgreq_results.php msgid "Locked" msgstr "Låst" -#: template/pkgreq_results.php msgid "Close" msgstr "Lukk" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "I kø" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Lukket" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Navn, beskrivelse" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Bare navn" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Eksakt navn" -#: template/pkg_search_form.php msgid "Exact Package Base" -msgstr "Eksakt basispakke" +msgstr "Eksakt grunnpakke" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Med-vedlikeholder" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Vedlikeholder, med-vedlikeholder" - -#: template/pkg_search_form.php msgid "All" msgstr "Alle" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Markert" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Umarkert" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Navn" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" -msgstr "Din stemme" +msgstr "Stemt" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Sist endret" +msgid "Age" +msgstr "Alder" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Stigende" -#: template/pkg_search_form.php msgid "Descending" msgstr "Synkende" -#: template/pkg_search_form.php msgid "Enter search criteria" -msgstr "Angi søkekriterier" +msgstr "Fyll ut søkekriterier" + +msgid "Any" +msgstr "Hvilken som helst" -#: template/pkg_search_form.php msgid "Search by" msgstr "Søk etter" -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "Ut på dato" +msgid "Keywords" +msgstr "Nøkkelord" + +msgid "Out of Date" +msgstr "Foreldet" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Sorter etter" -#: template/pkg_search_form.php msgid "Sort order" -msgstr "Sortering" +msgstr "Sorteringsrekkefølge" -#: template/pkg_search_form.php msgid "Per page" -msgstr "Treff per side" +msgstr "Per side" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" -msgstr "Søk nå" +msgstr "Utfør" -#: template/pkg_search_form.php msgid "Orphans" -msgstr "Eierløse" +msgstr "Foreldreløse" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Feil ved mottagelse av pakkeliste." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." -msgstr "Ingen pakker her." +msgstr "Ingen pakker passer til dine søkekriterier." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "Fant %d pakke." msgstr[1] "Fant %d pakker." -#: template/pkg_search_results.php msgid "Version" msgstr "Versjon" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Populariteten beregnes som summen av alle stemmer der hver stemme vekktes med en faktor på %.2f per dag siden den ble avlagt." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Ja" -#: template/pkg_search_results.php msgid "orphan" -msgstr "eierløs" +msgstr "foreldreløs" -#: template/pkg_search_results.php msgid "Actions" msgstr "Handlinger" -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "Fjern flagg" +msgid "Flag Out-of-date" +msgstr "Marker som utdatert" + +msgid "Unflag Out-of-date" +msgstr "Fjern markering" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adopter pakker" -#: template/pkg_search_results.php msgid "Disown Packages" -msgstr "Gjør pakker eierløse" +msgstr "Gjør pakker foreldreløse" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Slett pakker" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Bekreft" -#: template/search_accounts_form.php msgid "Any type" msgstr "Hvilken som helst type" -#: template/search_accounts_form.php msgid "Search" msgstr "Søk" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Statistikk" -#: template/stats/general_stats_table.php msgid "Orphan Packages" -msgstr "Eierløse pakker" +msgstr "Foreldreløse pakker" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Lagt til de siste 7 dagene" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Oppdaterte pakker de siste 7 dagene" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Oppdaterte pakker det siste året" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Aldri oppdaterte pakker" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Registrerte brukere" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Betrodde Brukere" -#: template/stats/updates_table.php msgid "Recent Updates" -msgstr "Nylig oppdatert" +msgstr "Nylige oppdateringer" -#: template/stats/updates_table.php -msgid "more" -msgstr "mer" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Min statistikk" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Uoffisielle pakker" + msgid "Proposal Details" msgstr "Forslagsdetaljer" -#: template/tu_details.php msgid "This vote is still running." msgstr "Avstemningen pågår fortsatt." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Innsendt: %s av %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Slutt" -#: template/tu_details.php msgid "Result" msgstr "Resultat" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Nei" -#: template/tu_details.php msgid "Abstain" msgstr "Blank stemme" -#: template/tu_details.php msgid "Total" msgstr "Totalt" -#: template/tu_details.php msgid "Participation" msgstr "Deltagelse" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" -msgstr "Betrodde brukeres avgitte stemmer" +msgstr "Siste stemmer fra TU" -#: template/tu_last_votes_list.php msgid "Last vote" -msgstr "Forrige avstemning" +msgstr "Siste stemme" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Ingen resultater." -#: template/tu_list.php msgid "Start" msgstr "Start" -#: template/tu_list.php msgid "Back" msgstr "Tilbake" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "Tilbakestill AUR passordet" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "Vi fikk en forespørsel om å nullstille passordet for brukerkontoen {user}, som hører til din e-post adresse. Dersom du ikke ønsker å nullstille passordet kan du ignorere denne beskjeden. Dersom du ønsker å nullstille passordet, følg lenken [1] nedenfor." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Velkommen til pakkebrønnen for brukerinnsendte pakker, for Arch." - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Velkommen til pakkebrønnen for brukerinnsendte pakker, for Arch! For å sette et nytt passord for din konto, vennligst klikk på lenken [1] nedenfor. Dersom den ikke fungerer, forsøk å kopiere og så lime den inn i din nettleser." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "AUR kommentar for {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] la til følgende kommentar til {pkgbase} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Hvis du ikke lenger vil motta beskjeder om denne pakken, vennligst gå til pakkesiden [2] og velg \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "AUR pakkeoppdatering: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] dyttet en ny endring til {pkgbase} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "AUR beskjed om utdatert pakke for {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Pakken din {pkgbase} [1] har blitt flagget som utdatert av {user} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "AUR eierskapsbeskjed for {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "Pakken {pkgbase} [1] ble adoptert av {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "Pakken {pkgbase} [1] ble forlatt av {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "AUR bonusforeldrebeskjed for {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "Du ble lagt til som bonusforelder til {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "Du ble fjernet som bonusforelder for {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "AUR pakken ble slettet: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] slettet {pkgbase} [2].\n\nDu vil ikke få flere beskjeder om denne pakken." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Vennligst husk å stemme på forslag {id} [1]. Avstemningsperioden vil være over om mindre enn 48 timer." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/nb_NO.po b/po/nb_NO.po deleted file mode 100644 index e840e869..00000000 --- a/po/nb_NO.po +++ /dev/null @@ -1,2376 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -# Kim Nordmo , 2017,2019 -# Lukas Fleischer , 2011 -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Kim Nordmo , 2017,2019\n" -"Language-Team: Norwegian Bokmål (Norway) (http://app.transifex.com/lfleischer/aurweb/language/nb_NO/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: nb_NO\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "Finner ikke siden" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "Beklager, siden du har bedt om finnes ikke." - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "Tjeneste utilgjengelig" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Ingen panikk! Siden er nede grunnet vedlikehold. Vi er snart tilbake." - -#: html/account.php -msgid "Account" -msgstr "Konto" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "Kontoer" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "Du har ikke adgang til dette området." - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "Kunne ikke motta informasjon for den valgte brukeren." - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "Du har ikke adgang til å endre denne kontoen." - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "Bruk dette skjemaet for å søke etter eksisterende kontoer." - -#: html/account.php -msgid "You must log in to view user information." -msgstr "Du må logge inn for å se informasjon om bruker." - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "Legg til forslag" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "Brukernavn finnes ikke." - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "%s har allerede et forslag." - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "Forslag kan ikke være tomt." - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "Nytt forslag innsendt." - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "Send inn et forslag å stemme på." - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "(tom hvis ikke anvendelig)" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "Type" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "Forslag" - -#: html/addvote.php -msgid "Submit" -msgstr "Send inn" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "Hjem" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "Mine pakker" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "Diskusjon" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "Stem" - -#: html/index.php -msgid "UnVote" -msgstr "Av-stem" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "Notifisér" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "Avnotifisér" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "Logg inn" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "Logget inn som: %s" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "Logg ut" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "Passord" - -#: html/login.php -msgid "Remember me" -msgstr "Husk meg" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "Søkekriterier" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "Pakker" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "Feil oppstod under mottagelse av pakkedetaljer." - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "Mangler et nødvendig felt." - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "Passord-felter stemmer ikke overens." - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "Passordet ditt må være minst %s tegn." - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "Neste" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "Bruk dette feltet for å opprette en konto." - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "Kunne ikke motta detaljer om forslag." - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "Stemming er avsluttet for dette forslaget." - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "Du kan ikke stemme i et forslag om deg." - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "Du har allerede stemt for dette forslaget." - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "Stemme-ID ikke gyldig." - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "Foreløpige stemmer" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "Mangler bruker-ID" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "Brukernavnet er ikke gyldig." - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "Det må være mellom %s og %s tegn langt" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "Start og slutt med en bokstav eller et siffer" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "Kan kun innehold ett punktum, understrek, eller bindestrek." - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "E-post-adressen er ugyldig." - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "Språk er ikke støttet på dette tidspunktet." - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Du må være logget inn før du kan redigere pakkeinformasjon." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Mangler kommentar-ID." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "Feil oppstod under mottagelse av pakkedetaljer." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "Pakkedetaljene kunne ikke bli funnet." - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "Du må være logget inn før du kan markere pakker." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "Du valgte ingen pakker å flagge." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "De valgte pakkene har blitt flagget som utdatert." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "Du må være logget inn før du kan fjerne \"utdatert\"-markeringen av pakker." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "Du valgte ingen pakker å flagge bort." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "De valgte pakkene har blitt flagget bort." - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "Du valgte ingen pakker å slette." - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "De valgte pakkene har blitt slettet." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "Du må være logget inn før du kan adoptere pakker." - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "Du må være logget inn før du kan avslutte eierskap av pakker." - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "Du valgte ingen pakker å adoptere." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "Du valgte ingen pakker som skulle fjernes eierskap til." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "Den valgte pakken har blitt adoptert." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "De valgte pakkene eies ikke mer." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "Du må være logget inn før du kan stemme på pakker." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "Du må være logget inn før du av av-stemme pakker." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "Du valgte ingen pakker å stemme på." - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "Stemmene dine har blitt fjernet fra de valgte pakkene." - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "Stemmene dine er talte for de valgte pakkene." - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "Kunne ikke legge til påminnelseslisten." - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "Du har blitt lagt til påminnelselisten for kommentarer for %s." - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "Du har blitt fjernet fra kommentarpåminnelselisten for %s." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Du har ikke tilgang til å slette denne kommentaren." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "Kommentar har blitt slettet." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "Invalid navn - kun små bokstaver er tillatte." - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Brukernavn" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "Konto-type" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "Bruker" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "Utvikler" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "E-post-adresse" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "Ekte navn" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "IRC-nick" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "Status" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "Aktiv" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "Aldri" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "Se denne brukereren sine pakker" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "trengs av" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "Vanlig bruker" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "Konto suspendert" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Språk" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "Tast inn passord på nytt" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "Oppdatér" - -#: template/account_edit_form.php -msgid "Create" -msgstr "Opprett" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "Omstart" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "Ingen søk stemte overens med dine søkekriterier." - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "Endre brukerkonto" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "Suspendert" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "Færre" - -#: template/account_search_results.php -msgid "More" -msgstr "Flere" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "Ingen flere resultater å vise." - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "Vedlikeholder" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "Stemmer" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "Slett kommentar" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "Pakkedetaljer" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "Beskrivelse" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "Avhengigheter" - -#: template/pkg_details.php -msgid "Required by" -msgstr "Trengs av" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "Navn" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "Stemmet" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "Søk etter" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "Sortér med" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "Sorteringsrekkefølge" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "Per side" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "Gå" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "Hjemløse" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "Feil oppstod under mottagelse av pakkeliste." - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "Ingen pakker stemmer overens med dine søkekriterier." - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "Ja" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "hjemløs" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "Handlinger" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "Fjern markering av \"utdatert\"" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "Adoptér pakker" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "Avslutt eierskap av pakker" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "Slett pakker" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "Hvilken som helst type" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "Søk" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "Resultater for forslag" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "Stemmingen er fortsatt aktiv." - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "Innsendt: %s av %s" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "Slutt" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "Nei" - -#: template/tu_details.php -msgid "Abstain" -msgstr "Avhold deg fra" - -#: template/tu_details.php -msgid "Total" -msgstr "Totalt" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "Ingen resultater funnet." - -#: template/tu_list.php -msgid "Start" -msgstr "Start" - -#: template/tu_list.php -msgid "Back" -msgstr "Tilbake" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/nl.po b/po/nl.po index d8df5765..2f2869bd 100644 --- a/po/nl.po +++ b/po/nl.po @@ -1,2381 +1,1335 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Heimen Stoffels , 2021-2022 -# Heimen Stoffels , 2015,2021 # jelly , 2011 -# Kevin Morris , 2022 # Sietse , 2013 # Sietse , 2013 -# Wijnand Modderman-Lenstra , 2015 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Heimen Stoffels , 2021-2022\n" -"Language-Team: Dutch (http://app.transifex.com/lfleischer/aurweb/language/nl/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Dutch (http://www.transifex.com/projects/p/aur/language/nl/)\n" +"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Pagina niet gevonden" -#: html/404.php msgid "Sorry, the page you've requested does not exist." -msgstr "De opgevraagde pagina bestaat niet." +msgstr "Sorry, de pagina die je hebt aangevraagd bestaat niet." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Opmerking" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Git clone-url's horen niet te worden geopend in een webbrowser." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Wilt u de Git-repo van %s klonen? Voer dan %s uit." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Klik %shier%s om terug te keren naar de %s informatiepagina." - -#: html/503.php msgid "Service Unavailable" -msgstr "Dienst is niet beschikbaar" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Raak niet in paniek: de website is vanwege werkzaamheden uit de lucht. We zijn zo spoedig mogelijk weer terug." +msgstr "" -#: html/account.php msgid "Account" -msgstr "Account" +msgstr "" -#: html/account.php template/header.php msgid "Accounts" msgstr "Accounts" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." -msgstr "U heeft geen toegang tot deze sectie." +msgstr "Geen toegang tot dit gebied." -#: html/account.php msgid "Could not retrieve information for the specified user." -msgstr "Er kan geen informatie worden opgehaald over de opgegeven gebruiker." +msgstr "Kon geen informatie ophalen voor de opgegeven gebruiker." -#: html/account.php msgid "You do not have permission to edit this account." -msgstr "U bent niet bevoegd om dit account te bewerken." +msgstr "Je hebt geen toestemming om dit account te bewerken." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Ongeldig wachtwoord." - -#: html/account.php msgid "Use this form to search existing accounts." -msgstr "Gebruik dit formulier om te zoeken naar bestaande accounts." +msgstr "Gebruik dit formulier om bestaande accounts zoeken." -#: html/account.php msgid "You must log in to view user information." -msgstr "Log in om gebruikersinformatie te bekijken." +msgstr "U moet inloggen om de gebruikersinformatie te bekijken." + +msgid "Use this form to create an account." +msgstr "Gebruik dit formulier om een ​​account aan te maken." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" -msgstr "Voorstel doen" +msgstr "Voeg Voorstel Toe" -#: html/addvote.php msgid "Invalid token for user action." -msgstr "Ongeldige toegangssleutel voor gebruikersactie." +msgstr "Ongeldige token voor gebruikersactie." -#: html/addvote.php msgid "Username does not exist." -msgstr "Deze gebruikersnaam bestaat niet." +msgstr "Gebruikersnaam bestaat niet." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." -msgstr "%s heeft hier al een voorstel voor ingediend." +msgstr "Er loopt al een voorstel voor %s." -#: html/addvote.php msgid "Invalid type." -msgstr "Ongeldig type." +msgstr "" -#: html/addvote.php msgid "Proposal cannot be empty." -msgstr "U mag geen blanco voorstel doen." +msgstr "Voorstel kan niet leeg zijn." -#: html/addvote.php msgid "New proposal submitted." -msgstr "Het nieuwe voorstel is ingediend." +msgstr "Nieuw voorstel ingediend." -#: html/addvote.php msgid "Submit a proposal to vote on." -msgstr "Dien een voorstel in om op te stemmen." +msgstr "Een voorstel indienen om op te stemmen." -#: html/addvote.php msgid "Applicant/TU" msgstr "Aanvrager/TU" -#: html/addvote.php msgid "(empty if not applicable)" -msgstr "(laat leeg indien niet van toepassing)" +msgstr "(Leeg indien niet van toepassing)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Type" -#: html/addvote.php -msgid "Addition of a Package Maintainer" +msgid "Addition of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer" +msgid "Removal of a TU" msgstr "" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" +msgid "Removal of a TU (undeclared inactivity)" msgstr "" -#: html/addvote.php msgid "Amendment of Bylaws" -msgstr "Wijziging van de statuten" +msgstr "" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Voorstel" -#: html/addvote.php msgid "Submit" -msgstr "Versturen" +msgstr "Opsturen" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Mede-onderhouders beheren" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Opmerking bewerken" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Overzicht" - -#: html/home.php template/header.php -msgid "Home" -msgstr "Startpagina" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "Mijn gemarkeerde pakketten" - -#: html/home.php -msgid "My Requests" -msgstr "Mijn verzoeken" - -#: html/home.php -msgid "My Packages" -msgstr "Mijn pakketten" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Zoeken naar pakketten die ik beheer" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Mede-onderhouden pakketten" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Zoeken naar pakketten die ik mede onderhoud" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." msgstr "" -#: html/home.php +msgid "Home" +msgstr "Home" + +#, php-format +msgid "" +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." +msgstr "" +"Welkom bij de AUR! Lees de %sAUR Gebruikersvoorschriften%s en %sAUR " +"Ontwikkelaarsvoorschriften%s voor meer informatie." + #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Bijgedragen PKGBUILDs %smoeten%s voldoen aan de %sArch-pakketstandaarden%s, anders worden ze verwijderd!" +msgstr "" +"PKGBUILDs %smoeten%s voeldoen aan de %sArch Packaging Standaarden%s anders " +"zullen ze verwijderd worden!" -#: html/home.php msgid "Remember to vote for your favourite packages!" -msgstr "Vergeet niet te stemmen op uw favoriete pakketten!" +msgstr "Vergeet niet te stemmen voor je favoriete pakketten!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Sommige pakketten in [extra] kunnen worden aangeleverd als uitvoerbare bestanden." +msgid "Some packages may be provided as binaries in [community]." +msgstr "Sommige pakketten kunnen worden geleverd als binaries in [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "DISCLAIMER" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "AUR-pakketten zijn volledig samengesteld door gebruikers. Gebruik hiervan is op eigen risico." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Niet-ondersteunde pakketten zijn door gebruikers geproduceerde content. Elk " +"gebruik van de geleverde bestanden is op eigen risico." -#: html/home.php -msgid "Learn more..." -msgstr "Meer informatie…" - -#: html/home.php msgid "Support" -msgstr "Ondersteuning" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Pakketverzoeken" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Er zijn drie soorten verzoeken die kunnen worden ingediend middels het %sPakketacties%s-veld op de pakketinformatiepagina:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Onteigeningsverzoek" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Verzoek om het pakket te markeren als onteigend, bijv. als de eigenaar inactief is en het pakket langere tijd als verouderd gemarkeerd is." - -#: html/home.php -msgid "Deletion Request" -msgstr "Verwijderingsverzoek" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Samenvoegverzoek" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Verzoek om een pakket samen te laten voegen met een ander pakket. Dit kan gebruikt worden als een pakketnaam gewijzigd moet worden of vervangen wordt door een opgesplitst pakket." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Als u het verzoek wilt bediscussiëren, dan kunt u hiervoor de %saur-requests%s-mailinglijst gebruiken. Gebruik deze lijst niet om verzoeken in te dienen." - -#: html/home.php -msgid "Submitting Packages" -msgstr "Pakketten bijdragen" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "U dient git via ssh te gebruiken om pakketten bij te dragen aan de AUR. Bekijk voor meer informatie de pagina %sPakketten bijdragen%s op de Arch User Repository ArchWiki-pagina." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "De volgende ssh-vingerafdrukken worden gebruikt voor de AUR:" - -#: html/home.php -msgid "Discussion" -msgstr "Discussiëren" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." msgstr "" -#: html/home.php -msgid "Bug Reporting" -msgstr "Bugmeldingen" +msgid "Discussion" +msgstr "Discussie" + +#, php-format +msgid "" +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." +msgstr "" + +msgid "Bug Reporting" +msgstr "Bug Rapportage" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" -msgstr "Zoeken naar pakketten" +msgstr "Pakketten Zoeken" -#: html/index.php msgid "Adopt" -msgstr "Eigenaar worden" +msgstr "" -#: html/index.php msgid "Vote" -msgstr "Stemmen" +msgstr "Stem" -#: html/index.php msgid "UnVote" -msgstr "Stem intrekken" +msgstr "Verwijder Stem" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" -msgstr "Melding bij activiteit" +msgstr "Informeren" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" -msgstr "Geen melding bij activiteit" +msgstr "Informeer niet" + +msgid "Flag" +msgstr "Markeer" -#: html/index.php msgid "UnFlag" -msgstr "Demarkeren" +msgstr "Markering Verwijderen" -#: html/login.php template/header.php msgid "Login" -msgstr "Inloggen" +msgstr "Login" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" -msgstr "Ingelogd als: %s" +msgstr "Ingelogd as: %s" -#: html/login.php template/header.php msgid "Logout" -msgstr "Uitloggen" +msgstr "Log uit" -#: html/login.php msgid "Enter login credentials" -msgstr "Voer uw inloggegevens in" +msgstr "Voer login gegevens in" -#: html/login.php -msgid "User name or primary email address" -msgstr "Gebruikersnaam of e-mailadres" +msgid "Username" +msgstr "Gebruikersnaam" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Wachtwoord" -#: html/login.php msgid "Remember me" msgstr "Onthoud mij" -#: html/login.php msgid "Forgot Password" msgstr "Wachtwoord vergeten" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Inloggen via http is uitgeschakeld. %sSchakel over naar https%s om in te loggen." +msgstr "HTTP login is uitgeschakeld. %sVerander naar HTTPs%s om in te loggen." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Zoekcriteria" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Pakketten" -#: html/packages.php msgid "Error trying to retrieve package details." -msgstr "De pakketinformatie kan niet worden opgehaald." +msgstr "Fout bij het ophalen van pakket details." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." -msgstr "Er is een verplicht veld leeggelaten." +msgstr "Er ontbreekt een verplicht veld." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." -msgstr "De wachtwoordvelden komen niet overeen." +msgstr "Wachtwoord velden komen niet overeen." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." -msgstr "Uw wachtwoord dient minimaal %s tekens te bevatten." +msgstr "Je wachtwoord moet minimaal %s karakters lang zijn." -#: html/passreset.php msgid "Invalid e-mail." -msgstr "Ongeldig e-mailadres." +msgstr "Ongeldig e-mail adres." + +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" -#: html/passreset.php msgid "Password Reset" -msgstr "Wachtwoordherstel" +msgstr "Wachtwoord Reset" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." -msgstr "Er is een e-mail met bevestigingslink aan u verstuurd." +msgstr "Controleer uw e-mail voor de bevestigingslink." -#: html/passreset.php msgid "Your password has been reset successfully." -msgstr "Uw wachtwoord is hersteld." +msgstr "Uw wachtwoord is met succes teruggezet." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Bevestig uw gebruikersnaam of e-mailadres:" +msgid "Confirm your e-mail address:" +msgstr "Bevestig uw e-mail adres:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Voer uw nieuwe wachtwoord in:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Bevestig uw nieuwe wachtwoord:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Doorgaan" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Als u uw gebruikersnaam en e-mailadres vergeten bent, stuur dan een bericht aan de %saur-general%s-mailinglijst." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Als je het e-mail adres waarmee je geregistreerd hebt vergeten bent, stuur " +"dan een bericht naar de %saur-general%s mailing list." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Voer uw gebruikersnaam of e-mailadres in:" +msgid "Enter your e-mail address:" +msgstr "Vul uw e-mail adres in:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Basispakketten" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "De geselecteerde pakketten zijn niet onteigend. Kruis het bevestigingsvakje aan." +msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "De geselecteerde pakketten zijn niet overgedragen. Kruis het bevestigingsvakje aan." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Er is geen pakket gevonden om stemmen en opmerkingen mee samen te voegen." +msgstr "Kan geen pakket vinden om stemmen en comments mee samen te voegen" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." -msgstr "Het basispakket kan niet met zichzelf worden samengevoegd." +msgstr "" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "De geselecteerde pakketten zijn niet gewist. Kruis het bevestigingsvakje aan." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"De geselecteerde pakketten zijn niet gewist, vink het bevestigingsvakje aan." -#: html/pkgdel.php msgid "Package Deletion" -msgstr "Pakketverwijdering" +msgstr "Pakket Verwijdering." -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Pakket verwijderen" +#, php-format +msgid "Delete Package: %s" +msgstr "Verwijder Pakket: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Gebruik dit formulier om het basispakket ‘%s%s%s’, te verwijderen van AUR, evenals de volgende pakketten:" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "De verwijdering is permanent." - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "Kruis het veld aan om de actie te bevestigen." - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "Verwijdering bevestigen" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "Verwijderen" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." msgstr "" -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "Pakket onteigenen" +msgid "Deletion of a package is permanent. " +msgstr "Verwijdering van een pakket is permanent." + +msgid "Select the checkbox to confirm action." +msgstr "Vink het veld aan om de actie te bevestigen." + +msgid "Confirm package deletion" +msgstr "Bevestig pakketverwijdering" + +msgid "Delete" +msgstr "Verwijder" + +msgid "Only Trusted Users and Developers can delete packages." +msgstr "" +"Alleen Vertrouwde Gebruikers en Ontwikkelaars kunnen pakketten verwijderen." + +msgid "Disown Package" +msgstr "Onteigen Pakket" + +#, php-format +msgid "Disown Package: %s" +msgstr "" -#: html/pkgdisown.php #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Gebruik dit formulier om het basispakket ‘%s%s%s’, te onteigenen, evenals de volgende pakketten:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "Door het bevestigingsvakje aan te kruisen, stemt u in met het feit dat u geen mede-onderhouder meer bent." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Door het bevestigingsvakje aan te kruisen, bevestigt u dat u het pakket wilt onteigenen en het wilt overdragen aan %s%s%s." - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Door het bevestigingsvakje aan te kruisen, stemt u in met het onteigenen van het pakket." - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "Bevestig de pakketonteigening" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "Onteigenen" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Markeringsopmerking" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Pakket markeren als verouderd" - -#: templates/packages/flag.html msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "Dit lijkt een VCS-pakket te zijn. Markeer dit pakket %sniet%s als verouderd als de pakketversie op AUR niet overeenkomt met de recentste commit. Markeer het alleen als de broncodelocatie gewijzigd is of de PKGBUILD moet worden aangepast." +"By selecting the checkbox, you confirm that you want to disown the package." +msgstr "" -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Gebruik dit formulier om het basispakket ‘%s%s%s’ te markeren als verouderd, evenals de volgende pakketten:" +msgid "Confirm to disown the package" +msgstr "" -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Gebruik dit formulier %sniet%s om bugs te melden. Bugs kunt u melden in de opmerkingen." +msgid "Disown" +msgstr "" -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Vertel hieronder duidelijk waarom het pakket verouderd is, bij voorkeur met een link naar de aankondiging van de nieuwe versie of een link naar de tarball." +msgid "Only Trusted Users and Developers can disown packages." +msgstr "" -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Opmerkingen" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Markeren" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Alleen geregistreerde gebruikers kunnen pakketten markeren als verouderd." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Pakketsamenvoeging" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Pakket samenvoegen" +#, php-format +msgid "Merge Package: %s" +msgstr "Voeg Pakket Samen: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Gebruik dit formulier om het basispakket ‘%s%s%s’ samen te voegen met een ander pakket." - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "De volgende pakketten worden verwijderd:" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "Als dit pakket is samengevoegd, dan kan het proces niet worden teruggedraaid." - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "Geef de naam op van het pakket waarmee dit pakket moet worden samengevoegd." - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "Samenvoegen met:" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "Samenvoeging bevestigen" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "Samenvoegen" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." msgstr "" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Verzoek indienen" +msgid "The following packages will be deleted: " +msgstr "" + +msgid "Once the package has been merged it cannot be reversed. " +msgstr "Als dit pakket samengevoegd is kan dit niet teruggedraaid worden." + +msgid "Enter the package name you wish to merge the package into. " +msgstr "" +"Geef de naam van het pakket waarmee dit pakket samengevoegd moet worden." + +msgid "Merge into:" +msgstr "Voeg samen met:" + +msgid "Confirm package merge" +msgstr "Bevestig samenvoeging" + +msgid "Merge" +msgstr "Voeg samen" + +msgid "Only Trusted Users and Developers can merge packages." +msgstr "" +"Alleen Vertrouwde Gebruikers en Ontwikkelaars kunnen pakketten samen voegen." + +msgid "File Request" +msgstr "" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "Verzoek sluiten" +msgstr "" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Eerste" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Vorige" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Volgende" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Laatste" -#: html/pkgreq.php template/header.php msgid "Requests" -msgstr "Verzoeken" - -#: html/register.php template/header.php -msgid "Register" -msgstr "Registreren" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "Gebruik dit formulier om een ​​account aan te maken." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Algemene voorwaarden" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "De volgende documenten zijn bijgewerkt - lees ze zorgvuldig door:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "revisie %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Ik ga akkoord met de algemene voorwaarden." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" msgstr "" -#: html/tu.php +msgid "Trusted User" +msgstr "Vertrouwde Gebruiker" + msgid "Could not retrieve proposal details." -msgstr "Het voorstel kan niet worden geladen." +msgstr "Voorstel details kunnen niet opgehaald worden." -#: html/tu.php msgid "Voting is closed for this proposal." -msgstr "U kunt niet meer stemmen op dit voorstel." +msgstr "Stemmen is gesloten voor dit voorstel." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." +msgid "Only Trusted Users are allowed to vote." msgstr "" -#: html/tu.php msgid "You cannot vote in an proposal about you." -msgstr "U kunt niet stemmen op een voorstel over u." +msgstr "Je kunt niet stemmen in een voorstel over jou." -#: html/tu.php msgid "You've already voted for this proposal." -msgstr "U heeft al gestemd op dit voorstel." +msgstr "Je hebt al gestemd voor dit voorstel." -#: html/tu.php msgid "Vote ID not valid." -msgstr "Uw stem-ID is ongeldig." +msgstr "Stem ID niet geldig." -#: html/tu.php template/tu_list.php msgid "Current Votes" -msgstr "Huidig aantal stemmen" +msgstr "Huidige Stemmen" -#: html/tu.php msgid "Past Votes" -msgstr "Eerdere stemmen" +msgstr "Eerdere Stemmen" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Stemmers" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Registratie is uitgeschakeld op uw IP-adres, waarschijnlijk vanwege langdurige spamaanvallen. Excuses voor het ongemak." +msgstr "" +"Registratie is uitgeschakeld voor jouw IP adres, waarschijnlijk vanwege " +"langdurige spam aanvallen. Excuses voor het ongemak." -#: lib/acctfuncs.inc.php msgid "Missing User ID" -msgstr "Gebruikers-ID ontbreekt" +msgstr "Missende User ID" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "De gebruikersnaam is ongeldig." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" -msgstr "Het moet tussen de %s en %s tekens bevatten" +msgstr "Het moet tussen de %s en %s karakters lang zijn" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Begin en eindig met een letter of nummer" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." -msgstr "Mag maar één punt, komma of koppelteken bevatten." +msgstr "Kan maar één punt, komma of koppelteken bevatten." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Bevestig uw nieuwe wachtwoord." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." -msgstr "Het e-mailadres is ongeldig." +msgstr "Het e-mail adres is ongeldig." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "Het tweede e-mailadres is ongeldig." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "Het website-adres is ongeldig. Geef een volledige http(s)-url op." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." -msgstr "De PGP-vingerafdruk is ongeldig." +msgstr "De vingerafdruk van de PGP sleutel is ongeldig." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "De publieke SSH-sleutel is ongeldig." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." -msgstr "De accountbevoegdheden kunnen niet worden uitgebreid." +msgstr "Kan de account permissies niet verhogen." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." -msgstr "Deze taal wordt momenteel niet ondersteund." +msgstr "Taal wordt momenteel niet ondersteund." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Deze tijdzone wordt momenteel niet ondersteund." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." -msgstr "De gebruikersnaam, %s%s%s, is al in gebruik." +msgstr "De gebruikersnaam %s%s%s is al in gebruik." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." -msgstr "Het adres, %s%s%s, is al in gebruik." +msgstr "Het adres %s%s%s is al in gebruik." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "De publieke ssh-sleutel, %s%s%s, is al in gebruik." +msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "U heeft de captcha niet ingevuld." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "Deze captcha is verlopen - probeer het opnieuw." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "Het opgegeven captcha-antwoord is ongeldig." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." -msgstr "Er is een fout opgetreden tijdens het aanmaken van het account ‘%s%s%s’." +msgstr "Fout bij het aanmaken van account %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." -msgstr "Het account, %s%s%s, is aangemaakt." +msgstr "Het account %s%s%s is met succes aangemaakt." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Er is een wachtwoordherstelsleutel verstuurd naar uw e-mailadres." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." -msgstr "Klik op bovenstaande inloglink om uw account in gebruik te nemen." +msgstr "Klik op de Login link hierboven om je account te gebruiken" + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Welkom bij %s! Om een nieuw wachtwoord voor je account in te stellen, klik " +"de link hier onder. Als de link niet werkt, probeer dan om het te kopiëren " +"en te plakken in je browser." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" +"Een sleutel voor het resetten van je wachtwoord is verstuurd naar je e-mail " +"adres." -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." -msgstr "Er zijn geen aanpassingen gedaan aan het account ‘%s%s%s’." +msgstr "Geen veranderingen zijn gemaakt aan het account, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." -msgstr "Het account, %s%s%s, is aangepast." +msgstr "Het account %s%s%s is met succes aangepast." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Het inlogformulier is uitgeschakeld op uw IP-adres, waarschijnlijk vanwege langdurige spamaanvallen. Excuses voor het ongemak." +msgstr "" +"Het log-in formulier is uitgeschakeld voor je IP adres, waarschijnlijk " +"vanwege langdurige spam-aanvallen. Excuses voor het ongemak." -#: lib/acctfuncs.inc.php msgid "Account suspended" -msgstr "Account is geschorst" +msgstr "" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "U bent niet bevoegd om accounts te schorsen." - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Uw wachtwoord is hersteld. Als u net een nieuw account heeft aangemaakt, gebruik dan de link uit de bevestigingsmail om een wachtwoord te genereren. Als dat niet zo is, vraag dan een herstelsleutel aan op de %swachtwoordherstel%spagina." +msgstr "" +"Je wachtwoord is gereset. Als je net een nieuwe account hebt aangemaakt, " +"gebruik dan de link uit de bevestigingsmail om een wachtwoord te genereren. " +"In andere gevallen, vraag een herstelsleutel aan op de %sPassword Reset%s " +"pagina." -#: lib/acctfuncs.inc.php msgid "Bad username or password." -msgstr "Onjuiste gebruikersnaam of wachtwoord" +msgstr "Verkeerd gebruiker of wachtwoord" -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." -msgstr "Er is een fout opgetreden tijdens het aanmaken van een gebruikerssessie." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." -msgstr "Ongeldige e-mailadres- en herstelsleutel-combinatie." +msgstr "Ongeldige e-mail en reset-toets combinatie." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Geen" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Bekijk accountinformatie van %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "De basispakket-id of -naam ontbreekt." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "U bent niet bevoegd om deze opmerking te bewerken." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Deze opmerking bestaat niet." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "U mag geen blanco opmerking achterlaten." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "De opmerking is toegevoegd." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Log in om pakketinformatie aan te passen." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Ontbrekende opmerkings-ID." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Er kunnen max. 5 opmerkingen worden vastgezet." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "U bent niet bevoegd om deze opmerking vast te maken." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "U bent niet bevoegd om deze opmerking los te maken." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "De opmerking is vastgemaakt." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "De opmerking is losgemaakt." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." -msgstr "De pakketinformatie kan niet worden geladen." +msgstr "Fout bij het ophalen van pakketdetails." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." -msgstr "Er is geen pakketinformatie gevonden." +msgstr "Pakketdetails kunnen niet gevonden worden." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "Onjuiste doorverwijskop." - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "U heeft geen pakketten geselecteerd om meldingen over te ontvangen." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "Meldingen omtrent de geselecteerde pakketten zijn ingeschakeld." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "U heeft geen pakketten geselecteerd om meldingen van uit te schakelen." - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "Bij één van de geselecteerde pakketten zijn meldingen niet ingeschakeld." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "Meldingen omtrent de geselecteerde pakketten zijn uitgeschakeld." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." -msgstr "Log in om pakketten te markeren." +msgstr "Je moet ingelogd zijn voordat je pakketten kunt markeren." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." -msgstr "U heeft geen te markeren pakketten geselecteerd." +msgstr "Je hebt geen pakketten geselecteerd om te markeren." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "De geselecteerde pakketten zijn nog niet gemarkeerd. Laat een opmerking achter." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "De geselecteerde pakketten zijn gemarkeerd als verouderd." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." -msgstr "Log in om pakketten te demarkeren." +msgstr "" +"Je moet ingelogd zijn voordat je een markering voor een pakket kunt " +"verwijderen." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." -msgstr "U heeft geen te demarkeren pakketten geselecteerd." +msgstr "" +"Je hebt geen pakketten geselecteerd om de markering van te verwijderen." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." -msgstr "De geselecteerde pakketten zijn gedemarkeerd." +msgstr "De markering voor de geselecteerde pakketten is verwijderd." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." -msgstr "U bent niet bevoegd om pakketten te verwijderen." +msgstr "Je hebt geen toestemming om pakketten te verwijderen." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." -msgstr "U hebt geen te verwijderen pakketten geselecteerd." +msgstr "Je hebt geen pakketten geselecteerd om te verwijderen." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "Eén van de geselecteerde pakketten bestaat niet." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "De geselecteerde pakketten zijn verwijderd." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." -msgstr "Log in om eigenaar van pakketten te kunnen worden." +msgstr "Je moet ingelogd zijn voordat je pakketten kunt adopteren." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "U bent niet bevoegd om één van de geselecteerde pakketten over te nemen." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." -msgstr "Log in om pakketten te onteigenen." +msgstr "Je moet ingelogd zijn voordat je pakketten kunt onteigenen." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "U bent niet bevoegd om één van de geselecteerde pakketten te onteigenen." - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." -msgstr "U heeft geen over te nemen pakketten geselecteerd." +msgstr "Je hebt geen pakketten geselecteerd om te adopteren." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." -msgstr "U heeft geen te onteigenen pakketten geselecteerd." +msgstr "Je hebt geen pakketten geselecteerd om te onteigenen." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." -msgstr "De geselecteerde pakketten zijn overgedragen." +msgstr "De geselecteerde pakketten zijn geadopteerd." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "De geselecteerde pakketten zijn onteigend." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." -msgstr "Log in om te stemmen op pakketten." +msgstr "Je moet ingelogd zijn voordat je kunt stemmen op pakketten." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." -msgstr "Log in om stemmen in te trekken." +msgstr "Je moet ingelogd zijn voordat je je stem kunt verwijderen." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." -msgstr "U heeft geen pakketten geselecteerd om op te stemmen." +msgstr "Je hebt geen pakketten geselecteerd om op te stemmen." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." -msgstr "Uw stem op de geselecteerde pakketten is ingetrokken." +msgstr "Je stem is verwijderd voor de geselecteerde pakketten." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." -msgstr "U heeft gestemd op de geselecteerde pakketten." +msgstr "Je hebt gestemd voor de geselecteerde pakketten." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." -msgstr "U kunt niet worden toegevoegd aan de meldingslijst." +msgstr "Kon niet toevoegen aan notificatielijst." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." -msgstr "U bent toegevoegd aan de meldingslijst met opmerkingen bij %s." +msgstr "Je bent toegevoegd aan de comment notificatielijst voor %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." -msgstr "U bent toegevoegd van de meldingslijst met opmerkingen bij %s." +msgstr "Je bent verwijderd van de comment notificatielijst voor %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "U bent niet bevoegd om deze opmerking terug te plaatsen." +msgid "You must be logged in before you can edit package information." +msgstr "Je moet ingelogd zijn voordat je pakketinformatie kunt bewerken." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "De opmerking is teruggeplaatst." +msgid "Missing comment ID." +msgstr "Missende comment ID." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "U bent niet bevoegd om deze opmerking te verwijderen." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." -msgstr "De opmerking is verwijderd." +msgstr "Comment is verwijderd." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "De opmerking is bewerkt." +msgid "You are not allowed to delete this comment." +msgstr "Je hebt geen toestemming deze comment te verwijderen." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "U bent niet bevoegd om de trefwoorden van dit basispakket aan te passen." +msgid "Missing category ID." +msgstr "Missende categorie ID." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "De trefwoorden van dit basispakket zijn bijgewerkt." +msgid "Invalid category ID." +msgstr "Ongeldige categorie ID." + +msgid "You are not allowed to change this package category." +msgstr "Je hebt geen toestemming deze pakketcategorie aan te passen." + +msgid "Package category changed." +msgstr "Pakketcategorie aangepast." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "U bent niet bevoegd om de mede-onderhouders van dit basispakket aan te passen." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Ongeldige gebruikersnaam: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "De mede-onderhouders van dit basispakket zijn bijgewerkt." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" -msgstr "Bekijk pakketinformatie van" +msgstr "Toon pakketdetails voor" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "vereist %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." -msgstr "Log in om pakketverzoeken in te dienen." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Ongeldige naam: alleen kleine letters zijn toegestaan." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." -msgstr "U mag geen blanco opmerking achterlaten." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." -msgstr "Ongeldig verzoek." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." -msgstr "Het verzoek is toegevoegd." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." -msgstr "Ongeldige reden." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." -msgstr "Alleen TU's en ontwikkelaars mogen verzoeken sluiten." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." -msgstr "Het verzoek is gesloten." +msgstr "" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Gebruik dit formulier om het AUR-account ‘%s’ permanent te verwijderen." +msgstr "" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." -msgstr "%sWAARSCHUWING%s: deze actie kan niet ongedaan worden gemaakt!" +msgstr "" -#: template/account_delete.php msgid "Confirm deletion" -msgstr "Verwijdering bevestigen" +msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Gebruikersnaam" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" -msgstr "Soort account" +msgstr "Account Type" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Gebruiker" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Ontwikkelaar" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" +msgid "Trusted User & Developer" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" -msgstr "E-mailadres" +msgstr "E-mail adres" -#: template/account_details.php -msgid "hidden" -msgstr "verborgen" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Echte naam" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Website" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" -msgstr "IRC-bijnaam" +msgstr "IRC Nick" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" -msgstr "PGP-vingerafdruk" +msgstr "PGP sleutel vingerafdruk" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Status" -#: template/account_details.php msgid "Inactive since" -msgstr "Inactief sinds" +msgstr "" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Actief" -#: template/account_details.php -msgid "Registration date:" -msgstr "Registratiedatum:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "onbekend" - -#: template/account_details.php msgid "Last Login" -msgstr "Laatst ingelogd" +msgstr "" -#: template/account_details.php msgid "Never" msgstr "Nooit" -#: template/account_details.php msgid "View this user's packages" -msgstr "Bekijk pakketten van deze gebruiker" +msgstr "Bekijk gebruiker zijn pakketten" -#: template/account_details.php msgid "Edit this user's account" -msgstr "Bewerk het account van deze gebruiker" +msgstr "" -#: template/account_details.php -msgid "List this user's comments" -msgstr "Toon de opmerkingen van deze gebruiker" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." -msgstr "Klik %shier%s om dit account permanent te verwijderen." +msgstr "" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Klik %shier%s om de gebruikersgegevens te bekijken." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Klik %shier%s om de opmerkingen te bekijken die geplaatst zijn door dit account." - -#: template/account_edit_form.php msgid "required" msgstr "verplicht" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Uw gebruikersnaam gebruikt u om in te loggen. Deze naam is openbaar, zelfs als uw account inactief is." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Normale gebruiker" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Vertrouwde gebruiker" + msgid "Account Suspended" -msgstr "Account geschorst" +msgstr "Account Geschorst" -#: template/account_edit_form.php msgid "Inactive" -msgstr "Inactief" +msgstr "" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Zorg er voor dat u het e-mailadres goed hebt ingevoerd, anders wordt u buitengesloten." +msgid "Re-type password" +msgstr "Voer wachtwoord opnieuw in" -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "E-mailadres verbergen" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "Als u uw e-mailadres níet verbergt, dan is het zichtbaar voor alle geregistreerde AUR-gebruikers. Als u uw e-mailadres wél verbergt, dan is het alleen zichtbaar voor Arch Linux-medewerkers." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Tweede e-mailadres" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "U kunt desgewenst een tweede e-mailadres opgeven. Zo kunt u uw account herstellen als u geen toegang meer heeft tot uw primaire e-mailaccount." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "Er is een wachtwoordherstelsleutel verstuurd naar uw e-mailadres en uw tweede e-mailadres." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "Uw tweede e-mailadres is alleen zichtbaar voor Arch Linux-medewerkers, ongeacht de instelling ‘%s’." - -#: template/account_edit_form.php msgid "Language" msgstr "Taal" -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Tijdzone" - -#: template/account_edit_form.php msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Als u uw wachtwoord wilt wijzigen, voer dan een nieuw wachtwoord in en bevestig het door het nogmaals in te voeren." - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "Wachtwoord bevestigen" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "De volgende informatie is alleen verplicht als u pakketten aan de Arch User Repository wilt toevoegen." - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "Publieke ssh-sleutel" +msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Meldingsinstellingen" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Melding bij nieuwe opmerkingen" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Melding bij pakketupdates" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Melding bij nieuwe pakketeigenaar" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "Voer uw huidige wachtwoord in om uw profiel op te slaan:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "Huidig wachtwoord" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "Geef de uitvoer van de volgende opdracht op om automatische accountaanmaak te voorkomen:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Antwoord" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" -msgstr "Bijwerken" +msgstr "Update" -#: template/account_edit_form.php msgid "Create" msgstr "Aanmaken" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" -msgstr "Standaardwaarden" +msgstr "Reset" -#: template/account_search_results.php msgid "No results matched your search criteria." -msgstr "Er zijn geen zoekresultaten die overeenkomen met uw zoekcriteria." +msgstr "Geen resultaten die voldoen aan je zoekcriteria." -#: template/account_search_results.php msgid "Edit Account" -msgstr "Account bewerken" +msgstr "Bewerk account" -#: template/account_search_results.php msgid "Suspended" msgstr "Geschorst" -#: template/account_search_results.php msgid "Edit" msgstr "Bewerken" -#: template/account_search_results.php msgid "Less" msgstr "Minder" -#: template/account_search_results.php msgid "More" msgstr "Meer" -#: template/account_search_results.php msgid "No more results to display." -msgstr "Geen verdere resultaten gevonden." +msgstr "Geen andere resultaten gevonden " + +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" -#: template/comaintainers_form.php #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Gebruik dit formulier om mede-onderhouders toe te voegen aan ‘%s%s%s’ (één gebruikersnaam per regel):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "Gebruikers" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "Opslaan" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Gemarkeerde verouderde opmerking: %s" +msgid "My Packages" +msgstr "Mijn pakketten" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s heeft %s%s%s gemarkeerd als verouderd op %s%s%s omwille van de volgende reden:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s is niet gemarkeerd als verouderd." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Terug naar informatiepagina" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d aurweb-ontwikkelaarsteam." - -#: template/header.php msgid " My Account" -msgstr "Mijn account" +msgstr "Mijn Account" + +msgid "Register" +msgstr "Registreren" + +msgid "unknown" +msgstr "onbekend" + +msgid "Package Base Details" +msgstr "" -#: template/pkgbase_actions.php msgid "Package Actions" -msgstr "Pakketacties" +msgstr "Pakket Acties" -#: template/pkgbase_actions.php msgid "View PKGBUILD" -msgstr "PKGBUILD tonen" +msgstr "Toon PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "Wijzigingen bekijken" +msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" -msgstr "Momentopname downloaden" +msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" -msgstr "Wiki doorzoeken" +msgstr "" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Gemarkeerd als verouderd (%s)" +msgid "Flagged out-of-date" +msgstr "Markeer als verouderd" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" -msgstr "Markeren als verouderd" +msgstr "Markeer pakket als verouderd" -#: template/pkgbase_actions.php msgid "Unflag package" -msgstr "Markering verwijderen" +msgstr "Verwijder markering" -#: template/pkgbase_actions.php msgid "Remove vote" -msgstr "Stem intrekken" +msgstr "Verwijder stem" -#: template/pkgbase_actions.php msgid "Vote for this package" -msgstr "Stemmen op dit pakket" +msgstr "Stem voor dit pakket" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" -msgstr "Meldingen uitschakelen" +msgstr "Schakel notificaties uit" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Meldingen inschakelen" +msgid "Notify of new comments" +msgstr "Notificatie bij nieuwe comment" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "Mede-onderhouders beheren" +msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" -msgstr[0] "%d verzoek in wachtrij" -msgstr[1] "%d verzoeken in wachtrij" +msgstr[0] "" +msgstr[1] "" + +msgid "Delete Package" +msgstr "Verwijder Pakket" + +msgid "Merge Package" +msgstr "Voeg Pakket Samen" -#: template/pkgbase_actions.php msgid "Adopt Package" -msgstr "Eigenaar worden" +msgstr "Adopteer Pakket" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Details van basispakket" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" -msgstr "Git clone-url" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "alleen-lezen" +msgid "Category" +msgstr "Categorie" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "klik om te kopiëren" +msgid "Change category" +msgstr "Verander categorie" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Trefwoorden" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Inzender" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Toon accountinformatie voor %s" + msgid "Maintainer" -msgstr "Eigenaar" +msgstr "Beheerder" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" -msgstr "Recentste pakketbouwer" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Stemmen" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Populariteit" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Toegevoegd" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" -msgstr "Recentste update" +msgstr "Laatste Update" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Opmerking bewerken van: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" -msgstr "Opmerking toevoegen" +msgstr "Voeg Comment Toe" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "Git-commitidentificaties die verwijzen naar commits in de AUR-bron en url's, worden automatisch omgezet naar links." +msgid "Comment has been added." +msgstr "Opmerking is toegevoegd." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "%sMarkdown-syntax%s wordt gedeeltelijk ondersteund." +msgid "View all comments" +msgstr "" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Vastgemaakte opmerkingen" - -#: template/pkg_comments.php msgid "Latest Comments" -msgstr "Nieuwste opmerkingen" +msgstr "Nieuwste Comments" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Opmerkingen bij" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s heeft een opmerking geplaatst bij %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Anonieme opmerking bij %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "Opmerking geplaatst bij %s op %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "verwijderd op %s door %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "verwijderd op %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "bewerkt op %s door %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "bewerkt op %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Opmerking terugplaatsen" - -#: template/pkg_comments.php msgid "Delete comment" -msgstr "Opmerking verwijderen" +msgstr "Verwijder opmerking" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Opmerking vastmaken" +#, php-format +msgid "Comment by %s" +msgstr "Comment door %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Opmerking losmaken" +msgid "Anonymous comment" +msgstr "" + +msgid "deleted" +msgstr "" + +msgid "All comments" +msgstr "Alle comments" -#: template/pkg_details.php msgid "Package Details" -msgstr "Pakketinformatie" +msgstr "Pakketdetails" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" -msgstr "Basispakket" +msgstr "" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Omschrijving" -#: template/pkg_details.php msgid "Upstream URL" -msgstr "Upstream-url" +msgstr "Upstream URL" -#: template/pkg_details.php msgid "Visit the website for" -msgstr "Ga naar de website van" +msgstr "Bezoek de website voor" -#: template/pkg_details.php msgid "Licenses" -msgstr "Licenties" +msgstr "" -#: template/pkg_details.php msgid "Groups" -msgstr "Groepen" +msgstr "" -#: template/pkg_details.php msgid "Conflicts" -msgstr "Conflicten" +msgstr "" -#: template/pkg_details.php msgid "Provides" -msgstr "Voorziet in" +msgstr "" -#: template/pkg_details.php msgid "Replaces" -msgstr "Vervangt" +msgstr "" -#: template/pkg_details.php msgid "Dependencies" msgstr "Afhankelijkheden" -#: template/pkg_details.php msgid "Required by" msgstr "Vereist door" -#: template/pkg_details.php msgid "Sources" msgstr "Bronnen" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Gebruik dit formulier om het verzoek aangaande het basispakket ‘%s%s%s’ te sluiten." +msgstr "" + +msgid "Note" +msgstr "" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Het commentaarveld mag worden leeggelaten, maar het wordt sterk aanbevolen om een afwijzing van commentaar te voorzien." +msgstr "" -#: template/pkgreq_close_form.php msgid "Reason" -msgstr "Reden" +msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" -msgstr "Goedgekeurd" +msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" -msgstr "Afgewezen" +msgstr "" + +msgid "Comments" +msgstr "" + +#, php-format +msgid "File Request: %s" +msgstr "" -#: template/pkgreq_form.php #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Gebruik dit formulier om een verzoek in te dienen voor het basispakket ‘%s%s%s’, wat de volgende pakketten bevat:" +msgstr "" -#: template/pkgreq_form.php msgid "Request type" -msgstr "Soort verzoek" +msgstr "" -#: template/pkgreq_form.php msgid "Deletion" -msgstr "Verwijdering" +msgstr "" -#: template/pkgreq_form.php msgid "Orphan" -msgstr "Onbeheerd" +msgstr "" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" -msgstr "Samenvoegen met" +msgstr "Voeg samen met" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Er zijn geen verzoeken die overeenkomen met uw zoekcriteria." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." -msgstr[0] "%d pakketverzoek gevonden" -msgstr[1] "%d pakketverzoeken gevonden" +msgstr[0] "" +msgstr[1] "" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." -msgstr "Pagina %d van %d." +msgstr "" -#: template/pkgreq_results.php msgid "Package" -msgstr "Pakket" +msgstr "" -#: template/pkgreq_results.php msgid "Filed by" -msgstr "Ingediend door" +msgstr "" -#: template/pkgreq_results.php msgid "Date" -msgstr "Datum" +msgstr "" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d dag resterend" -msgstr[1] "~%d dagen resterend" +msgid "~%d days left" +msgstr "" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" -msgstr[0] "~%d uur resterend" -msgstr[1] "~%d uur resterend" +msgstr[0] "" +msgstr[1] "" -#: template/pkgreq_results.php msgid "<1 hour left" -msgstr "<1 uur resterend" +msgstr "" -#: template/pkgreq_results.php msgid "Accept" -msgstr "Goedkeuren" +msgstr "" -#: template/pkgreq_results.php msgid "Locked" -msgstr "Vergrendeld" +msgstr "" -#: template/pkgreq_results.php msgid "Close" -msgstr "Sluiten" +msgstr "" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "In behandeling" - -#: template/pkgreq_results.php msgid "Closed" -msgstr "Gesloten" +msgstr "" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Naam, omschrijving" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Alleen de naam" -#: template/pkg_search_form.php msgid "Exact Name" -msgstr "Exacte naam" +msgstr "" -#: template/pkg_search_form.php msgid "Exact Package Base" -msgstr "Exact basispakket" +msgstr "" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Mede-onderhouder" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Eigenaar, Mede-onderhouder" - -#: template/pkg_search_form.php msgid "All" msgstr "Alle" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Gemarkeerd" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Ongemarkeerd" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Naam" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Gestemd" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Laatst gewijzigd" +msgid "Age" +msgstr "Leeftijd" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Oplopend" -#: template/pkg_search_form.php msgid "Descending" msgstr "Aflopend" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Voer zoekcriteria in" -#: template/pkg_search_form.php -msgid "Search by" -msgstr "Zoeken op" +msgid "Any" +msgstr "Elke" + +msgid "Search by" +msgstr "Zoek op" + +msgid "Keywords" +msgstr "Sleutelwoorden" -#: template/pkg_search_form.php template/stats/user_table.php msgid "Out of Date" msgstr "Verouderd" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" -msgstr "Sorteren op" +msgstr "Sorteer Op" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Sorteervolgorde" -#: template/pkg_search_form.php msgid "Per page" msgstr "Per pagina" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Ga" -#: template/pkg_search_form.php msgid "Orphans" -msgstr "Onbeheerd" +msgstr "Wezen" -#: template/pkg_search_results.php msgid "Error retrieving package list." -msgstr "De pakketlijst kan niet worden opgehaald." +msgstr "Fout bij het ophalen van pakkettenlijst" -#: template/pkg_search_results.php msgid "No packages matched your search criteria." -msgstr "Er zijn geen pakketten die overeenkomen met uw zoekcriteria." +msgstr "Geen pakketen gevonden die aan uw zoekcriteria voldoen" -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." -msgstr[0] "%d pakket gevonden" -msgstr[1] "%d pakketten gevonden" +msgstr[0] "" +msgstr[1] "" -#: template/pkg_search_results.php msgid "Version" msgstr "Versie" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "De populariteit wordt vastgesteld op basis van het totaal aantal stemmen plus een factor %.2f per dag sinds de aanmaak." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Ja" -#: template/pkg_search_results.php msgid "orphan" -msgstr "onbeheerd" +msgstr "wees" -#: template/pkg_search_results.php msgid "Actions" msgstr "Acties" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Markeer Verouderd" + msgid "Unflag Out-of-date" -msgstr "Demarkeren als verouderd" +msgstr "Hef Out-of-Date markering op" -#: template/pkg_search_results.php msgid "Adopt Packages" -msgstr "Eigenaar worden" +msgstr "Adopteer Pakketten" -#: template/pkg_search_results.php msgid "Disown Packages" -msgstr "Pakketten onteigenen" +msgstr "Onteigen Pakketten" -#: template/pkg_search_results.php msgid "Delete Packages" -msgstr "Pakketten verwijderen" +msgstr "Verwijder pakketten" -#: template/pkg_search_results.php msgid "Confirm" -msgstr "Bevestigen" +msgstr "Bevestig" -#: template/search_accounts_form.php msgid "Any type" msgstr "Elk type" -#: template/search_accounts_form.php msgid "Search" -msgstr "Zoeken" +msgstr "Zoek" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Statistieken" -#: template/stats/general_stats_table.php msgid "Orphan Packages" -msgstr "Onteigend" +msgstr "Weespakketten" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" -msgstr "Toegevoegd in de afgelopen 7 dagen" +msgstr "Pakketten toegevoegd in de laatste 7 dagen" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" -msgstr "Bijgewerkt in de afgelopen 7 dagen" +msgstr "Pakketten geüpdatet in de laatste 7 dagen" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" -msgstr "Bijgewerkt in het afgelopen jaar" +msgstr "Pakketen geüpdatet in het laatste jaar" -#: template/stats/general_stats_table.php msgid "Packages never updated" -msgstr "Nooit bijgewerkt" +msgstr "Nooit geüpdate pakketten" -#: template/stats/general_stats_table.php msgid "Registered Users" -msgstr "Geregistreerde gebruikers" +msgstr "Geregistreerde Gebruikers" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Vertrouwde Gebruikers" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Recente updates" -#: template/stats/updates_table.php -msgid "more" -msgstr "meer" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Mijn statistieken" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Pakketten in AUR" + msgid "Proposal Details" msgstr "Voorsteldetails" -#: template/tu_details.php msgid "This vote is still running." -msgstr "De stemming loopt nog." +msgstr "Dit voorstel is nog bezig" -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" -msgstr "Ingediend: %s, door %s" +msgstr "Opgestuurd: %s door %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Einde" -#: template/tu_details.php msgid "Result" -msgstr "Resultaat" +msgstr "" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Nee" -#: template/tu_details.php msgid "Abstain" -msgstr "Blanco stemmen" +msgstr "Onthouden" -#: template/tu_details.php msgid "Total" msgstr "Totaal" -#: template/tu_details.php msgid "Participation" -msgstr "Deelname" +msgstr "" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" -msgstr "Recentste stemmen van TU" +msgstr "" -#: template/tu_last_votes_list.php msgid "Last vote" -msgstr "Recentste stem" +msgstr "" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Geen resultaten gevonden." -#: template/tu_list.php msgid "Start" msgstr "Start " -#: template/tu_list.php msgid "Back" msgstr "Terug" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "AUR-wachtwoordherstel" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "Er is een verzoek ingediend om het wachtwoord te herstellen van het account ‘{user}’, wat geregistreerd staat op uw e-mailadres. Als u uw wachtwoord wilt herstellen, volg dan onderstaande link ([1]). Als u dat niet wilt, kunt u deze e-mail beschouwen als niet-verzonden." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Welkom bij de Arch User Respository" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Welkom bij de Arch User Repository! Als u een nieuw wachtwoord voor uw account wilt instellen, klik dan op de link ([1]) hieronder. Als de link niet werkt, kopieer en plak deze dan in uw browser." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "AUR-opmerking bij {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} ([1]) heeft een opmerking geplaatst bij {pkgbase} ([2]): " - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Als u geen meldingen aangaande dit pakket meer wilt ontvangen, ga dan naar de pakketpagina ([2]) en klik op ‘{label}’." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "AUR-pakketupdate: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} ([1]) heeft een commit toegevoegd aan {pkgbase} ([2]): " - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "AUR-verouderingsmelding van {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Uw pakket genaamd ‘{pkgbase} ([1])’ is als verouderd gemarkeerd door {user} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "AUR-eigenaarsmelding van {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "{user} [2] is de nieuwe eigenaar van het pakket ‘{pkgbase}’ [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "{pkgbase} [1] is onteigend door {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "AUR-mede-eigenaarsmelding van {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "U bent toegevoegd aan de lijst met onderhouder van {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "U bent verwijderd van de lijst met onderhouder van {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "AUR-pakket verwijderd: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] heeft {old} [2] samengevoegd met {new} [3].\n\n--\nAls u geen meldingen aangaande dit pakket meer wilt ontvangen, ga dan naar de pakketpagina ([2]) en klik op ‘{label}’." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] heeft {pkgbase} [2] verwijderd.\n\n\nU ontvangt geen meldingen meer aangaande dit pakket." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Vergeet niet uw stem uit te brengen op het voorstel ‘{id}’ [1]. De stemming sluit over minder dan 48 uur." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "Ongeldig accounttype." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "U bent niet bevoegd om accounttypes te wijzigen." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "U bent niet bevoegd om het accounttype van deze gebruiker te wijzigen in ‘%s’." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "Er zijn geen goed te keuren onteigeningsverzoeken omtrent %s." - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "Interne serverfout" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "Er is een kritieke fout opgetreden." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "De details zijn vastgelegd en worden nagekeken door de beheerder. Onze excuses voor het eventuele ontstane ongemak." - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "AUR-serverfout" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "Gerelateerde pakketverzoekreacties…" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "Met deze actie sluit u elk gerelateerd openstaand verzoek. Als %s reacties%s genegeerd worden, dan wordt er een automatische afsluitreactie geplaatst." - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/pl.po b/po/pl.po index e68fa533..ece06fd7 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,2397 +1,1349 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: # Bartłomiej Piotrowski , 2011 # Bartłomiej Piotrowski , 2014 -# hawkeye116477 , 2019 -# Chris Warrick, 2013 -# Chris Warrick, 2012 +# Chris Warrick , 2013 +# Chris Warrick , 2012 # Kwpolska , 2011 # Lukas Fleischer , 2011 -# marcin mikołajczak , 2017 -# Michal T , 2016 # Nuc1eoN , 2014 -# Piotr Strębski , 2017-2018,2022 -# Piotr Strębski , 2013-2016 -# Przemyslaw Ka. , 2021 +# Piotr Strębski , 2013-2014 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Piotr Strębski , 2017-2018,2022\n" -"Language-Team: Polish (http://app.transifex.com/lfleischer/aurweb/language/pl/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Polish (http://www.transifex.com/projects/p/aur/language/" +"pl/)\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" -"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" -#: html/404.php msgid "Page Not Found" msgstr "Nie znaleziono strony" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Przepraszamy, strona o którą prosiłeś nie istnieje." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Uwaga" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Adresy URL GIT clone nie są przeznaczone do otwierania w przeglądarce." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Aby sklonować repozytorium GIT-a %s, uruchom %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Kliknij %stutaj%s by powrócić do strony szczegółów %s." - -#: html/503.php msgid "Service Unavailable" -msgstr "Usługa niedostępna" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Nie panikuj! W związku z przeprowadzanymi pracami technicznymi strona jest chwilowo niedostępna. Już wkrótce wrócimy." +msgstr "" -#: html/account.php msgid "Account" -msgstr "Konto" +msgstr "" -#: html/account.php template/header.php msgid "Accounts" msgstr "Konta" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Nie masz uprawnień do oglądania tej strony." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Uzyskanie informacji o podanym użytkowniku nie powiodło się." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Nie masz uprawnień do edycji tego konta." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Błędne hasło." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Przy użyciu tego formularza możesz przeszukać istniejące konta." -#: html/account.php msgid "You must log in to view user information." -msgstr "Musisz być zalogowany, aby móc przeglądać informacje o użytkownikach." +msgstr "Musisz być zalogowany aby móc oglądać informacje o użytkownikach." + +msgid "Use this form to create an account." +msgstr "Przy użyciu tego formularza możesz utworzyć konto." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" -msgstr "Dodaj propozycję" +msgstr "Dodaj Propozycję" -#: html/addvote.php msgid "Invalid token for user action." -msgstr "Nieprawidłowy token dla czynności użytkownika." +msgstr "Nieprawidłowy token dla akcji użytkownika." -#: html/addvote.php msgid "Username does not exist." msgstr "Nazwa użytkownika nie istnieje." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s ma już propozycję dla nich." -#: html/addvote.php msgid "Invalid type." msgstr "Nieprawidłowy rodzaj." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Propozycja nie może być pusta." -#: html/addvote.php msgid "New proposal submitted." msgstr "Nowa propozycja wysłana." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Wyślij propozycję do głosowania." -#: html/addvote.php msgid "Applicant/TU" -msgstr "Wnioskodawca/ZU" +msgstr "Wnioskodawca/TU" -#: html/addvote.php msgid "(empty if not applicable)" -msgstr "(puste, jeśli nie dotyczy)" +msgstr "(puste jeśli nie dotyczy)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Rodzaj" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Dodanie ZU" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Usunięcie ZU" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Usunięcie ZU (niezadeklarowana nieaktywność)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Zmiana Regulaminu" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Propozycja" -#: html/addvote.php msgid "Submit" msgstr "Wyślij" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Zarządzanie współutrzymującymi" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Edytuj komentarz" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Tablica rozdzielcza" - -#: html/home.php template/header.php msgid "Home" msgstr "Start" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Moje oflagowane pakiety" - -#: html/home.php -msgid "My Requests" -msgstr "Moje prośby" - -#: html/home.php -msgid "My Packages" -msgstr "Moje pakiety" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Wyszukaj pakiety, którymi się opiekuję" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Współ-utrzymywane pakiety" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Wyszukaj pakiety, które współ-utrzymuję" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Witamy w AUR! Aby uzyskać więcej informacji, przeczytaj %sInstrukcję " +"Użytkownika AUR%s oraz %sInstrukcję Zaufanego Użytkownika%s." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Pliki PKGBUILD %smuszą%s być zgodne ze %sStandardami Pakietów Archa%s, inaczej będą usuwane!" +msgstr "" +"Pliki PKGBUILD %smuszą%s być zgodne ze %sStandardami Pakietów Archa%s, " +"inaczej będą usuwane!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Nie zapomnij zagłosować na swoje ulubione pakiety!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Część pakietów może być dostępna w formie binarnej w [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "Część pakietów może być dostępna w formie binarnej w [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "ZRZECZENIE" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Pakiety w AUR są tworzone przez użytkowników. Używasz ich na własne ryzyko." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Zamieszczone pakiety są niewspierane i utworzone przez użytkowników. Używasz " +"ich na własne ryzyko." -#: html/home.php -msgid "Learn more..." -msgstr "Dowiedz się więcej..." - -#: html/home.php msgid "Support" -msgstr "Wsparcie" - -#: html/home.php -msgid "Package Requests" -msgstr "Prośby o pakiet" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" msgstr "" -#: html/home.php -msgid "Orphan Request" -msgstr "Zgłoszenie osieroconego pakietu" +msgid "Package Requests" +msgstr "" + +#, php-format +msgid "" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" + +msgid "Orphan Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Wnioskuj o wyrzeczenie własności pakietu - np. gdy zarządzający jest nieaktywny i pakiet został oznaczony jako przestarzały dawno temu." - -#: html/home.php -msgid "Deletion Request" -msgstr "Prośba o usunięcie" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Prośba o połączenie" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Przesyłanie pakietów" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Następujące odciski SSH są używane przez AUR:" - -#: html/home.php msgid "Discussion" msgstr "Dyskusja" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Zgłaszanie błędów" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Wyszukiwanie pakietów" -#: html/index.php msgid "Adopt" msgstr "Przejmij" -#: html/index.php msgid "Vote" msgstr "Głosuj" -#: html/index.php msgid "UnVote" msgstr "Cofnij głos" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Włącz powiadamianie" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Rezygnuj z powiadamiania" -#: html/index.php +msgid "Flag" +msgstr "Oznacz" + msgid "UnFlag" msgstr "Odznacz" -#: html/login.php template/header.php msgid "Login" msgstr "Zaloguj się" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Zalogowany jako: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Wyloguj się" -#: html/login.php msgid "Enter login credentials" msgstr "Podaj poświadczenia logowania" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "Użytkownik" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Hasło" -#: html/login.php msgid "Remember me" msgstr "Zapamiętaj mnie" -#: html/login.php msgid "Forgot Password" msgstr "Zapomniałem hasła" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Logowanie w HTTP jest wyłączone. %sPrzełącz się na HTTPs%s aby się zalogować." +msgstr "" +"Logowanie w HTTP jest wyłączone. %sPrzełącz się na HTTPs%s aby się " +"zalogować." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Kryteria wyszukiwania" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Pakiety" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Błąd podczas pobierania informacji o pakiecie." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Brakuje wymaganego pola." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Hasła nie zgadzają się." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Twoje hasło musi mieć składać się z conajmniej %s znaków." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Nieprawidłowy e-mail." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Resetowanie hasła" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." -msgstr "Na Twój adres został wysłany e-mail z instrukcją dotyczącą resetowania hasła." +msgstr "" +"Na Twój adres został wysłany e-mail z instrukcją dotyczącą resetowania hasła." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Twoje hasło zostało pomyślnie zresetowane." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" +msgid "Confirm your e-mail address:" +msgstr "Potwierdź swój adres e-mail:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Wpisz nowe hasło:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Wpisz ponownie hasło:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Kontynuuj" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" +"Jeśli zapomniałeś adresu e-mail, którego użyłeś do rejestracji, prosimy o " +"wysłanie wiadomości na naszą listę dyskusyjną %saur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "Wpisz swój adres e-mail:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Bazy pakietów" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Wybrane pakiety nie zostały porzucone, sprawdź pole wyboru potwierdzenia." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "Nie można znaleźć pakietu do scalenia głosów i komentarzy." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." -msgstr "Nie można połączyć bazy pakietu z nią samą." +msgstr "Nie można połączyć bazowego pakietu z nim samym." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Wybrane pakiety nie zostały usunięte, sprawdź pole wyboru potwierdzenia." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Wybrane pakiety nie zostały usunięte, sprawdź pole wyboru potwierdzenia." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Usuwanie pakietów" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Usuń pakiet" +#, php-format +msgid "Delete Package: %s" +msgstr "Usuń pakiet: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Użyj tego formularza, aby usunąć bazę pakietu %s%s%s i następujące pakiety z AUR:" +msgstr "" +"Użyj tego formularza, aby usunąć bazę pakietu %s%s%s i następujące pakiety z " +"AUR:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Usunięcie pakietu jest nieodwracalne." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Zaznacz pole aby potwierdzić akcję." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Potwierdź usunięcie pakietu" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Usuń" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Tylko Zaufani Użytkownicy i Deweloperzy mogą usuwać pakiety." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Porzuć pakiet" -#: html/pkgdisown.php #, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Użyj tego formularza, aby złożyć prośbę wyrzeczenie własności bazie pakietu %s%s%s, która zawiera następujące pakiety:" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." +msgid "Disown Package: %s" +msgstr "" + +#, php-format +msgid "" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Zaznaczając pole wyboru potwierdzasz, że chcesz porzucić pakiet i przenieść własność na %s%s%s." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Zaznaczając pole wyboru potwierdzasz, że chcesz porzucić pakiet." +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "Potwierdź porzucenie pakietu" +msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "Porzuć" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Oznacz komentarz" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Oznacz pakiet jako nieaktualny" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Użyj tego formularza, aby oznaczyć bazę pakietu %s%s%s i następujące pakiety jako nieaktualne:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Prosimy %snie%s używać tego formularza do zgłaszania błędów. Użyj do tego systemu komentowania pakietu." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Wprowadź poniżej szczegóły, dlaczego pakiet został oznaczony jako nieaktualny, najlepiej łącznie z odnośnikiem do ogłoszenia o nowym wydaniu lub do archiwum tarball nowego wydania." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Kommentarze" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Oznacz" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Tylko zarejestrowani użytkownicy mogą oznaczać pakiety jako nieaktualne." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Scalanie pakietów" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Scal pakiet" +#, php-format +msgid "Merge Package: %s" +msgstr "Scal pakiet: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "Użyj tego formularza, aby scalić bazę pakietu %s%s%s w inny pakiet." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Następujące pakiety zostaną usunięte:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " -msgstr "Gdy pakiet zostanie scalony to nie będzie możliwości odwrócenia tej czynności." +msgstr "" +"Gdy pakiet zostanie scalony to nie będzie możliwości odwrócenia tej " +"czynności." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Podaj nazwę pakietu, pod którą chcesz dokonać scalenia pakietu." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Scal z:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Potwierdź scalenie pakietu" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Scal" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Tylko Zaufani Użytkownicy i Deweloperzy mogą scalać pakiety." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Prześlij prośbę" +msgid "File Request" +msgstr "Złóż propozycję" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "Zamknij prośbę" +msgstr "Zamknij propozycję" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Pierwsza" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Poprzednia" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Następna" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Ostatnia" -#: html/pkgreq.php template/header.php msgid "Requests" -msgstr "Prośby" +msgstr "Propozcje" -#: html/register.php template/header.php -msgid "Register" -msgstr "Zarejestruj się" +msgid "Trusted User" +msgstr "Zaufany Użytkownik" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Przy użyciu tego formularza możesz utworzyć konto." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Zasady korzystania" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Zaktualizowano następujące dokumenty. Przejrzyj je dokładnie:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "wydanie %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Akceptuję powyższe warunki i zasady." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Nie można odczytać szczegółów propozycji." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Głosowanie na tą propozycję jest zamknięte." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Tylko Zaufani Użytkownicy mogą głosować." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Nie możesz głosować w propozycji o tobie." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Już zagłosowałeś na tą propozycję" -#: html/tu.php msgid "Vote ID not valid." -msgstr "Nieprawidłowy identyfikator głosowania." +msgstr "ID głosowania nieprawidłowe." -#: html/tu.php template/tu_list.php msgid "Current Votes" -msgstr "Obecne głosy" +msgstr "Obecne Głosy" -#: html/tu.php msgid "Past Votes" -msgstr "Poprzednie głosy" +msgstr "Poprzednie Głosy" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Głosujących" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Rejestracja konta została wyłączona dla Twojego adresu IP, najprawdopodobniej z powodu przeprowadzanych ataków spamerskich. Przepraszamy za niedogodności." +msgstr "" +"Rejestracja konta została wyłączona dla Twojego adresu IP, " +"najprawdopodobniej z powodu przeprowadzanych ataków spamerskich. " +"Przepraszamy za niedogodności." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Brakujące ID użytkownika." -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Nazwa użytkownika jest nieprawidłowa." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Długość musi być pomiędzy %s a %s" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Zacznij i zakończ literą lub cyfrą" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Może zawierać tylko jedną kropkę, podkreślnik lub myślnik." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Potwierdź nowe hasło." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "Adres e-mail jest nieprawidłowy." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "Zapasowy adres e-mail jest nieprawidłowy." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "Odcisk palca klucza PGP jest nieprawidłowy." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "Klucz publiczny SSH jest nieprawidłowy." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Nie można zwiększyć uprawnień konta." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Język nie jest obecnie obsługiwany." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Strefa czasowa nie jest obecnie obsługiwana." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "Nazwa użytkownika, %s%s%s, jest już używana." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "Adres, %s%s%s, jest już używany." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "Publiczny klucz SSH, %s%s%s, jest już używany." - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." msgstr "" -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Wystąpił błąd podczas tworzenia konta, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "Konto %s%s%s zostało pomyślnie utworzone." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Klucz resetujący hasło został przesłany na Twój adres e-mail." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Kliknij na link Zaloguj się powyżej aby się zalogować." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Witamy w %s! Aby ustawić hasło początkowe dla swojego nowego konta prosimy o " +"kliknięcie poniższego odnośnika. Jeśli odnośnik nie zadziała spróbuj " +"skopiować go i wkleić w oknie swojej przeglądarki internetowej." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "Klucz resetujący hasło został przesłany na Twój adres e-mail." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Nie zostały dokonane żadne zmiany na koncie, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "Konto %s%s%s zostało pomyślnie zaktualizowane." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Formularz logowania jest obecnie wyłączony dla Twojego adresu IP, najprawdopodobniej z powodu przeprowadzanych ataków spamerskich. Przepraszamy za niedogodności." +msgstr "" +"Formularz logowania jest obecnie wyłączony dla Twojego adresu IP, " +"najprawdopodobniej z powodu przeprowadzanych ataków spamerskich. " +"Przepraszamy za niedogodności." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Konto zawieszone" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Twoje hasło zostało zresetowane. Jeśli dopiero co utworzyłeś nowe konto, prosimy o użycie odnośnika z e-maila potwierdzającego rejestrację, aby ustawić hasło początkowe. W innym przypadku, prosimy o wnioskowanie o klucz resetujący na stronie %sresetowania hasła%s." +msgstr "" +"Twoje hasło zostało zresetowane. Jeśli dopiero co utworzyłeś nowe konto, " +"prosimy o użycie odnośnika z e-maila potwierdzającego rejestrację, aby " +"ustawić hasło początkowe. W innym przypadku, prosimy o wnioskowanie o klucz " +"resetujący na stronie %sresetowania hasła%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Nieprawidłowa nazwa użytkownika lub hasło." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Wystąpił błąd przy próbie utworzenia sesji użytkownika." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Nieprawidłowy e-mail i klucz do resetowania." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Żaden" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Wyświetl informacje o koncie %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Brakuje identyfikatora lub nazwy bazy pakietów." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Nie masz uprawnień do edycji tego komentarza." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Komentarz nie istnieje." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Komentarz nie może być pusty." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Komentarz został dodany." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Musisz być zalogowany aby móc edytować informacje o pakiecie." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Brakuje identyfikatora komentarza." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Można przypiąć nie więcej niż 5 komentarzy." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Nie masz uprawnień do przypięcia tego komentarza." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Nie masz uprawnień do odpięcia tego komentarza." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Komentarz został przypięty." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Komentarz został odpięty." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Błąd podczas pobierania informacji o pakiecie." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Nie odnaleziono informacji o pakiecie." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Musisz być zalogowany aby móc oznaczyć pakiety." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Nie wybrałeś żadnych pakietów do oznaczenia." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Zaznaczone pakiety nie zostały oznaczone, prosimy o wpisanie komentarza." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Wybrane pakiety zostały oznaczone jako nieaktualne." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Musisz być zalogowany aby móc odznaczyć pakiety." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Nie wybrałeś żadnych pakietów do odznaczenia." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Wybrane pakiety zostały odznaczone." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Nie masz uprawnień do usuwania pakietów." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Nie wybrałeś żadnych pakietów do usunięcia." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Wybrane pakiety zostały usunięte." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Musisz być zalogowany aby móc przejmować pakiety." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." -msgstr "Musisz być zalogowany, aby móc porzucać pakiety." +msgstr "Musisz być zalogowany aby móc porzucać pakiety." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Nie wybrałeś żadnych pakietów do przejęcia." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Nie wybrałeś żadnych pakietów do porzucenia." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Wybrane pakiety zostały przejęte." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Wybrane pakiety zostały porzucone." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Musisz być zalogowany aby móc głosować na pakiety." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Musisz być zalogowany aby móc anulować głosy na pakiety." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Nie wybrałeś żadnych pakietów do zagłosowania." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Twoje głosy zostały odebrane wybranym pakietom." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Twoje głosy zostały przyznane wybranym pakietom." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Dodanie do listy powiadamiania nie powiodło się." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Zostałeś dodany do listy powiadamiania o nowych komentarzach dla %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Zostałeś usunięty z listy powiadamiania o komentarzach dla %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Nie masz uprawnień do cofnięcia usunięcia tego komentarza." +msgid "You must be logged in before you can edit package information." +msgstr "Musisz być zalogowany aby móc edytować informacje o pakiecie." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Zostało cofnięte usunięcie komentarza." +msgid "Missing comment ID." +msgstr "Brakuje identyfikatora komentarza." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Nie masz uprawnień do usunięcia tego komentarza." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Komentarz został usunięty." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Komentarz został zmodyfikowany." +msgid "You are not allowed to delete this comment." +msgstr "Nie masz uprawnień do usunięcia tego komentarza." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Nie masz uprawnień, by modyfikować słowa kluczowe tej bazy pakietów." +msgid "Missing category ID." +msgstr "Brakujące ID kategorii." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Słowa kluczowe bazy pakietu zostały zaktualizowane." +msgid "Invalid category ID." +msgstr "Nieprawidłowy identyfikator kategorii." + +msgid "You are not allowed to change this package category." +msgstr "Nie masz uprawnień, by zmienić kategorię tego pakietu." + +msgid "Package category changed." +msgstr "Kategoria pakietu zmieniona." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Nie masz uprawnień, by zarządzać współutrzymującymi tej bazy pakietu." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Niepoprawna nazwa użytkownika: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "Współutrzymujący bazy pakietu zostali zaktualizowani." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Wyświetl informacje o pakiecie" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "wymaga %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." -msgstr "Musisz być zalogowanym, aby złożyć prośbę o pakiet." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Nieprawidłowa nazwa: tylko małe litery są dozwolone." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "Pole komentarzy nie może pozostać pustę." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." -msgstr "Nieprawidłowy rodzaj prośby." +msgstr "Nieprawidłowy rodzaj propozycji." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." -msgstr "Pomyślnie dodano prośbę." +msgstr "Pomyślnie dodano propozycję." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Nieprawidłowy powód." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." -msgstr "Tylko Zaufani Użytkownicy i programiści mogą zamykać prośby." +msgstr "Tylko Zaufani Użytkownicy i Deweloperzy mogą zamykać propozycje." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." -msgstr "Pomyślnie zamknięto prośbę." +msgstr "Pomyślnie zamknięto propozycję." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "Możesz użyć tego formularza, aby nieodwracalnie usunąć konto %s." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sUWAGA%s: Ta czynność nie może zostać cofnięta." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Potwierdź usunięcie" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Użytkownik" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Rodzaj konta" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Użytkownik" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Deweloper" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Zaufany Użytkownik i Developer" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Adres e-mail" -#: template/account_details.php -msgid "hidden" -msgstr "ukryte" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Imię i nazwisko" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Strona główna" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Nick na IRC-u" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Odcisk palca klucza PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Stan" -#: template/account_details.php msgid "Inactive since" msgstr "Nieaktywny od" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Aktywne" -#: template/account_details.php -msgid "Registration date:" -msgstr "Data rejestracji:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "nieznana" - -#: template/account_details.php msgid "Last Login" msgstr "Ostatnie logowanie" -#: template/account_details.php msgid "Never" msgstr "Nigdy" -#: template/account_details.php msgid "View this user's packages" msgstr "Wyświetl pakiety tego użytkownika" -#: template/account_details.php msgid "Edit this user's account" msgstr "Edycja tego konta użytkownika" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." -msgstr "Kliknij %stutaj%s, jeśli chcesz nieodwracalnie usunąć to konto." +msgstr "Kliknij %stutaj%s jeśli chcesz nieodwracalnie usunąć to konto." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Kliknij %stutaj%s by wyświetlić szczegóły użytkownika." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "wymagane" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Zwykły użytkownik" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Zaufany Użytkownik" + msgid "Account Suspended" msgstr "Konto zablokowane" -#: template/account_edit_form.php msgid "Inactive" msgstr "Nieaktywny" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Upewnij się, czy poprawnie wpisano adres e-mail, w przeciwnym razie zostaniesz zablokowany." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Ukryj adres e-mail" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Język" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Strefa czasowa" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Hasło (ponownie)" -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Następująca informacja jest wymagana jedynie w sytuacji, gdy chcesz przesłać pakiety do Repozytorium Użytkowników Arch." +msgid "Language" +msgstr "Język" -#: templates/partials/account_form.html msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "Klucz publiczny SSH" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Ustawienia powiadomień" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Powiadom o nowych komentarzach" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Powiadom o aktualizacjach pakietu" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Powiadom o zmianie właściciela" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" msgstr "" -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Aktualizuj" -#: template/account_edit_form.php msgid "Create" msgstr "Utwórz" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Wyczyść" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Wyszukiwanie nie przyniosło rezultatu." -#: template/account_search_results.php msgid "Edit Account" msgstr "Edytuj konto" -#: template/account_search_results.php msgid "Suspended" msgstr "Zablokowane" -#: template/account_search_results.php msgid "Edit" msgstr "Edytuj" -#: template/account_search_results.php msgid "Less" msgstr "Poprzednie" -#: template/account_search_results.php msgid "More" msgstr "Następne" -#: template/account_search_results.php msgid "No more results to display." msgstr "Brak wyników do wyświetlenia." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Użyj tego formularza, aby dodać współutrzymujących %s%s%s (jedna nazwa użytkownika na wiersz):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "Użytkownicy" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "Zapisz" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Komentarz do oznaczenia jako nieaktualny: %s" +msgid "My Packages" +msgstr "Moje pakiety" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s oznaczył %s%s%s jako nieaktualny dnia %s%s%s z następującego powodu:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s nie jest oznaczone jako nieaktualne." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Powrót do szczegółów" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Prawa autorskie %s 2004-%d Zespół Programistów aurweb." - -#: template/header.php msgid " My Account" msgstr "Moje konto" -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "Działania na pakietach" +msgid "Register" +msgstr "Zarejestruj się" -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "Pokaż PKGBUILD" +msgid "unknown" +msgstr "nieznana" -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "Zobacz zmiany" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "Pobierz migawkę" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "Przeszukaj wiki" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Oznaczono jako nieaktualny (%s)" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "Oznacz pakiet jako nieaktualny" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "Odznacz pakiet" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "Usuń głos" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "Zagłosuj na ten pakiet" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "Wyłącz powiadomienia" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Włącz powiadomienia" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "Zarządzanie współutrzymującymi" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "%d prośba w toku" -msgstr[1] "%d prośby w toku" -msgstr[2] "%d próśb w toku" -msgstr[3] "%d próśb w toku" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "Przejmij pakiet" - -#: template/pkgbase_details.php msgid "Package Base Details" msgstr "Szczegóły bazy pakietu" -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "URL klonu Git" +msgid "Package Actions" +msgstr "Działania na pakietach" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "tylko do odczytu" +msgid "View PKGBUILD" +msgstr "Pokaż PKGBUILD" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" +msgid "View Changes" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Słowa kluczowe" +msgid "Download snapshot" +msgstr "" + +msgid "Search wiki" +msgstr "Przeszukaj wiki" + +msgid "Flagged out-of-date" +msgstr "Oznaczony jako nieaktualny" + +msgid "Flag package out-of-date" +msgstr "Oznacz pakiet jako nieaktualny" + +msgid "Unflag package" +msgstr "Odznacz pakiet" + +msgid "Remove vote" +msgstr "Usuń głos" + +msgid "Vote for this package" +msgstr "Zagłosuj na ten pakiet" + +msgid "Disable notifications" +msgstr "Wyłącz powiadomienia" + +msgid "Notify of new comments" +msgstr "Powiadom o nowych komentarzach" + +msgid "Manage Co-Maintainers" +msgstr "" + +#, php-format +msgid "%d pending request" +msgid_plural "%d pending requests" +msgstr[0] "%d propozycja w toku" +msgstr[1] "%d propozycje w toku" +msgstr[2] "%d propozycji w toku" + +msgid "Delete Package" +msgstr "Usuń pakiet" + +msgid "Merge Package" +msgstr "Scal pakiet" + +msgid "Adopt Package" +msgstr "Przejmij pakiet" + +msgid "Git Clone URL" +msgstr "" + +msgid "Category" +msgstr "Kategoria" + +msgid "Change category" +msgstr "Zmień kategorię." -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Nadesłał" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Wyświetl informacje o koncie %s" + msgid "Maintainer" msgstr "Opiekun" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Ostatni pakujący" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Głosy" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularność" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" -msgstr "Umieszczony" +msgstr "Wysłany" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Ostatnia aktualizacja" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Edycja komentarza do: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Dodaj komentarz" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" +msgid "Comment has been added." +msgstr "Komentarz został dodany." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" +msgid "View all comments" +msgstr "Pokaż wszystkie komentarze" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Przypięte komentarze" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Ostatnie komentarze" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s skomentował dnia %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Anonimowy komentarz do %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "usunięte %s przez %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "usunięte %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "edytowane %s przez %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "edytowane %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Cofnij usunięcie komentarza" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Usuń komentarz" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Przypnij komentarz" +#, php-format +msgid "Comment by %s" +msgstr "Komentarz użytkownika %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Odepnij komentarz" +msgid "Anonymous comment" +msgstr "Anonimowy komentarz" + +msgid "deleted" +msgstr "usunięty" + +msgid "All comments" +msgstr "Wszystkie komentarze" -#: template/pkg_details.php msgid "Package Details" msgstr "Informacje o pakiecie" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Baza pakietu" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Opis" -#: template/pkg_details.php msgid "Upstream URL" -msgstr "URL źródła" +msgstr "URL upstreamu" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Odwiedź stronę pakietu" -#: template/pkg_details.php msgid "Licenses" msgstr "Licencje" -#: template/pkg_details.php msgid "Groups" msgstr "Grupy" -#: template/pkg_details.php msgid "Conflicts" -msgstr "Konfliktuje z" +msgstr "Konflikty" -#: template/pkg_details.php msgid "Provides" msgstr "Zapewnia" -#: template/pkg_details.php msgid "Replaces" msgstr "Zastępuje" -#: template/pkg_details.php msgid "Dependencies" msgstr "Zależności" -#: template/pkg_details.php msgid "Required by" msgstr "Wymagane przez" -#: template/pkg_details.php msgid "Sources" msgstr "Źródła" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Użyj tego formularza, aby zamknąć prośbę o bazę pakietów %s%s%s." +msgstr "" + +msgid "Note" +msgstr "" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Pole komentarza może zostać pozostawione pustym. Jednakże w przypadku odrzucenia prośby dodanie komentarza jest wysoce polecane." +msgstr "" -#: template/pkgreq_close_form.php msgid "Reason" -msgstr "Powód" +msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Zaakceptowany" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Odrzucony" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Kommentarze" + +#, php-format +msgid "File Request: %s" +msgstr "Propozycja Pliku: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Użyj tego formularza, aby złożyć prośbę przeciwko bazie pakietu %s%s%s, która zawiera następujące pakiety:" +msgstr "" +"Użyj tego formularza, aby złożyć propozycję na bazę pakietu %s%s%s i " +"następujące pakiety:" -#: template/pkgreq_form.php msgid "Request type" -msgstr "Rodzaj prośby" +msgstr "Rodzaj Propozycji" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Usunięcie" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Bez opiekuna" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Scal z" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Brak żądań spełniających podane kryteria wyszukiwania." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." -msgstr[0] "%d prośba odnaleziona." -msgstr[1] "%d prośby odnalezione." -msgstr[2] "%d próśb odnaleziono." -msgstr[3] "%d próśb odnaleziono." +msgstr[0] "%d propozycje znaleziono" +msgstr[1] "%d propozycje znaleziono." +msgstr[2] "%d propozycji znaleziono." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Strona %d z %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Pakiet" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Złożone przez" -#: template/pkgreq_results.php msgid "Date" msgstr "Data" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "pozostało ~%d dzień" -msgstr[1] "pozostało ~%d dni" -msgstr[2] "pozostało ~%d dni" -msgstr[3] "pozostało ~%d dni" +msgid "~%d days left" +msgstr "" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" -msgstr[0] "pozostała ~%d godzina" -msgstr[1] "pozostały ~%d godziny" -msgstr[2] "pozostało ~%d godzin" -msgstr[3] "pozostało ~%d godzin" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: template/pkgreq_results.php msgid "<1 hour left" -msgstr "pozostała <1 godzina" +msgstr "" -#: template/pkgreq_results.php msgid "Accept" msgstr "Akceptuj" -#: template/pkgreq_results.php msgid "Locked" -msgstr "Zablokowane" +msgstr "" -#: template/pkgreq_results.php msgid "Close" msgstr "Zamknij" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Oczekujące" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Zamknięte" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Nazwa, Opis" -#: template/pkg_search_form.php msgid "Name Only" -msgstr "Tylko nazwy" +msgstr "Tylko nazwa" -#: template/pkg_search_form.php msgid "Exact Name" -msgstr "Dokładnej nazwy" +msgstr "Dokładna nazwa" -#: template/pkg_search_form.php msgid "Exact Package Base" -msgstr "Dokładnej bazy pakietu" +msgstr "Dokładna baza pakietu" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Współopiekuna" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Opiekuna, współopiekuna" - -#: template/pkg_search_form.php msgid "All" -msgstr "Wszystko" +msgstr "Wszystkie" -#: template/pkg_search_form.php msgid "Flagged" -msgstr "Oznaczone" +msgstr "Oznaczony" -#: template/pkg_search_form.php msgid "Not Flagged" -msgstr "Nieoznaczone" +msgstr "Nieoznaczony" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" -msgstr "Nazwy" +msgstr "Nazwa" + +msgid "Popularity" +msgstr "" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php msgid "Voted" -msgstr "Liczby głosów" +msgstr "Głos" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Ostatniej modyfikacji" +msgid "Age" +msgstr "Wiek" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Rosnąco" -#: template/pkg_search_form.php msgid "Descending" msgstr "Malejąco" -#: template/pkg_search_form.php msgid "Enter search criteria" -msgstr "Wprowadź kryteria wyszukiwania" +msgstr "Podaj kryteria wyszukiwania" + +msgid "Any" +msgstr "Dowolna" -#: template/pkg_search_form.php msgid "Search by" msgstr "Szukaj według" -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "Nieaktualne" +msgid "Keywords" +msgstr "Słowa kluczowe" + +msgid "Out of Date" +msgstr "Nieaktualny" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Sortuj według" -#: template/pkg_search_form.php msgid "Sort order" -msgstr "Porządek sortowania" +msgstr "Porządek" -#: template/pkg_search_form.php msgid "Per page" -msgstr "Elementów na stronę" +msgstr "Na stronie" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" -msgstr "Szukaj" +msgstr "Wykonaj" -#: template/pkg_search_form.php msgid "Orphans" -msgstr "Osierocone pakiety" +msgstr "Bez opiekuna" -#: template/pkg_search_results.php msgid "Error retrieving package list." -msgstr "Wystąpił błąd podczas otrzymywania listy pakietów." +msgstr "Błąd podczas pobierania listy pakietów." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." -msgstr "Nie znaleziono pakietów spełniających kryteria wyszukiwania." +msgstr "Żaden pakiet nie spełnia podanych kryteriów." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "%d pakiet znaleziono" msgstr[1] "%d pakiety znaleziono" msgstr[2] "%d pakietów znaleziono" -msgstr[3] "%d pakietów znaleziono" -#: template/pkg_search_results.php msgid "Version" msgstr "Wersja" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Tak" -#: template/pkg_search_results.php msgid "orphan" -msgstr "pakiet osierocony" +msgstr "bez opiekuna" -#: template/pkg_search_results.php msgid "Actions" msgstr "Działania" -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "Odznacz jako nieaktualny" +msgid "Flag Out-of-date" +msgstr "Oznacz jako nieaktualny" + +msgid "Unflag Out-of-date" +msgstr "Usuń flagę nieaktualności" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Przejmij pakiety" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Porzuć pakiety" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Usuń pakiety" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Potwierdź" -#: template/search_accounts_form.php msgid "Any type" -msgstr "Dowolnego typu" +msgstr "Dowolny rodzaj" -#: template/search_accounts_form.php msgid "Search" msgstr "Szukaj" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Statystyki" -#: template/stats/general_stats_table.php msgid "Orphan Packages" -msgstr "Osierocone pakiety" +msgstr "Osierocone" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" -msgstr "Pakiety dodane w ciągu ostatniego tygodnia" +msgstr "Dodane przez ostatnie 7 dni" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" -msgstr "Pakiety zaktualizowane w ciągu ostatniego tygodnia" +msgstr "Zaktualizowane przez ostatnie 7 dni" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" -msgstr "Pakiety zaktualizowane w ostatnim roku" +msgstr "Zaktualizowane przez ostatni rok" -#: template/stats/general_stats_table.php msgid "Packages never updated" -msgstr "Pakiety nigdy nie aktualizowane" +msgstr "Nigdy nieaktualizowane" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Zarejestrowani użytkownicy" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Zaufani Użytkownicy" -#: template/stats/updates_table.php msgid "Recent Updates" -msgstr "Ostatnio aktualizowane" +msgstr "Ostatnie aktualizacje" -#: template/stats/updates_table.php -msgid "more" -msgstr "więcej" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Moje statystyki" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Pakietów w unsupported" + msgid "Proposal Details" msgstr "Szczegóły propozycji" -#: template/tu_details.php msgid "This vote is still running." msgstr "Głosowanie ciągle trwa." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Wysłane: %s przez %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Koniec" -#: template/tu_details.php msgid "Result" msgstr "Wynik" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Nie" -#: template/tu_details.php msgid "Abstain" msgstr "Wstrzymaj się od głosu" -#: template/tu_details.php msgid "Total" msgstr "Suma" -#: template/tu_details.php msgid "Participation" msgstr "Uczestnictwo" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Ostatnie głosy ZU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Ostatni głos" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Brak wyników." -#: template/tu_list.php msgid "Start" msgstr "Początek" -#: template/tu_list.php msgid "Back" msgstr "Wstecz" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "Reset hasła AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Witamy w AUR: Repozytorium Użytkowników Arch" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "Komentarze AUR do {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "Aktualizacja pakietu AUR: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "Powiadomienie AUR o nieaktualnym pakiecie {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "Usunięty pakiet AUR: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/pt.po b/po/pt.po deleted file mode 100644 index 33e01d7d..00000000 --- a/po/pt.po +++ /dev/null @@ -1,2380 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -# Lukas Fleischer , 2011 -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Lukas Fleischer , 2011\n" -"Language-Team: Portuguese (http://app.transifex.com/lfleischer/aurweb/language/pt/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" -"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "Contas" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "Você não está autorizado a acessar esta área." - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "Não foi possível recuperar as informações do usuário especificado." - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "Você não tem permissão para editar este conta." - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "Use este formulário para pesquisar as contas existentes." - -#: html/account.php -msgid "You must log in to view user information." -msgstr "Você precisa efetuar o login para visualizar as informações do usuário." - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "Tipo" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "Enviar" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "Inicial" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "Meus Pacotes" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "Lembre-se de votar nos seus pacotes favoritos!" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "Discussão" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "Votar" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "Notificar" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "Retirar Notificação" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "Login" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "Logado como: %s" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "Sair" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "Senha" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "Critério de Pesquisa" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "Pacotes" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "Erro ao tentar retornar os detalhes do pacote." - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "Um campo requerido não foi informado." - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "As senhas informadas não conferem." - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "Use este formulário para criar uma conta." - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "ID de usuário não encontrada" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "O endereço de email é inválido." - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "Idioma atualmente não suportado." - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Comentário foi adicionado." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Você deve ter efetuado o login antes de poder editar as informações do pacote." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "ID de comentário não encontrada." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "Erro ao retornar os detalhes do pacote." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "Detalhes do Pacote não foram encontrados." - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "Você deve efetuar o login antes de poder marcar pacotes." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "Você não selecionou nenhum pacote para marcar." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "Os pacotes selecionados foram marcados como desatualizados." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "Você deve efetuar o login antes de poder desmarcar pacotes." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "Você não selecionou nenhum pacote para desmarcar." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "Os pacotes selecionados tiveram seus marcadores retirados." - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "Você não selecionou nenhum pacote para excluir." - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "Os pacotes selecionados foram excluídos." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "Você deve efetuar o login antes de poder adotar pacotes." - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "Você deve efetuar o login antes de poder abandonar pacotes" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "Você não selecionou nenhum pacote para adotar." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "Você não selecionou nenhum pacote para abandonar." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "Os pacotes selecionados foram adotados." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "Os pacotes selecionados foram abandonados." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "Você deve efetuar o login antes de poder votar nos pacotes." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "Você deve efetuar o login antes de poder retirar seu voto de um pacote." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "Você não selecionou nenhum pacote para votar." - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "Seus votos foram removidos dos pacotes selecionados." - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "Os pacotes selecionados foram votados." - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "Não foi possível adicionar para a lista de notificação." - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Você não está autorizado a apagar este comentário." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "Comentário foi excluído." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "Nome inválido: somente letras minúsculas são permitidas." - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Nome de Usuário" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "Tipo da Conta" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "Usuário" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "Desenvolvedor" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "Endereço de Email" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "Nome Real" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "Nick de IRC" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "Status" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "Ativo" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "Desconhecida" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "Nunca" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "Visualizar os pacotes deste usuário" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "requerido" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "Usuário Normal" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "Conta Suspensa" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Idioma" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "Confirme a senha" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "Atualizar" - -#: template/account_edit_form.php -msgid "Create" -msgstr "Criar" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "Resetar" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "Seu critério de pesquisa não retornou nenhum resultado." - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "Editar Conta" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "Suspenso" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "Menor" - -#: template/account_search_results.php -msgid "More" -msgstr "Mais" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "Sem mais resultados para exibir." - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "Colaborador" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "Mantenedor" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "Votos" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "Submetido pela primeira vez" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "Últimos Pacotes Atualizados" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "Excluir Comentário" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "Detalhes do Pacote" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "Descrição" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "Dependências" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "Fontes" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "Todos" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "Nome" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "Votado" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "Ascendente" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "Decrescente" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "Pesquisar por" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "Ordenar por" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "Ordem" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "Por página" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "Ir" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "Orfãos" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "Erro ao retornar a lista de pacotes." - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "Seu critério de pesquisa não retornou nenhum pacote." - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "Sim" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "orfão" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "Ações" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "Retirar marcador de Desatualizado" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "Adotar Pacotes" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "Abandonar Pacotes" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "Excluir Pacote" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "Qualquer tipo" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "Pesquisa'" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "Estatísticas" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "Usuários Registrados" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "Atualizações Recentes" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "Minhas Estatísticas" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "Não" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index c689a8ab..3198fc24 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -1,2386 +1,1359 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: # Albino Biasutti Neto Bino , 2011 -# Fábio Nogueira , 2016 -# Rafael Fontenelle , 2012-2015 -# Rafael Fontenelle , 2011,2015-2018,2020-2023 -# Rafael Fontenelle , 2011 -# Sandro , 2011 +# Rafael Ferreira , 2012-2015 +# Rafael Ferreira , 2011 # Sandro , 2011 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Rafael Fontenelle , 2011,2015-2018,2020-2023\n" -"Language-Team: Portuguese (Brazil) (http://app.transifex.com/lfleischer/aurweb/language/pt_BR/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/aur/" +"language/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Página não encontrada" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Desculpe, a página que você solicitou não existe." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Nota" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "URLs de git-clone não servem para ser abertas em um navegador." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Para clonar o repositório Git de %s, execute %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Clique %saqui%s para retornar para a página de detalhes de %s." - -#: html/503.php msgid "Service Unavailable" -msgstr "Serviço indisponível" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Sem pânico! Este site está indisponível para manutenção. Voltaremos às atividades em breve." +msgstr "" -#: html/account.php msgid "Account" msgstr "Conta" -#: html/account.php template/header.php msgid "Accounts" msgstr "Contas" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Você não tem permissão para acessar esta área." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Não foi possível obter informações para o usuário especificado." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Você não tem permissão para editar esta conta." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Senha inválida." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Utilize este formulário para procurar contas existentes." -#: html/account.php msgid "You must log in to view user information." -msgstr "Você precisa se conectar para ver as informações de usuários." +msgstr "Você precisa fazer login para ver as informações do usuário." + +msgid "Use this form to create an account." +msgstr "Utilize este formulário para criar uma conta." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "Adicionar proposta" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Token inválido para a ação de usuário." -#: html/addvote.php msgid "Username does not exist." -msgstr "Nome de usuário não existe." +msgstr "Usuário não existe." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s já tem uma proposta aberta para eles." -#: html/addvote.php msgid "Invalid type." msgstr "Tipo inválido." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Proposta não pode ser vazia." -#: html/addvote.php msgid "New proposal submitted." msgstr "Nova proposta foi enviada." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Enviar uma proposta para ser votada." -#: html/addvote.php msgid "Applicant/TU" msgstr "Requerente/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(vazio se não aplicável)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Tipo" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "Adição de Mantenedor de Pacote" +msgid "Addition of a TU" +msgstr "Adição de um TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "Remoção de um Mantenedor de Pacote" +msgid "Removal of a TU" +msgstr "Remoção de um TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "Remoção de um Mantenedor de Pacote (inatividade não declarada)" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Remoção de um TU (inatividade não declarada)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Emenda ao Estatuto" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Proposta" -#: html/addvote.php msgid "Submit" msgstr "Enviar" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Gerenciar comantenedores" +msgstr "Gerenciar co-mantenedores" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Editar comentário" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Painel de controle" - -#: html/home.php template/header.php msgid "Home" msgstr "Início" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Meus pacotes sinalizados" - -#: html/home.php -msgid "My Requests" -msgstr "Minhas requisições" - -#: html/home.php -msgid "My Packages" -msgstr "Meus pacotes" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Pesquisar por pacotes que eu mantenho" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Pacote comantidos" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Pesquisar por pacotes que eu comantenho" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "Bem-vindo ao AUR! Por favor, leia as %sDiretrizes do Usuário do AUR%s para obter mais informações e as %sDiretrizes de Envio para o AUR%s se você quiser contribuir com um PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." +msgstr "" +"Bem-vindo ao AUR! Por favor, leia as %sDiretrizes de Usuário do AUR%s e " +"%sDiretrizes de TU do AUR%s para mais informações." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "PKGBUILDs contribuídos %sdevem%s estar em conformidade com os %sPadrões de Empacotamento do Arch%s, do contrário eles serão excluídos!" +msgstr "" +"PKGBUILDs contribuídos %sdevem%s estar em conformidade com os %sPadrões de " +"Empacotamento do Arch%s, do contrário eles serão excluídos!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Lembre-se de votar nos seus pacotes favoritos!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Alguns pacotes podem ser fornecidos como binários no repositório [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"Alguns pacotes podem ser fornecidos como binários no repositório [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "AVISO LEGAL" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Os pacotes do AUR são conteúdos produzidos por usuários. Qualquer uso dos arquivos fornecidos é de sua própria conta e risco." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Pacotes sem suporte são pacotes produzidos pelos usuários. Qualquer uso dos " +"arquivos fornecidos é de sua própria conta e risco." -#: html/home.php -msgid "Learn more..." -msgstr "Saiba mais..." - -#: html/home.php msgid "Support" -msgstr "Suporte" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Requisições de pacote" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Há três tipos de requisições que podem ser realizadas na caixa %sAções do pacote%s na página de detalhes do pacote:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Requisição para tornar o pacote órfão" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Requisite que um pacote seja desvinculado de seu mantenedor, de forma que o pacote fique órfão, quando, por exemplo, o mantenedor está inativo e o pacote foi marcado como desatualizado há muito tempo." +msgstr "" -#: html/home.php msgid "Deletion Request" -msgstr "Requisição de exclusão" +msgstr "" -#: html/home.php msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "Requisite que um pacote seja removido do Arch User Repository. Por favor, não use esta opção se um pacote está quebrado, mas que pode ser corrigido facilmente. Ao invés disso, contate o mantenedor e, se necessário, preencha uma requisição para tornar o pacote órfão." +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" -#: html/home.php msgid "Merge Request" -msgstr "Requisição de mesclagem" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Requisite que um pacote seja mesclado com outro. Pode ser usado quando um pacote precisa ser renomeado ou substituído por um pacote dividido." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Se você quiser discutir uma requisição, você pode usar a lista de discussão %saur-request%s. Porém, por favor, não use essa lista para fazer requisições." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Enviando pacotes" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Git sobre SSH agora é usado para enviar pacotes para o AUR. Veja a seção %sEnviando pacotes%s da página wiki do Arch User Repository para mais detalhes." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "As seguintes impressões digitais SSH são usadas para o AUR:" - -#: html/home.php msgid "Discussion" msgstr "Discussão" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "Discussões gerais no que se refere à estrutura do Arch User Repository (AUR) e de Mantenedores de Pacote acontecem no %saur-general%s. Para discussão relacionada ao desenvolvimento da interface web do AUR, use a lista de discussão do %saur-dev%s" +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." +msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Relatório de erros" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "Se você encontrar um erro na interface web do AUR, preencha um relatório de erro no nosso %srastreador de erros%s. Use o rastreador para relatar erros encontrados na interface web do AUR, %ssomente%s. Para relatar erros de empacotamento, contate o mantenedor ou deixe um comentário na página de pacote apropriada." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." +msgstr "" -#: html/home.php msgid "Package Search" msgstr "Pesquisar pacote" -#: html/index.php msgid "Adopt" msgstr "Adotar" -#: html/index.php msgid "Vote" msgstr "Votar" -#: html/index.php msgid "UnVote" msgstr "Desfazer voto" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Notificar" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Não notificar" -#: html/index.php +msgid "Flag" +msgstr "Marcar" + msgid "UnFlag" msgstr "Desmarcar" -#: html/login.php template/header.php msgid "Login" msgstr "Login" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" -msgstr "Logado como: %s" +msgstr "Conectado como: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Sair" -#: html/login.php msgid "Enter login credentials" -msgstr "Digite as credenciais para se logar" +msgstr "Digite as credenciais de login" -#: html/login.php -msgid "User name or primary email address" -msgstr "Nome de usuário ou endereço de e-mail primário" +msgid "Username" +msgstr "Usuário" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Senha" -#: html/login.php msgid "Remember me" msgstr "Lembrar de mim" -#: html/login.php msgid "Forgot Password" msgstr "Esqueci minha senha" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Acesso por HTTP está desabilitado. %sAcesse via HTTPs%s caso queira se conectar." +msgstr "" +"Login via HTTP está desabilitado. Favor %sacesse via HTTPs%s caso queira " +"fazer login." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Critérios de pesquisa" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Pacotes" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Erro ao tentar obter detalhes do pacote." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Preencha todos os campos obrigatórios." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Campos de senha não correspondem." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Sua senha deve conter pelo menos %s caracteres." -#: html/passreset.php msgid "Invalid e-mail." msgstr "E-mail inválido." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" +"Um pedido de redefinição de senha foi solicitado para a conta %s associada " +"com seu endereço de e-mail. Se deseja redefinir sua senha acesse o link " +"abaixo, do contrário ignore essa mensagem e nada vai acontecer." + msgid "Password Reset" msgstr "Redefinição de senha" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." -msgstr "Confira seu e-mail pelo link de confirmação." +msgstr "Verifique no seu e-mail pelo link de confirmação." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Sua senha foi redefinida com sucesso." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Confirme seu nome de usuário ou endereço de e-mail primário:" +msgid "Confirm your e-mail address:" +msgstr "Confirme seu endereço de e-mail:" -#: html/passreset.php msgid "Enter your new password:" -msgstr "Digite a sua nova senha:" +msgstr "Informe com sua senha:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Confirme sua nova senha:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Continuar" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Se você esqueceu o nome de usuário e o endereço de e-mail primário que você usou para se registrar, envie uma mensagem para a lista de discussão %saur-general%s." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Se você esqueceu o endereço de e-mail que você usou para registrar, por " +"favor envie uma mensagem para a lista de e-mail do %saur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Digite seu nome de usuário ou seu endereço de e-mail primário:" +msgid "Enter your e-mail address:" +msgstr "Digite o seu endereço de e-mail:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Pacotes base" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Os pacotes selecionados não foram abandonados, marque a caixa de confirmação." +msgstr "" +"Os pacotes selecionados não foram abandonados, marque a caixa de confirmação." -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "Os pacotes selecionados não foram adotados, marque a caixa de confirmação." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Não foi possível encontrar pacote para mesclar votos e comentários nele." +msgstr "" +"Não foi possível encontrar pacote para nele fundir votos e comentários." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Não é possível mesclar um pacote base com ele mesmo" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Os pacotes selecionados não foram excluídos, marque a caixa de confirmação." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Os pacotes selecionados não foram apagados, marque a caixa de confirmação." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Exclusão de pacotes" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Excluir pacote" +#, php-format +msgid "Delete Package: %s" +msgstr "Excluir pacote: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Use este formulário para excluir o pacote base %s%s%s e os seguintes pacotes do AUR: " +msgstr "" +"Use este formulário para excluir o pacote base %s%s%s e os seguintes pacotes " +"do AUR: " -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "A exclusão de pacote um pacote é permanente." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Marque a caixa de seleção para confirmar a ação." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Confirmar exclusão de pacote" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Excluir" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "Apenas Mantenedores de Pacote e Desenvolvedores podem excluir pacotes." +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Somente Trusted Users e Desenvolvedores podem excluir pacotes." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Abandonar pacote" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "Abandonar pacote: %s" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Use este formulário para abandonar o pacote base %s%s%s que inclui os seguintes pacotes:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" +"Use esse formulário para abandonar o pacote base %s%s%s que incluem os " +"seguintes pacotes:" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "Ao marcar a caixa de seleção, você confirma que deseja deixar de ser um comantenedor de pacote." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Ao marcar a caixa de seleção, você confirma que deseja abandonar o pacote e transferir a responsabilidade para %s%s%s." +msgstr "" +"Ao marcar a caixa de seleção, você confirma que deseja abandonar o pacote e " +"transferir a responsabilidade para %s%s%s." -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Ao marcar a caixa de seleção, você confirma que deseja abandonar o pacote." +msgstr "" +"Ao marcar a caixa de seleção, você confirma que deseja abandonar o pacote." -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "Confirme para abandonar o pacote" -#: html/pkgdisown.php msgid "Disown" msgstr "Abandonar" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "Apenas Mantenedores de Pacote e Desenvolvedores podem tornar órfãos pacotes." +msgid "Only Trusted Users and Developers can disown packages." +msgstr "Apenas Trusted Users e Desenvolvedores podem abandonar pacotes." -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Comentário da marcação" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Marcar pacote desatualizado" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "Este parece ser um pacote VCS. %sNão%s marque como desatualizado se a versão do pacote no AUR não corresponder ao commit mais recente. A marcação deste pacote só deve ser feita se as fontes forem movidas ou mudanças no PKGBUILD forem necessárias devido a mudanças recentes no upstream." - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Use este formulário para marcar o pacote base %s%s%s e os seguintes pacotes como desatualizados: " - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Por favor, %snão%s use este formulário para relatar erros. Para isto, use os comentários do pacote." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Insira detalhes sobre o motivo do pacote estar desatualizado abaixo, preferivelmente incluindo links para o anúncio de lançamento ou um novo tarball de lançamento." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Comentários" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Marcar" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Apenas usuários registrados podem marcar pacotes como desatualizados." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Mesclagem de pacotes" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Mesclar pacote" +#, php-format +msgid "Merge Package: %s" +msgstr "Mesclar pacote: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Use este formulário para mesclar o pacote base %s%s%s em outro pacote. " +msgstr "" +"Use este formulário para mesclar o pacote base %s%s%s em outro pacote. " -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Os seguintes pacotes serão excluídos: " -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " -msgstr "Assim que o pacote tiver sido mesclado, não é possível reverter a ação." +msgstr "" +"Assim que o pacote tiver sido mesclado, não é possível reverter a ação." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Digite o nome do pacote para o qual você deseja mesclar o pacote." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Mesclar em:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Confirmar a mesclagem de pacotes" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Mesclar" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "Apenas Mantenedores de Pacote e Desenvolvedores podem mesclar pacotes." +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Somente Trusted Users e Desenvolvedores podem mesclar pacotes." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Enviar requisição" +msgid "File Request" +msgstr "Fazer requisição" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Fechar requisição" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Primeiro" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Anterior" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Próxima" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Última" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Requisições" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registrar" +msgid "Trusted User" +msgstr "Trusted User" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Utilize este formulário para criar uma conta." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Termos de Serviço" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Os seguintes documentos foram atualizados. Por favor, revise-os cuidadosamente:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "revisão %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Eu aceito os termos e condições acima." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "Mantenedor de Pacote" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Não foi possível adquirir detalhes da proposta." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "A votação está encerrada para esta proposta." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "Apenas Mantenedores de Pacote podem votar." +msgid "Only Trusted Users are allowed to vote." +msgstr "Apenas Trusted Users têm permissão para votar." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Você não pode votar em uma proposta sobre você." -#: html/tu.php msgid "You've already voted for this proposal." -msgstr "Você já votou nesta proposta." +msgstr "Você já votou nessa proposta." -#: html/tu.php msgid "Vote ID not valid." msgstr "ID de voto inválido." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Votos atuais" -#: html/tu.php msgid "Past Votes" msgstr "Votos anteriores" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Eleitores" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "O registro de conta foi desabilitado para seu endereço IP, provavelmente por causa de ataques continuados de spam. Desculpe a inconveniência." +msgstr "" +"O registro de conta foi desabilitado para seu endereço IP, provavelmente por " +"causa de ataques continuados de spam. Desculpe a inconveniência." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Faltando ID de usuário" -#: lib/acctfuncs.inc.php msgid "The username is invalid." -msgstr "O nome de usuário é inválido." +msgstr "O usuário é inválido." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Deve conter entre %s e %s caracteres" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Começo e fim com uma letra ou um número" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." -msgstr "Pode conter somente um ponto, sublinhado ou hífen." +msgstr "Pode conter somente um ponto, traço inferior ou hífen." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Por favor, confirme sua nova senha." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "O endereço de e-mail é inválido." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "O endereço de e-mail reserva é inválido" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "A página inicial é inválida. Por favor, especificar a URL HTTP(s) completa." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "A impressão digital da chave PGP é inválida." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "A chave pública de SSH é inválida." -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Não foi possível aumentar as permissões da conta." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Idioma sem suporte no momento." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Fuso horário sem suporte no momento." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "O nome de usuário, %s%s%s, já está sendo usado." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "O endereço, %s%s%s, já está sendo usado." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "A chave pública de SSH, %s%s%s, já está sendo usada." +msgstr "A chave pública de SSH, %s%s%s, já está em uso." -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "O CAPTCHA está faltando." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "Este CAPTCHA expirou. Por favor, tente novamente." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "A resposta de CAPTCHA inserida é inválida." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Erro ao tentar criar uma conta, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." -msgstr "A conta %s%s%s foi criada com sucesso." +msgstr "A conta, %s%s%s, foi criada com sucesso." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Uma chave de redefinição de senha foi enviada para seu endereço de e-mail." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." -msgstr "Clique no link de Conectar acima para usar a sua conta." +msgstr "Clique no link de Login acima para usar a sua conta." + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Bem-vindo ao %s! Para definir uma senha inicial para sua nova conta, por " +"favor clique no link abaixo. Se o link não funciona, tente copiar e colá-lo " +"no seu navegador." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" +"Uma chave de redefinição de senha foi enviada para seu endereço de e-mail." -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Nenhuma alteração foi feita na conta, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "A conta, %s%s%s, foi modificada com sucesso." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "O formulário para se conectar está desabilitado momento para seu endereço IP, provavelmente por causa de ataques continuados de spam. Desculpe a inconveniência." +msgstr "" +"O formulário de login está desabilitado momento para seu endereço IP, " +"provavelmente por causa de ataques continuados de spam. Desculpe a " +"inconveniência." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Conta suspensa" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "Você não tem permissão para suspender contas." - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Sua senha foi redefinida. Se você acabou de criar uma conta, por favor, use o link do e-mail de confirmação para definir uma senha inicial. Do contrário, requisite uma chave de senha na página de %sRedefinição de senha%s." +msgstr "" +"Sua senha foi redefinida. Se você acabou de criar uma conta, por favor use o " +"link do e-mail de confirmação para definir uma senha inicial. Do contrário, " +"por favor requisite uma chave de senha na página de %sRedefinição de senha%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." -msgstr "Nome de usuário ou senha inválida." +msgstr "Usuário ou senha inválida." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Ocorreu um erro ao tentar gerar uma sessão de usuário." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." -msgstr "Combinação entre e-mail e chave de redefinição é inválida" +msgstr "Combinação entre email e chave de redefinição é inválida" -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Nenhum" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Ver informações da conta para %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Faltando ID ou nome do pacote base." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Você não tem permissão para editar este comentário." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "O comentário não existe." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "O comentário não pode estar vazio." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "O comentário foi adicionado." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Você deve estar conectado para poder editar informações do pacote." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Faltando ID de comentário." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Não mais que 5 comentários podem ser afixados." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Você não tem permissão para afixar este comentário." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Você não tem permissão para desafixar este comentário." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "O comentário foi afixado." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "O comentário foi desafixado." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Erro ao obter detalhes do pacote." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Não foi possível encontrar os detalhes do pacote." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "Cabeçalho de referenciador incorreto." - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "Você não selecionou nenhum pacote sobre o qual deva ser notificado." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "As notificações dos pacotes selecionados foram habilitadas." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "Você não selecionou nenhum pacote para remoção de notificação." - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "Um pacote que você selecionou não está com notificações habilitadas." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "As notificações dos pacotes selecionados foram removidas." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Você deve estar conectado para marcar os pacotes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." -msgstr "Você selecionou nenhum pacote para marcar." +msgstr "Você não selecionou nenhum pacote para marcar." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Os pacotes selecionados não foram marcados como desatualizados. Por favor, insira um comentário." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "O pacote selecionado foi marcado como desatualizado." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Você deve estar conectado para desmarcar os pacotes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." -msgstr "Você selecionou nenhum pacote para desmarcar." +msgstr "Você não selecionou nenhum pacote para desmarcar." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "O pacote selecionado foi desmarcado." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Você não tem permissão para excluir pacotes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Você selecionou nenhum pacote para excluir." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "Um dos pacotes que você selecionou não existe." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Os pacotes selecionados foram excluídos." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Você deve estar conectado para adotar pacotes." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "Você não tem permissão para adotar um dos pacotes selecionados." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Você deve estar conectado para abandonar pacotes." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "Você não tem permissão para abandonar um dos pacotes selecionados." - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." -msgstr "Você selecionou nenhum pacote para adotar." +msgstr "Você não selecionou pacote para adotar." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Você não selecionou pacote para abandonar." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Os pacotes selecionados foram adotados." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Os pacotes selecionados foram abandonados." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Você deve estar conectado para votar nos pacotes." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Você deve estar conectado para desfazer o voto dos pacotes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Você não selecionou nenhum pacote para votar." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Seus votos foram removidos dos pacotes selecionados." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Seus votos foram enviados para os pacotes selecionados." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Não foi possível adicionar à lista de notificação." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Você foi adicionado à lista de notificação de comentários de %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Você foi removido da lista de notificação de comentários de %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Você não tem permissão para desfazer a exclusão deste comentário." +msgid "You must be logged in before you can edit package information." +msgstr "Você tem que estar conectado para poder editar informações do pacote." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "O comentário teve sua exclusão desfeita." +msgid "Missing comment ID." +msgstr "Faltando ID de comentário." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Você não tem permissão para excluir esse comentário." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "O comentário foi excluído." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "O comentário foi editado." +msgid "You are not allowed to delete this comment." +msgstr "Você não tem permissão para excluir esse comentário." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Você não tem permissão para editar as palavras-chaves deste pacote base." +msgid "Missing category ID." +msgstr "Faltando ID de categoria." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "As palavras-chave do pacote base foram atualizadas." +msgid "Invalid category ID." +msgstr "ID de categoria inválido." + +msgid "You are not allowed to change this package category." +msgstr "Você não tem permissão para alterar a categoria desse pacote." + +msgid "Package category changed." +msgstr "Categoria do pacote alterada." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Você não tem permissão para gerenciar comantenedores deste pacote base." +msgstr "" +"Você não tem permissão para gerenciar co-mantenedores deste pacote base." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "Nome de usuário inválido: %s" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "Os comantenedores do pacote base foram atualizados." +msgstr "Os co-mantenedores do pacote base foram atualizados." -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Ver detalhes de pacotes para" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "requer %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "Você deve estar conectado para preencher requisições de pacotes." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Nome inválido: apenas letras minúsculas são permitidas." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "O campo de comentário não pode estar vazio" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." -msgstr "Tipo de requisição inválida." +msgstr "Tipo de requisição inválida" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." -msgstr "Requisição adicionada com sucesso." +msgstr "Requisição adicionada com sucesso" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." -msgstr "Motivo inválido." +msgstr "Motivo inválido" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." -msgstr "Apenas TUs e desenvolvedores podem fechar requisições." +msgstr "Apenas TUs e desenvolvedores podem fechar requisições" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." -msgstr "Requisição fechada com sucesso." +msgstr "Requisição fechada com sucesso" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Você pode usar este formulário para excluir permanentemente a conta %s do AUR." +msgstr "" +"Você pode usar esse formulário para excluir permanentemente a conta %s do " +"AUR." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." -msgstr "%sAVISO%s: Esta ação não pode ser desfeita." +msgstr "%sAVISO%s: Essa ação não pode ser desfeita." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Confirmar exclusão" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Nome de usuário" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Tipo de conta" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Usuário" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Desenvolvedor" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "Mantenedor de Pacote & Desenvolvedor" +msgid "Trusted User & Developer" +msgstr "Trusted User & Desenvolvedor" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Endereço de e-mail" -#: template/account_details.php -msgid "hidden" -msgstr "oculto" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Nome real" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Página inicial" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Apelido no IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Impressão digital de chave PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Status" -#: template/account_details.php msgid "Inactive since" msgstr "Inativo desde" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Ativa" -#: template/account_details.php -msgid "Registration date:" -msgstr "Data de registro:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "desconhecido" - -#: template/account_details.php msgid "Last Login" -msgstr "Último acesso" +msgstr "Último login" -#: template/account_details.php msgid "Never" msgstr "Nunca" -#: template/account_details.php msgid "View this user's packages" msgstr "Visualizar pacotes deste usuário" -#: template/account_details.php msgid "Edit this user's account" -msgstr "Edite a conta deste usuário" +msgstr "Edite a conta desse usuário" -#: template/account_details.php -msgid "List this user's comments" -msgstr "Listar os comentários deste usuário" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Clique %saqui%s se você deseja excluir permanentemente esta conta." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Clique %saqui%s para os detalhes do usuário." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Clique %saqui%s para listar os comentários feitos por esta conta." - -#: template/account_edit_form.php msgid "required" msgstr "obrigatório" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Seu nome de usuário é o nome que você vai usar para se autenticar. É visível para o público geral, mesmo se sua conta estiver inativa." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Usuário normal" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Trusted user" + msgid "Account Suspended" msgstr "Conta suspensa" -#: template/account_edit_form.php msgid "Inactive" msgstr "Inativo" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Por favor, certifique-se de que você informou seu endereço de e-mail, do contrário você perderá acesso." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Ocultar endereço de e-mail" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "Se você não ocultar seu endereço de e-mail, ele ficará visível para todos os usuários registrados do AUR. Se você ocultar seu endereço de e-mail, ele estará visível apenas para membros da equipe do Arch Linux." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Endereço de e-mail reserva" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "Opcionalmente, forneça um endereço de e-mail secundário que possa ser usado para restaurar sua conta, caso você perca o acesso ao seu endereço de e-mail primário." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "Os links de redefinição de senha são sempre enviados ao seu endereço de e-mail primário e reserva." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "Seu endereço de e-mail reserva sempre é visível apenas para membros da equipe do Arch Linux, independentemente da configuração %s." - -#: template/account_edit_form.php -msgid "Language" -msgstr "Idioma" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Fuso horário" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Se você deseja alterar a senha, insira uma nova senha e confirme a nova senha digitando-a novamente." - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Re-digite a senha" -#: template/account_edit_form.php +msgid "Language" +msgstr "Idioma" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "A informação a seguir é necessária apenas se você deseja enviar pacotes para o Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." +msgstr "" +"A informação a seguir é necessária apenas se você deseja enviar pacotes para " +"o Repositório de Usuário do Arch." -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "Especifique várias chaves SSH separadas por nova linha, linhas vazias são ignoradas." - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "Ocultar comentários excluídos" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "Chave pública SSH" +msgstr "Chave pública de SSH" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Configurações de notificação" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Notificar sobre novos comentários" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Notificar sobre atualizações de pacotes" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Notificar sobre mudanças de mantenedor" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "Para confirmar as alterações no perfil, digite sua senha atual:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "Sua senha atual" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "Para proteger o AUR contra a criação automatizada de contas, solicitamos que você forneça o resultado do seguinte comando:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Resposta" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Atualizar" -#: template/account_edit_form.php msgid "Create" msgstr "Criar" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Limpar" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Nenhum resultado correspondeu aos seus critérios de pesquisa." -#: template/account_search_results.php msgid "Edit Account" msgstr "Editar conta" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspensa" -#: template/account_search_results.php msgid "Edit" msgstr "Editar" -#: template/account_search_results.php msgid "Less" msgstr "Menos" -#: template/account_search_results.php msgid "More" msgstr "Mais" -#: template/account_search_results.php msgid "No more results to display." msgstr "Não há mais resultados para serem exibidos." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "Gerenciar co-mantenedores: %s" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Use este formulário para adicionar comantenedores para %s%s%s (um nome de usuário por linha):" +msgstr "" +"Use este formulário para adicionar co-mantenedores para %s%s%s (um nome de " +"usuário por linha):" -#: template/comaintainers_form.php msgid "Users" msgstr "Usuários" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "Salvar" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Comentário sobre marcação como desatualizado: %s" +msgid "My Packages" +msgstr "Meus pacotes" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s marcou %s%s%s como desatualizado em %s%s%s pelo seguinte motivo:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s não está marcado como desatualizado." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Retornar para Detalhes" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d Equipe de Desenvolvimento do aurweb." - -#: template/header.php msgid " My Account" msgstr " Minha conta" -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "Ações do pacote" +msgid "Register" +msgstr "Registrar" -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "Visualizar PKGBUILD" +msgid "unknown" +msgstr "desconhecido" -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "Ver alterações" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "Baixar snapshot" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "Pesquisar no wiki" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Marcado como desatualizado (%s)" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "Marcar como desatualizado" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "Desmarcar desatualização" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "Remover voto" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "Votar neste pacote" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "Desabilitar notificações" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Habilitar notificações" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "Gerenciar comantenedores" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "%d requisição pendente" -msgstr[1] "%d requisições pendentes" -msgstr[2] "%d requisições pendentes" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "Adotar pacote" - -#: template/pkgbase_details.php msgid "Package Base Details" msgstr "Detalhes do pacote base" -#: template/pkgbase_details.php template/pkg_details.php +msgid "Package Actions" +msgstr "Ações do pacote" + +msgid "View PKGBUILD" +msgstr "Visualizar PKGBUILD" + +msgid "View Changes" +msgstr "Ver alterações" + +msgid "Download snapshot" +msgstr "Baixar snapshot" + +msgid "Search wiki" +msgstr "Pesquisar no wiki" + +msgid "Flagged out-of-date" +msgstr "Marcado como desatualizado" + +msgid "Flag package out-of-date" +msgstr "Marcar como desatualizado" + +msgid "Unflag package" +msgstr "Desmarcar desatualização" + +msgid "Remove vote" +msgstr "Remover voto" + +msgid "Vote for this package" +msgstr "Votar neste pacote" + +msgid "Disable notifications" +msgstr "Desabilitar notificações" + +msgid "Notify of new comments" +msgstr "Notificar sobre novos comentários" + +msgid "Manage Co-Maintainers" +msgstr "Gerenciar co-mantenedores" + +#, php-format +msgid "%d pending request" +msgid_plural "%d pending requests" +msgstr[0] "%d requisição pentende" +msgstr[1] "%d requisições pentendes" + +msgid "Delete Package" +msgstr "Excluir pacote" + +msgid "Merge Package" +msgstr "Mesclar pacote" + +msgid "Adopt Package" +msgstr "Adotar pacote" + msgid "Git Clone URL" msgstr "Git Clone URL" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "somente leitura" +msgid "Category" +msgstr "Categoria" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "clique para copiar" +msgid "Change category" +msgstr "Alterar categoria" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Palavras-chave" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Criado por" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Ver informações da conta para %s" + msgid "Maintainer" msgstr "Mantenedor" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Último empacotador" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Votos" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularidade" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Criado em" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Última atualização" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Editar comentário para: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Adicionar comentário" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "Os identificadores de commit Git que fazem referência a commits no repositório de pacote AUR e os URLs são convertidos em links automaticamente." +msgid "Comment has been added." +msgstr "Comentário adicionado." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "Há suporte parcial à %ssintaxe Markdown%s." +msgid "View all comments" +msgstr "Ver todos os comentários" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Comentários afixados" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Últimos comentários" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Comentários para" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s comentou em %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Comentário anônimo em %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "Comentou no pacote %s em %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "excluído em %s por %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "excluído em %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "editado em %s por %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "editado em %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Desfazer exclusão de comentário" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Excluir comentário" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Afixar comentário" +#, php-format +msgid "Comment by %s" +msgstr "Comentário de %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Desafixar comentário" +msgid "Anonymous comment" +msgstr "Comentário anônimo" + +msgid "deleted" +msgstr "excluída" + +msgid "All comments" +msgstr "Todos os comentários" -#: template/pkg_details.php msgid "Package Details" msgstr "Detalhes do pacote" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Pacote base" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Descrição" -#: template/pkg_details.php msgid "Upstream URL" -msgstr "URL upstream" +msgstr "URL" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Visitar o site para" -#: template/pkg_details.php msgid "Licenses" msgstr "Licenças" -#: template/pkg_details.php msgid "Groups" msgstr "Grupos" -#: template/pkg_details.php msgid "Conflicts" msgstr "Conflitos" -#: template/pkg_details.php msgid "Provides" msgstr "Provê" -#: template/pkg_details.php msgid "Replaces" msgstr "Substitui" -#: template/pkg_details.php msgid "Dependencies" msgstr "Dependências" -#: template/pkg_details.php msgid "Required by" msgstr "Necessário para" -#: template/pkg_details.php msgid "Sources" msgstr "Fontes" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Fechar requisição: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Use este formulário para fechar a requisição para o pacote base %s%s%s." +msgstr "" +"Use esse formulário para fechar a requisição para o pacote base %s%s%s." + +msgid "Note" +msgstr "Nota" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "O campo de comentários pode ser deixado vazio. Porém, é fortemente recomendado adicionar um comentário ao rejeitar uma requisição." +msgstr "" +"O campo de comentários pode ser deixado vazio. Porém, é fortemente " +"recomendado adicionar um comentário ao rejeitar uma requisição." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Motivo" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Aceito" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Rejeitado" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Comentários" + +#, php-format +msgid "File Request: %s" +msgstr "Fazer requisição: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Use este formulário para fazer uma requisição sobre o pacote base %s%s%s que inclui os seguintes pacotes:" +msgstr "" +"Use esse formulário para fazer uma requisição sobre o pacote base %s%s%s que " +"inclui os seguintes pacotes:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Tipo de requisição" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Excluir" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Tornar órfão" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Mesclar em" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "Ao enviar uma requisição de exclusão, você solicita que um Mantenedor de Pacote exclua o pacote base. Esse tipo de requisição deveria ser usada em caso de duplicidade, softwares abandonados pelo upstream, assim como pacotes ilegais ou irreparavelmente quebrados." - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "Ao enviar uma requisição de mesclagem, você solicita que um Mantenedor de Pacote exclua o pacote base e transfira seus votos e comentários para um outro pacote base. Mesclar um pacote não afeta os repositórios Git correspondentes. Certifique-se de você mesmo atualizar o histórico Git do pacote alvo." - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "Ao enviar uma requisição de tornar órfão, você pede que um Mantenedor de Pacote abandona o pacote base. Por favor, apenas faça isto se o pacote precise de ação do mantenedor, estando este ausente por muito tempo, e você já tentou – e não conseguiu – contatá-lo anteriormente." - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Nenhuma requisição correspondeu aos seus critérios de pesquisa." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "%d requisição de pacote encontrada." msgstr[1] "%d requisições de pacotes encontradas." -msgstr[2] "%d requisições de pacotes encontradas." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Página %d de %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Pacote" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Criada por" -#: template/pkgreq_results.php msgid "Date" msgstr "Data" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d dia restante" -msgstr[1] "~%d dias restantes" -msgstr[2] "~%d dias restantes" +msgid "~%d days left" +msgstr "~%d dias restantes" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "~%d hora restante" msgstr[1] "~%d horas restantes" -msgstr[2] "~%d horas restantes" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "<1 hora restante" -#: template/pkgreq_results.php msgid "Accept" msgstr "Aceitar" -#: template/pkgreq_results.php msgid "Locked" msgstr "Travado" -#: template/pkgreq_results.php msgid "Close" msgstr "Fechar" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Pendente" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Fechada" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Nome, descrição" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Somente nome" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Nome exato" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Pacote base exato" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Comantenedor" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Mantenedor, comantenedor" - -#: template/pkg_search_form.php msgid "All" msgstr "Todos" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Marcado" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Não marcado" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Nome" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Votado" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Última modificação" +msgid "Age" +msgstr "Antiguidade" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Crescente" -#: template/pkg_search_form.php msgid "Descending" msgstr "Decrescente" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Digite os critérios de pesquisa" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Qualquer" + msgid "Search by" msgstr "Pesquisar por" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Palavras-chave" + msgid "Out of Date" msgstr "Desatualizado" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Ordenar por" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Ordem de classificação" -#: template/pkg_search_form.php msgid "Per page" msgstr "Por página" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Pesquisar" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Órfãos" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Erro ao obter a lista de pacotes." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Nenhum pacote correspondeu aos seus critérios de pesquisa." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "%d pacote encontrado." msgstr[1] "%d pacotes encontrados." -msgstr[2] "%d pacotes encontrados." -#: template/pkg_search_results.php msgid "Version" msgstr "Versão" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Popularidade é calculada como a soma de todos os votos, sendo cada voto pesado com um fator de %.2f por dia desde sua criação." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Sim" -#: template/pkg_search_results.php msgid "orphan" msgstr "órfão" -#: template/pkg_search_results.php msgid "Actions" msgstr "Ações" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Marcar como desatualizado" + msgid "Unflag Out-of-date" msgstr "Desmarcar desatualizado" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adotar pacotes" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Abandonar pacotes" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Excluir pacotes" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Confirmar" -#: template/search_accounts_form.php msgid "Any type" msgstr "Qualquer tipo" -#: template/search_accounts_form.php msgid "Search" msgstr "Pesquisa" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Estatísticas" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Pacotes órfãos" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Pacotes adicionados nos últimos 7 dias" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Pacotes atualizados nos últimos 7 dias" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Pacotes atualizados no último ano" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Pacotes nunca atualizados" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Usuários registrados" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "Mantenedores de Pacote" +msgid "Trusted Users" +msgstr "Trusted Users" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Atualizações recentes" -#: template/stats/updates_table.php -msgid "more" -msgstr "mais" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Minhas estatísticas" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Pacotes no repositório sem suporte" + msgid "Proposal Details" msgstr "Detalhes da proposta" -#: template/tu_details.php msgid "This vote is still running." msgstr "Essa votação ainda está aberta." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Enviado: %s por %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Fim" -#: template/tu_details.php msgid "Result" msgstr "Resultado" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Não" -#: template/tu_details.php msgid "Abstain" msgstr "Abster" -#: template/tu_details.php msgid "Total" msgstr "Total" -#: template/tu_details.php msgid "Participation" msgstr "Participação" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Últimos votos por TU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Último voto" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Nenhum resultado encontrado." -#: template/tu_list.php msgid "Start" msgstr "Iniciar" -#: template/tu_list.php msgid "Back" msgstr "Voltar" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "Redefinir senha do AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "Uma requisição de redefinição de senha foi enviada para a conta {user} associada com seu endereço de e-mail. Se deseja redefinir sua senha acesse o link [1] abaixo, do contrário ignore essa mensagem e nada vai acontecer." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Bem-vindo ao Arch User Repository" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Bem-vindo ao Arch User Repository! Para definir uma senha inicial para sua nova conta, clique no link [1] abaixo. Se o link não funcionar, tente copiar e colá-lo no seu navegador." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "Comentário no AUR para {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] adicionou o seguinte comentário ao {pkgbase} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Se você não deseja mais receber notificações sobre esse pacote, por favor vá à página do pacote [2] e selecione \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "Atualização de pacote do AUR: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] enviou um novo commit ao {pkgbase} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "Notificação de desatualização do AUR para {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Seu pacote {pkgbase} [1] foi marcado como desatualizado por {user} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "Notificação de propriedade do AUR para {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "O pacote {pkgbase} [1] foi adotado por {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "O pacote {pkgbase} [1] foi abandonado por {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "Notificação de comantenedor do AUR para {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "Você foi adicionado à lista de comantenedor de {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "Você foi removido da lista de comantenedor de {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "Pacote do AUR excluído: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] mesclou {old} [2] ao {new} [3].\n\n-- \nSe você não deseja mais receber notificações sobre o novo pacote, por favor acesse a [3] e clique em \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] excluiu {pkgbase} [2].\n\nVocê não mais receberá notificações sobre esse pacote." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "Lembrete de Voto de Mantenedor de Pacote: Proposta {id}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Por favor, lembre-se de votar na proposta {id} [1]. O período de votação termina em menos de 48 horas." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "Tipo de conta inválido fornecido." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "Você não tem permissão para alterar tipos de contas." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "Você não tem permissão para alterar o tipo de conta deste usuário para %s." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "Nenhum pedido para tornar órfão pendente aceitação para %s." - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "Erro Interno do Servidor" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "Ocorreu um erro fatal." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "Os detalhes foram registrados e serão revisados ​​pelo postmaster posthaste. Pedimos desculpas por qualquer inconveniente que isso possa ter causado." - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "Erro do Servidor AUR" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "Comentários relacionados ao fechamento de requisição de pacote..." - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "Esta ação fechará todas as requisições de pacote pendentes relacionadas a ela. Se %sComentários%s forem omitidos, um comentário de encerramento será gerado automaticamente." - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "atribuído" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "Mostrar %d mais" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "dependências" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "A conta não foi excluída, marque a caixa de confirmação." - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "Cancelar" - -#: templates/requests.html -msgid "Package name" -msgstr "Nome do pacote" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "Observe que se você ocultar seu endereço de e-mail, ele será incluído na lista de CCO para quaisquer notificações de requisição. Caso alguém responda a essas notificações, você não receberá um e-mail. No entanto, as respostas geralmente são enviadas para a lista de discussão e, portanto, seriam visíveis no arquivo." diff --git a/po/pt_PT.po b/po/pt_PT.po index 8d065e15..0787b584 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -1,2385 +1,1344 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Christophe Silva , 2018 # Gaspar Santos , 2011 -# R00KIE , 2013,2016 +# R00KIE , 2013 # R00KIE , 2011 -# c0d75bae60e6967ec54315cff4da5848, 2013-2015 -# c0d75bae60e6967ec54315cff4da5848, 2012 +# DarkVenger , 2013-2014 +# DarkVenger , 2012 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Christophe Silva , 2018\n" -"Language-Team: Portuguese (Portugal) (http://app.transifex.com/lfleischer/aurweb/language/pt_PT/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/" +"aur/language/pt_PT/)\n" +"Language: pt_PT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt_PT\n" -"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Página Não Encontrada" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "As nossas desculpas, a página que pediu não existe." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Nota" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "URLs Git clone não sao destinados a serem abertos em browser." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Para clonar o repositório Git do %s, executa %s" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Clica %s aqui %s para retornares à %s página de detalhes" - -#: html/503.php msgid "Service Unavailable" -msgstr "Serviço não disponível" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Não entre em pânico! Esta página encontra-se em baixo devido a manutenção. Voltaremos brevemente." +msgstr "" -#: html/account.php msgid "Account" -msgstr "Conta" +msgstr "" -#: html/account.php template/header.php msgid "Accounts" msgstr "Contas" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Não tem autorização para aceder a esta área." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Não foi possível obter informações para o utilizador especificado." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Não tem autorização para editar esta conta." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Utilize este formulário para procurar contas existentes." -#: html/account.php msgid "You must log in to view user information." msgstr "Necessita iniciar sessão para visualizar a informação do utilizador." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Para criar uma conta utilize este formulário." + msgid "Add Proposal" msgstr "Adicionar Proposta" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Token inválido para acção de utilizador." -#: html/addvote.php msgid "Username does not exist." msgstr "O utilizador não existe." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s já tem uma proposta a decorrer." -#: html/addvote.php msgid "Invalid type." msgstr "Tipo inválido." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "A proposta não pode estar vazia." -#: html/addvote.php msgid "New proposal submitted." msgstr "Nova proposta submetida." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Submeta uma proposta para votação." -#: html/addvote.php msgid "Applicant/TU" msgstr "Candidato/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(vazio se não aplicável)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Tipo" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Adição de um TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Remoção de um TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Remoção de um TU (inatividade não declarada)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Alterações ao Estatutos" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Proposta" -#: html/addvote.php msgid "Submit" msgstr "Enviar" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Gerir responsáveis" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Editar comentário" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Painel de Controle" - -#: html/home.php template/header.php msgid "Home" msgstr "Início" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Os meus pacotes marcados" - -#: html/home.php -msgid "My Requests" -msgstr "Os meus Pedidos" - -#: html/home.php -msgid "My Packages" -msgstr "Os meus pacotes" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Procurar por pacotes que eu mantenho" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Pacotes Co-Mantidos" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Procurar por pacotes que eu co-mantenho" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Bem-vindo ao AUR! Por favor leia as %sOrientações de Utilizador do AUR%s e " +"%sOrientações de TU do AUR%s para mais informações." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "As contribuições de PKGBUILDs %sdevem%s obedecer aos %sPadrões de Empacotamento Arch%s ou serão eliminadas!" +msgstr "" +"As contribuições de PKGBUILDs %sdevem%s obedecer aos %sPadrões de " +"Empacotamento Arch%s ou serão eliminadas!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Lembre-se de votar nos seus pacotes favoritos!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Alguns dos pacotes podem ser fornecidos como binários no repositório [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"Alguns dos pacotes podem ser fornecidos como binários no repositório " +"[community]." -#: html/home.php msgid "DISCLAIMER" msgstr "AVISO LEGAL" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Os pacotes AUR são produzidos por utilizadores. O seu uso é por sua conta e risco." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Os pacotes não suportados são produzidos por utilizadores. O seu uso é por " +"sua conta e risco." -#: html/home.php -msgid "Learn more..." -msgstr "Saber mais..." - -#: html/home.php msgid "Support" -msgstr "Suporte" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Pedidos de Pacotes" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Existem três tipos de pedidos que podem ser preenchidos na caixa %sPackageActions%s na página de detalhes de um pacote." +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Pedido para Tornar Orfão" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Pedido para que um pacote dique sem dono, por exemplo, quando o atual responsável se encontra inativo e o pacote foi marcado como desatualizado há muito tempo." - -#: html/home.php -msgid "Deletion Request" -msgstr "Pedido para Apagar" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Pedido de junção" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Requerer que um pacote seja junto a outro. Pode ser utilizado quando é necessário mudar o nome ao pacote ou substituir o mesmo por um pacote separado." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Se quiser discutir um pedido, pode faze-lo utilizando a lista de email %saur-requests%s. Por favor não use a lista para submeter pedidos." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Submeter Pacotes" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "O \"Git por SSH\" é usado agora para enviar pacotes para o AUR. Veja a seção %s Submitir pacotes %s secção da página ArchWiki do Repositório de Arquivos do Arch para mais detalhes." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "As seguintes impressões digitais SSH são usadas para o AUR:" - -#: html/home.php msgid "Discussion" msgstr "Discussão" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Reportar um Bug" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Pesquisa de Pacotes" -#: html/index.php msgid "Adopt" msgstr "Adoptar" -#: html/index.php msgid "Vote" msgstr "Votar" -#: html/index.php msgid "UnVote" msgstr "Retirar voto" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Notificar" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Não Notificar" -#: html/index.php +msgid "Flag" +msgstr "Marcar" + msgid "UnFlag" msgstr "Desmarcar" -#: html/login.php template/header.php msgid "Login" msgstr "Iniciar sessão" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Sessão iniciada como: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Terminar sessão" -#: html/login.php msgid "Enter login credentials" msgstr "Introduza as credenciais para login" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "Nome de utilizador" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Palavra-passe" -#: html/login.php msgid "Remember me" msgstr "Lembrar-se de mim" -#: html/login.php msgid "Forgot Password" msgstr "Esqueceu-se da palavra-passe" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Início de sessão em HTTP está desactivado. Por favor %smude para HTTPs%s se pretende iniciar sessão." +msgstr "" +"Início de sessão em HTTP está desactivado. Por favor %smude para HTTPs%s se " +"pretende iniciar sessão." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Critérios de Pesquisa" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Pacotes" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Erro ao tentar obter os detalhes do pacote." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Em falta um campo obrigatório." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Campos de palavra-passe não correspondem." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "A sua palavra-passe tem de ter pelo menos %s caracteres." -#: html/passreset.php msgid "Invalid e-mail." msgstr "E-mail inválido." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Reiniciar a Palavra-passe" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Verifique o seu e-mail para o link de confirmação." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "A palavra-passe foi reiniciada com êxito." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" +msgid "Confirm your e-mail address:" +msgstr "Confirme o endereço de e-mail:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Introduza a nova palavra-passe:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Confirme a nova palavra-passe:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Continue" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" +"Se se esqueceu do endereço de e-mail que utilizou para efectuar o registo, " +"por favor envie uma mensagem para a lista de discussão %saur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "Introduza o endereço de e-mail:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Base de pacotes" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Os pacotes selecionados não foram desaprovados, verifique a caixa de confirmação." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Não é possível encontrar o pacote onde juntar os votos e os comentários." +msgstr "" +"Não é possível encontrar o pacote onde juntar os votos e os comentários." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." -msgstr "Não é possível combinar uma base de pacotes com ela própria." +msgstr "" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Os pacotes selecionados não foram apagados, marque a caixa de confirmação." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Os pacotes selecionados não foram apagados, marque a caixa de confirmação." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Eliminar Pacote" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Eliminar Pacote" +#, php-format +msgid "Delete Package: %s" +msgstr "Eliminar Pacote: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Use este formulário para eliminar o pacote base %s%s%s e os seguintes pacotes do AUR:" +msgstr "" +"Use este formulário para eliminar o pacote base %s%s%s e os seguintes " +"pacotes do AUR:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "A eliminação de um pacote é permanente." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Seleccione a caixa para confirmar a acção." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Confirmar eliminação do pacote" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Eliminar" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." +msgid "Only Trusted Users and Developers can delete packages." msgstr "" +"Apenas Utilizadores de Confiança e Programadores podem eliminar pacotes." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Renunciar Pacote" -#: html/pkgdisown.php #, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Use este formulário para desaprovar os pacotes base %s %s %s que incluem os seguintes pacotes:" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." +msgid "Disown Package: %s" +msgstr "" + +#, php-format +msgid "" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Ao escolher na caixa de seleção, confirma que pretende desaprovar o pacote e transferir a propriedade para %s %s %s." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Ao escolher na caixa de seleção, confirma que pretende desaprovar o pacote." +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "Confirmar desaprovação do pacote." +msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "Renunciar" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Marcar comentário." - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Marcar pacote desatualizado." - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Use este formulário para marcar o pacote base %s %s %s e os seguintes pacotes desatualizados:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Porfavor faça %s e não %s para usar o formulário de reporte de bugs. Use os comentários do pacote em vez disso." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Digite detalhes sobre o porquê do pacote em baixo estar desactualizado, de preferência, incluindo links para o anúncio de lançamento ou o novo lançamento de tarball." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Comentários" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Marcar" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Somente usuários registados podem marcar pacotes desatualizados." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Fusão de Pacotes" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Fundir Pacote" +#, php-format +msgid "Merge Package: %s" +msgstr "Fundir o pacote: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "Use este formulário para fundir o pacote base %s%s%s num outro pacote." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Os pacotes listados serão eliminados:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Uma vez feita a fusão do pacote não há como reverter o processo." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Introduza o nome do pacote com o qual deseja realizar a fusão." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Fundir com:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Confimar fusão de pacote" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Fundir" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Apenas Utilizadores de Confiança e Programadores podem fundir pacotes." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Submeter Pedido" +msgid "File Request" +msgstr "Pedido de Ficheiro" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Fechar Pedido" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Primeiro" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Anterior" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Seguinte" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Ultimo." -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Pedidos" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registar" +msgid "Trusted User" +msgstr "Utilizador de Confiança" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Para criar uma conta utilize este formulário." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Termos do Serviço" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Os seguintes documentos foram atualizados. Porfavor verifique-os com cuidado:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "revisão %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Eu aceito os termos e condições acima mencionados." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Não foi possível obter detalhes da proposta." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "A votação está fechada para esta proposta." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Apenas Utilizadores de Confiança podem votar." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Não pode votar numa proposta acerca de si." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Já votou nesta proposta." -#: html/tu.php msgid "Vote ID not valid." msgstr "ID de voto não é válido." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Votos Actuais" -#: html/tu.php msgid "Past Votes" msgstr "Votos Passados" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Votantes" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "O registo de contas encontra-se inibido para pedidos do seu IP, provavelmente devido a continuados ataques de spam. Lamentamos o inconveniente." +msgstr "" +"O registo de contas encontra-se inibido para pedidos do seu IP, " +"provavelmente devido a continuados ataques de spam. Lamentamos o " +"inconveniente." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "ID de utilizador em falta" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "O nome de utilizador é inválido." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Tem de ter entre %s e %s caracteres de comprimento" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Começar e acabar com uma letra ou um número" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Apenas pode conter um ponto, underscore ou hífen." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "O endereço de e-mail é inválido." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "A página inicial é inválida, especifique o URL de HTTP (s) completo (s)." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "A impressão digital da chave PGP é inválida." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "A chave pública SSH é inválida." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Incapaz de aumentar as permissões da conta." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Língua não suportada actualmente." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "O fuso horário não é suportado no momento." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "O nome de utilizador, %s%s%s, já se encontra a ser utilizado." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "O endereço, %s%s%s, já está a ser utilizado." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "A chave pública SSH, %s %s %s, já está em uso." - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." msgstr "" -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Erro ao tentar criar a conta, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "A conta, %s%s%s, foi criada com sucesso." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Uma chave de reinicialização da sua palavra-passe foi enviada para o seu endereço de e-mail." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Clique no link Login acima para iniciar sessão." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Bem vindo ao %s! Por favor clique no link abaixo para definir a palavra-" +"passe para a sua nova conta. Se o link não funcionar experimente copia-lo e " +"cola-lo no seu navegador web." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "" +"Uma chave de reinicialização da sua palavra-passe foi enviada para o seu " +"endereço de e-mail." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Nenhuma alterações foi realizada à conta, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "A conta, %s%s%s, foi modificada com sucesso." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "O formulário de início de sessão encontra-se inibido para pedidos do seu IP, provavelmente devido a continuados ataques de spam. Lamentamos o inconveniente." +msgstr "" +"O formulário de início de sessão encontra-se inibido para pedidos do seu IP, " +"provavelmente devido a continuados ataques de spam. Lamentamos o " +"inconveniente." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Conta Suspensa" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "A sua palavra passe foi reiniciada. Se criou uma nova conta agora, por favor siga a ligação do email de confirmação para definir uma palavra passe. Caso contrário, por favor peça um reinicio à chave na pagina %sReiniciar Password%s." +msgstr "" +"A sua palavra passe foi reiniciada. Se criou uma nova conta agora, por favor " +"siga a ligação do email de confirmação para definir uma palavra passe. Caso " +"contrário, por favor peça um reinicio à chave na pagina %sReiniciar Password" +"%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Mau nome de utilizador ou palavra-passe." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Ocorreu um erro ao tentar gerar uma sessão de utilizador." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Combinação de e-mail e chave de recuperação inválidos." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Nenhum" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Ver informação de conta de %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "O ID do pacote base ou o nome do pacote base está em falta." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Não está autorizado a editar este comentário." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "O comentário não existe." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "O comentário não pode estar vazio." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "O comentário foi adicionado." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Tem de ter sessão iniciada antes de poder as informações de um pacote." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "ID de comentário em falta." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Não podem ser marcados mais de 5 comentários." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Você não pode definir este comentário." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Você não tem permissão para desativar esse comentário." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "O comentário foi marcado." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "O comentário foi desmarcado." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Erro ao obter os detalhes do pacote." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Não foi possivel encontrar detalhes acerca do pacote." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Tem de iniciar sessão antes de poder marcar pacotes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Não seleccionou nenhum pacote a marcar." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Os pacotes selecionados não foram sinalizados, insira um comentário." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Os pacotes seleccionados foram marcados como desactualizados." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Tem de iniciar sessão antes de poder desmarcar pacotes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Não seleccionou nenhum pacote a desmarcar." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Os pacotes seleccionados foram desmarcados." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Não tem permissão para eliminar pacotes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Não seleccionou nenhum pacote a apagar." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Os pacotes seleccionados foram apagados." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Tem de iniciar se sessão antes de poder adoptar pacotes." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Tem de iniciar se sessão antes de poder renunciar pacotes." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Não seleccionou nenhum pacote a adoptar." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Não seleccionou nenhum pacote a renunciar." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Os pacotes seleccionados foram adoptados." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Os pacotes seleccionados foram renunciados." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Tem de iniciar sessão antes de poder votar em pacotes." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Tem de ter sessão iniciada antes de poder retirar votos dos pacotes." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Não seleccionou nenhuns pacotes nos quais votar." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Os seus votos foram retirados dos pacotes seleccionados." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Os seus votos foram lançados para os pacotes seleccionados." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Não foi possível adicionar à lista de notificações." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Foi adicionado à lista de notificação de comentários de %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Foi removido da lista de notificação de comentários de %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Você não pode recuperar esse comentário." +msgid "You must be logged in before you can edit package information." +msgstr "Tem de ter sessão iniciada antes de poder as informações de um pacote." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" +msgid "Missing comment ID." +msgstr "ID de comentário em falta." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Não tem permissão para apagar este comentário." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "O comentário foi apagado." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" +msgid "You are not allowed to delete this comment." +msgstr "Não tem permissão para apagar este comentário." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" +msgid "Missing category ID." +msgstr "ID de categoria em falta." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" +msgid "Invalid category ID." +msgstr "ID de categoria inválido." + +msgid "You are not allowed to change this package category." +msgstr "Não tem permissão para mudar a categoria deste pacote." + +msgid "Package category changed." +msgstr "Categoria do pacote modificada." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Ver detalhes do pacote de" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Nome inválido: apenas são permitidas letras minúsculas." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "O campo \"comentários\" não pode ficar vazio." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Tipo de pedido inválido." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Pedido adicionado com sucesso." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Razão inválida." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "Apenas programadores e TUs podem fechar pedidos." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Pedido fechado com sucesso." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "" -#: template/account_delete.php msgid "Confirm deletion" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Nome de utilizador" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Tipo de conta" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Utilizador" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Desenvolvedor" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" +msgid "Trusted User & Developer" msgstr "" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Endereço de E-mail" -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Nome real" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Nick IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Impressão digital da chave PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Estado" -#: template/account_details.php msgid "Inactive since" msgstr "Inativo desde" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Activo" -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "desconhecido" - -#: template/account_details.php msgid "Last Login" msgstr "Última sessão" -#: template/account_details.php msgid "Never" msgstr "Nunca" -#: template/account_details.php msgid "View this user's packages" msgstr "Ver os pacotes deste utilizador" -#: template/account_details.php msgid "Edit this user's account" msgstr "Editar a conta deste utilizador" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "necessário" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Utilizador normal" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Utilizador de confiança" + msgid "Account Suspended" msgstr "Conta Suspensa" -#: template/account_edit_form.php msgid "Inactive" msgstr "Inativo" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Língua" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Reintroduza a palavra-passe" -#: template/account_edit_form.php +msgid "Language" +msgstr "Língua" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Notificar-me sobre novos comentários" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Actualizar" -#: template/account_edit_form.php msgid "Create" msgstr "Criar" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Reiniciar" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Não existem resultados que correspondam aos seus critérios de procura." -#: template/account_search_results.php msgid "Edit Account" msgstr "Editar Conta" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspenso" -#: template/account_search_results.php msgid "Edit" msgstr "Editar" -#: template/account_search_results.php msgid "Less" msgstr "Menos" -#: template/account_search_results.php msgid "More" msgstr "Mais" -#: template/account_search_results.php msgid "No more results to display." msgstr "Não existem mais resultados para mostrar." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" msgstr "" -#: template/comaintainers_form.php msgid "Users" msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" +msgid "My Packages" +msgstr "Os meus pacotes" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php msgid " My Account" msgstr "A minha Conta" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Registar" + +msgid "unknown" +msgstr "desconhecido" + +msgid "Package Base Details" +msgstr "Pacote Base Detalhes" + msgid "Package Actions" msgstr "Ações sobre Pacotes" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Ver PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Pesquisar na Wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" +msgid "Flagged out-of-date" +msgstr "Marcado como desatualizado." -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Marcar como desatualizado" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Desmarcar pacote" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Remover voto" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Votar neste pacote" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Desativar notificações" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" +msgid "Notify of new comments" +msgstr "Notificar-me sobre novos comentários" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d pedido por atender" msgstr[1] "%d pedidos por atender" -msgstr[2] "%d pedidos por atender" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Eliminar Pacote" + +msgid "Merge Package" +msgstr "Fundir Pacote" + msgid "Adopt Package" msgstr "Adotar Pacote" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Pacote Base Detalhes" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" +msgid "Category" +msgstr "Categoria" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" +msgid "Change category" +msgstr "Mudar categoria" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Palavras-chave" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Submissor" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Ver informação de conta de %s" + msgid "Maintainer" msgstr "Responsável pela manutenção" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Último Responsável" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Votos" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Primeira Submissão" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Última Actualização" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Adicionar comentário" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." +msgid "Comment has been added." +msgstr "O comentário foi adicionado." + +msgid "View all comments" msgstr "" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Últimos Comentários" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Pagar comentário" -#: template/pkg_comments.php -msgid "Pin comment" +#, php-format +msgid "Comment by %s" +msgstr "Comentador por %s" + +msgid "Anonymous comment" +msgstr "Comentário anónimo" + +msgid "deleted" msgstr "" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" +msgid "All comments" +msgstr "Todos os comentários" -#: template/pkg_details.php msgid "Package Details" msgstr "Detalhes do Pacote" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Pacote Base" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Descrição" -#: template/pkg_details.php msgid "Upstream URL" msgstr "URL a montante" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Visitar a página web de" -#: template/pkg_details.php msgid "Licenses" msgstr "Licenças" -#: template/pkg_details.php msgid "Groups" msgstr "Grupos" -#: template/pkg_details.php msgid "Conflicts" msgstr "Conflitos" -#: template/pkg_details.php msgid "Provides" msgstr "Fornece" -#: template/pkg_details.php msgid "Replaces" msgstr "Substitui" -#: template/pkg_details.php msgid "Dependencies" msgstr "Dependências" -#: template/pkg_details.php msgid "Required by" msgstr "Exigido por" -#: template/pkg_details.php msgid "Sources" msgstr "Fontes" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "" + #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "" -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." msgstr "" -#: template/pkgreq_close_form.php msgid "Reason" msgstr "" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Aceite" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Rejeitado" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Comentários" + +#, php-format +msgid "File Request: %s" +msgstr "Pedido de Ficheiro: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Use este formulário para enviar um pedido sobre o pacote base %s%s%s que inclui os seguintes pacotes:" +msgstr "" +"Use este formulário para enviar um pedido sobre o pacote base %s%s%s que " +"inclui os seguintes pacotes:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Tipo de pedido" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Apagar" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Orfão" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Juntar em" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "%d pedido de pacote encontrado." msgstr[1] "%d pedidos de pacotes encontrados." -msgstr[2] "%d pedidos de pacotes encontrados." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Página %d de %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Pacote" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Enviado por" -#: template/pkgreq_results.php msgid "Date" msgstr "Data" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgid "~%d days left" +msgstr "" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "" msgstr[1] "" -msgstr[2] "" -#: template/pkgreq_results.php msgid "<1 hour left" -msgstr "Falta <1 hora" +msgstr "" -#: template/pkgreq_results.php msgid "Accept" msgstr "Aceitar" -#: template/pkgreq_results.php msgid "Locked" -msgstr "Bloqueado" +msgstr "" -#: template/pkgreq_results.php msgid "Close" msgstr "Fechar" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Pendente" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Fechado" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Nome, Descrição" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Só Nome" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Nome exacto" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Pacote Base Exacto" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Co-maintainer" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Maintainer, Co-maintainer" - -#: template/pkg_search_form.php msgid "All" msgstr "Todos" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Marcados" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Não marcados" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Nome" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Votou" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Última modificação" +msgid "Age" +msgstr "Idade" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Ascendente" -#: template/pkg_search_form.php msgid "Descending" msgstr "Descendente" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Introduzir critério de pesquisa" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Qualquer" + msgid "Search by" msgstr "Procurar por" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Palavras-chave" + msgid "Out of Date" msgstr "Desactualizado" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Ordenar por" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Ordem de ordenação" -#: template/pkg_search_form.php msgid "Per page" msgstr "Por página" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Ir" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Órfãos" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Erro ao obter lista de pacotes." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Nenhum pacote corresponde aos critérios de procura." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "%d pacote encontrado." msgstr[1] "%d pacotes encontrados." -msgstr[2] "%d pacotes encontrados." -#: template/pkg_search_results.php msgid "Version" msgstr "Versão" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Sim" -#: template/pkg_search_results.php msgid "orphan" msgstr "Órfão" -#: template/pkg_search_results.php msgid "Actions" msgstr "Acções" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Marcar como desactualizado." + msgid "Unflag Out-of-date" msgstr "Desmarcar como Desactualizado" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adoptar Pacotes" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Renunciar Pacotes" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Apagar Pacotes" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Confirmar" -#: template/search_accounts_form.php msgid "Any type" msgstr "Qualquer tipo" -#: template/search_accounts_form.php msgid "Search" msgstr "Procurar" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Estatísticas" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Pacotes Órfãos" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Pacotes adicionados nos últimos 7 dias" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Pacotes actualizados nos últimos 7 dias" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Pacotes actualizados no último ano" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Pacotes nunca actualizados" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Utilizadores Registados" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Utilizadores de Confiança" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Actualizações recentes" -#: template/stats/updates_table.php -msgid "more" -msgstr "mais" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Minhas Estatísticas" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Pacotes em não suportado" + msgid "Proposal Details" msgstr "Detalhes da Proposta" -#: template/tu_details.php msgid "This vote is still running." msgstr "Este votação ainda está a decorrer." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Submetido: %s por %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Fim" -#: template/tu_details.php msgid "Result" msgstr "Resultado" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Não" -#: template/tu_details.php msgid "Abstain" msgstr "Abster-se" -#: template/tu_details.php msgid "Total" msgstr "Total" -#: template/tu_details.php msgid "Participation" msgstr "Participação" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Últimos votos de TU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Último voto" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Não foram encontrados resultados." -#: template/tu_list.php msgid "Start" msgstr "Inicio" -#: template/tu_list.php msgid "Back" msgstr "Anterior" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/ro.po b/po/ro.po index 0a58d4fc..f484c94b 100644 --- a/po/ro.po +++ b/po/ro.po @@ -1,1589 +1,946 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: # Arthur Țițeică , 2013-2015 # Lukas Fleischer , 2011 -# Marius Tcaci, 2023 # Mihai Coman , 2011-2014 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Marius Tcaci, 2023\n" -"Language-Team: Romanian (http://app.transifex.com/lfleischer/aurweb/language/ro/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/aur/language/" +"ro/)\n" +"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ro\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" -#: html/404.php msgid "Page Not Found" msgstr "Pagina nu a fost găsită" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Din păcate, pagina solicitată nu există." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Notă" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php msgid "Service Unavailable" -msgstr "Serviciu indisponibil" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." msgstr "" -#: html/account.php msgid "Account" msgstr "Cont" -#: html/account.php template/header.php msgid "Accounts" msgstr "Conturi" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Nu îți este permis accesul la această secțiune." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Nu s-au putut prelua informații despre utilizatorul specificat." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Nu ai permisiune pentru a modifica acest cont." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Parolă invalidă" - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Folosește acest formular pentru a căuta conturi existente." -#: html/account.php msgid "You must log in to view user information." -msgstr "Trebuie să fi autentificat pentru a putea vedea informații despre utilizatori." +msgstr "" +"Trebuie să fi autentificat pentru a putea vedea informații despre " +"utilizatori." + +msgid "Use this form to create an account." +msgstr "Folosește acest formular pentru a crea un cont." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "Adaugă o propunere" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Jeton nevalid pentru acțiunea utilizatorului." -#: html/addvote.php msgid "Username does not exist." msgstr "Nume de utilizator inexistent." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "Pentru %s exista o propunere în desfășurare." -#: html/addvote.php msgid "Invalid type." msgstr "Tip nevalid." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Propunerea nu poate fi goală." -#: html/addvote.php msgid "New proposal submitted." msgstr "Propunerea nouă a fost trimisă." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Trimite o propunere pentru a putea fi votată." -#: html/addvote.php msgid "Applicant/TU" msgstr "Candidat/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(gol dacă nu este cazul)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Tip" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Adăugarea unui TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Înlăturarea unui TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Înlăturarea unui TU (inactivitate nedeclarată)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Amendamentul Statutului" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Propunere" -#: html/addvote.php msgid "Submit" msgstr "Trimite" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Editează comentariul" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php msgid "Home" msgstr "Acasă" -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "Cererile mele" - -#: html/home.php -msgid "My Packages" -msgstr "Pachetele mele" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Caută pachetele pe care le intretin" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Bine ai venit la AUR! Te rog citește %sGhidul utilizatorului AUR%s și " +"%sGhidul AUR TU%s pentru mai multe informații." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "PKGBUILDurile contribuite %strebuie%s să fie conforme cu %sStandardele de Împachetare Arch%s, altfel vor fi șterse!" +msgstr "" +"PKGBUILDurile contribuite %strebuie%s să fie conforme cu %sStandardele de " +"Împachetare Arch%s, altfel vor fi șterse!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Nu uita să votezi pentru pachetele tale favorite!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Unele pachete pot fi furnizate ca binare în [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "Unele pachete pot fi furnizate ca binare în [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "DECLARAȚIE DE NEASUMARE A RESPONSABILITĂȚII" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Pachetele AUR sunt continut produs de utilizatori. Orice utilizare a fisierelor puse la dispozitie se face pe propriul risc." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Pachetele fără suport sunt conținut produs de utilizatori. Orice folosire a " +"fișierelor oferite este pe risc propriu!" -#: html/home.php -msgid "Learn more..." -msgstr "Descoperă mai multe..." - -#: html/home.php msgid "Support" msgstr "" -#: html/home.php msgid "Package Requests" msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" msgstr "" -#: html/home.php msgid "Orphan Request" msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." msgstr "" -#: html/home.php msgid "Deletion Request" msgstr "" -#: html/home.php msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." msgstr "" -#: html/home.php msgid "Merge Request" msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php msgid "Discussion" msgstr "Discuție" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Semnalare buguri" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Căutare pachete" -#: html/index.php msgid "Adopt" msgstr "Adoptă" -#: html/index.php msgid "Vote" msgstr "Vot" -#: html/index.php msgid "UnVote" msgstr "EliminăVot" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Notificare" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "DeNotificare" -#: html/index.php +msgid "Flag" +msgstr "Marchează" + msgid "UnFlag" msgstr "Elimină marcaj" -#: html/login.php template/header.php msgid "Login" msgstr "Autentificare" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Autentificat ca: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "De-autentificare" -#: html/login.php msgid "Enter login credentials" msgstr "Introdu datele de autentificare" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "Nume utilizator" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Parolă" -#: html/login.php msgid "Remember me" msgstr "Ține-mă minte" -#: html/login.php msgid "Forgot Password" msgstr "Parolă uitată" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Autentificarea prin HTTP este dezactivată. %sSchimbă pe HTTPS%s dacă vrei să te autentifici." +msgstr "" +"Autentificarea prin HTTP este dezactivată. %sSchimbă pe HTTPS%s dacă vrei să " +"te autentifici." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Criteriul de căutare" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Pachete" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Eroare la încercarea de a prelua detaliile pachetului." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Lipsește un câmp necesar." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Câmpurile parolei nu sunt potrivesc." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Parola trebuie să fie de cel puțin %s caractere." -#: html/passreset.php msgid "Invalid e-mail." msgstr "E-mail nevalid" -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Resetare parolă" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Verifică e-mailul pentru legătura de confirmare." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Parola ta a fost restabilită cu succes." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" +msgid "Confirm your e-mail address:" +msgstr "Confirmă adresa de e-mail:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Introdu noua parolă:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Confirmă noua parolă." -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Continuă" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" +"Dacă ai uitat adresa de email folosită la înregistrare, trimite un mesaj la " +"lista de discuții %saur-general%s" -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "Introdu adresa ta de e-mail:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "Nu s-a putut găsi pachet pentru fuzionare voturi și comentarii." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Nu se poate fuziona un pachet cu el însuși." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "Pachetele selectate nu au fost șterse; verifică căsuța de bifare." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Ștergere pachet" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Șterge pachet" +#, php-format +msgid "Delete Package: %s" +msgstr "Șterge pachetul: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Folosește acest formular pentru a șterge pachetul de bază %s%s%s și următoarele pachete din AUR: " +msgstr "" +"Folosește acest formular pentru a șterge pachetul de bază %s%s%s și " +"următoarele pachete din AUR: " -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Ștergerea unui pachet este permanentă." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Bifează căsuța pentru a confirma acțiunea." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Confirmă ștergerea pachetului" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Șterge" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Numai Dezvoltatorii și Trusted Users pot șterge pachete." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Abandonează pachet" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "Abandonează" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Comentarii" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Marchează" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Fuzionare pachet" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Fuzionează pachet" +#, php-format +msgid "Merge Package: %s" +msgstr "Fuzionează pachetul: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Folosește acest formular pentru a îmbina pachetul de bază %s%s%s cu alt pachet." +msgstr "" +"Folosește acest formular pentru a îmbina pachetul de bază %s%s%s cu alt " +"pachet." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Următoarele pachete vor fi șterse:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Odată ce pachetul a fuzionat, acțiunea nu este reversibilă." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Introdu numele pachetului cu care vrei să fie fuzionat acest pachet." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Fuzionează cu:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Confirmă fuzionarea pachetului" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Fuzionare" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Numai Dezvoltatorii și Trusted Users pot fuziona pachete." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" +msgid "File Request" +msgstr "Depune cerere" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Închide cererea" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Prim" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Precedent" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Înainte" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Ultim" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Cereri" -#: html/register.php template/header.php -msgid "Register" -msgstr "Înregistrare" +msgid "Trusted User" +msgstr "Trusted User" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Folosește acest formular pentru a crea un cont." - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Nu am putut prelua detaliile propunerii." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Votarea este închisă pentru această propunere." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Doar Trusted Users au permisiunea să voteze." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Nu poți vota într-o propunere despre tine." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Ai votat deja pentru această propunere." -#: html/tu.php msgid "Vote ID not valid." msgstr "ID-ul votului nu este valid." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Voturi curente" -#: html/tu.php msgid "Past Votes" msgstr "Voturi precedente" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Votanți" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Înregistrarea de conturi noi a fost dezactivată pentru adresa ta IP, probabil datorită unor atacuri spam repetate. Ne cerem scuze pentru inconveniență." +msgstr "" +"Înregistrarea de conturi noi a fost dezactivată pentru adresa ta IP, " +"probabil datorită unor atacuri spam repetate. Ne cerem scuze pentru " +"inconveniență." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "ID-ul utilizatorului lipsește" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Numele de utilizator nu este valid." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Trebuie să fie între %s și %s caractere lungime" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Începe și sfârșește cu o literă sau un număr." -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Poate conține doar o virgulă, linie joasă sau cratimă." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "Adresa de email nu este validă." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "Amprenta cheii PGP este nevalidă." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Permisiunile contului nu pot fi ridicate." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Limba nu este încă suportată." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "Numele de utilizator %s%s%s este deja folosit." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "Adresa %s%s%s este deja folosită." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Eroare la încercarea de a crea contul, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "Contul %s%s%s a fost creat cu succes." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "O cheie de resetare a parolei a fost trimisă la adresa ta de e-mail." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Clic pe legătura către Autentificare pentru a-ți folosi contul." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Bun venit la %s! Pentru a seta o parolă inițială pentru cont, apasă pe " +"legătura de jos. Dacă nu funcționează, încearcă să copiezi adresa și să o " +"lipești în bara de adrese a navigatorului." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "O cheie de resetare a parolei a fost trimisă la adresa ta de e-mail." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Nu a fost efectuată nicio modificare asupra contului, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "Contul %s%s%s a fost modificat cu succes." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Formularul de autentificare a fost dezactivat pentru adresa ta IP, probabil datorită unor atacuri spam repetate. Ne cerem scuze pentru inconveniență." +msgstr "" +"Formularul de autentificare a fost dezactivat pentru adresa ta IP, probabil " +"datorită unor atacuri spam repetate. Ne cerem scuze pentru inconveniență." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Cont suspendat" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Parola ta a fost resetată. Dacă tocmai ai creat un cont nou, folosește legătura din e-mailul de confirmare pentru a seta o parolă inițială. Altfel, cere o resetare a parolei din pagina %sResetare parolă%s." +msgstr "" +"Parola ta a fost resetată. Dacă tocmai ai creat un cont nou, folosește " +"legătura din e-mailul de confirmare pentru a seta o parolă inițială. Altfel, " +"cere o resetare a parolei din pagina %sResetare parolă%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Nume de utilizator sau parolă greșite." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "A apărut o eroare în timp ce se genera sesiunea de utilizator." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Combinație e-mail și cheie pentru resetare nevalidă." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Nimic" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Vezi informații despre contul lui %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Comentariul a fost adăugat." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Trebuie să fi autentificat înainte de a putea modifica informațiile pachetului." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "ID-ul comentariului lipsește" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Eroare la preluarea detaliilor pachetului." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Detaliile pachetului nu pot fi găsite." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Trebuie să fi autentificat înainte de a putea marca pachetele." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Nu ai selectat niciun pachet pentru a fi marcat" -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Pachetele selectate au fost marcate ca fiind Neactualizate." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." -msgstr "Trebuie să fi autentificat înainte de a putea elimina marcajul de Neactualizat al pachetelor." +msgstr "" +"Trebuie să fi autentificat înainte de a putea elimina marcajul de " +"Neactualizat al pachetelor." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Nu ai selectat niciun pachet pentru a-i fi eliminat marcajul." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "La pachetele selectate a fost eliminat marcajul de Neactualizat." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Nu ai permisiune pentru a șterge pachete." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Nu ai selectat niciun pachet pentru a fi șters." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Pachetele selectate au fost șterse." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Trebuie să fi autentificat înainte de a putea adopta pachete." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Trebuie să te autentifici înainte de a abandona pachete." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Nu ai selectat niciun pachet pentru a-l adopta." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Nu ai selectat niciun pachet pentru a-l abandona." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Pachetele selectate au fost adoptate." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Pachetele selectate au fost abandonate." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Trebuie să fi autentificat înainte de a putea vota pentru pachete." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." -msgstr "Trebuie să fi autentificat înainte de a putea șterge voturile pachetelor." +msgstr "" +"Trebuie să fi autentificat înainte de a putea șterge voturile pachetelor." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Nu ai selectat niciun pachet pentru a vota." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Voturile tale au fost șterse de la pachetele selectate." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Voturile au fost exprimate pentru pachetele selectate." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Nu am putut adăuga la lista de notificări." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Ai fost adăugat în lista de notificare a comentariilor pentru %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." -msgstr "Ai fost șters din lista de notificare pentru comentarii pentru pachetul %s." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." msgstr "" +"Ai fost șters din lista de notificare pentru comentarii pentru pachetul %s." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." +msgid "You must be logged in before you can edit package information." msgstr "" +"Trebuie să fi autentificat înainte de a putea modifica informațiile " +"pachetului." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Nu ai voie să ștergi acest comentariu." +msgid "Missing comment ID." +msgstr "ID-ul comentariului lipsește" -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Comentariul a fost șters." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" +msgid "You are not allowed to delete this comment." +msgstr "Nu ai voie să ștergi acest comentariu." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" +msgid "Missing category ID." +msgstr "ID-ul categoriei lipsește." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" +msgid "Invalid category ID." +msgstr "ID-ul categoriei nu este valid." + +msgid "You are not allowed to change this package category." +msgstr "Nu ai permisiunea de a schimba categoria acestui pachet." + +msgid "Package category changed." +msgstr "Categoria pachetului a fost schimbată." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Vezi detaliile pachetelor pentru" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "Trebuie să fi autentificat pentru a înregistra cereri pentru pachet." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Numele nu este valid: doar litere mici sunt permise." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "Câmpul pentru comentariu nu trebuie lăsat necompletat." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Tip de cerere nevalidă." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Cererea a fost adăugată cu succes." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Motiv nevalid." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "Doar TU și dezvoltatorii pot închide cererile." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Cerere închisă cu succes." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "Poți folosi acest formular pentru a șterge permanent contul AUR %s." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sWARNING%s: Acestă acțiune nu poate fi anulată." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Confirmă ștergerea" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Nume utilizator" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Tip cont" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Utilizator" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Dezvoltator" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Utilizator de încredere (TU) & Dezvoltator" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Adresă email" -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Nume real" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Pseudonim IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Amprentă cheie PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Stare" -#: template/account_details.php msgid "Inactive since" msgstr "Inactiv din" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Activ" -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "necunoscut" - -#: template/account_details.php msgid "Last Login" msgstr "Ultima autentificare" -#: template/account_details.php msgid "Never" msgstr "Niciodată" -#: template/account_details.php msgid "View this user's packages" msgstr "Vezi pachetele acestui utilizator" -#: template/account_details.php msgid "Edit this user's account" msgstr "Modifică contul acestui utilizator" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Clic %saici%s dacă dorești să ștergi definitiv acest cont." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "cerut" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Utilizator obișnuit" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Trusted user" + msgid "Account Suspended" msgstr "Cont suspendat" -#: template/account_edit_form.php msgid "Inactive" msgstr "Inactiv" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Limbă" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Rescrie parola" -#: template/account_edit_form.php +msgid "Language" +msgstr "Limbă" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Notifică pentru comentarii noi" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Actualizare" -#: template/account_edit_form.php msgid "Create" msgstr "Creează" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Resetează" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Nici un rezultat nu s-a încadrat în criteriile de căutare." -#: template/account_search_results.php msgid "Edit Account" msgstr "Modificare cont" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspendat" -#: template/account_search_results.php msgid "Edit" msgstr "Modifică" -#: template/account_search_results.php msgid "Less" msgstr "Mai puțin" -#: template/account_search_results.php msgid "More" msgstr "Mai mult" -#: template/account_search_results.php msgid "No more results to display." msgstr "Nu mai sunt rezultate de afișat." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" msgstr "" -#: template/comaintainers_form.php msgid "Users" msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" +msgid "My Packages" +msgstr "Pachetele mele" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php msgid " My Account" msgstr "Contul meu" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Înregistrare" + +msgid "unknown" +msgstr "necunoscut" + +msgid "Package Base Details" +msgstr "Detalii pachet de bază" + msgid "Package Actions" msgstr "Operațiuni" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Examinează PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Caută în wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" +msgid "Flagged out-of-date" +msgstr "Marcat ca Neactualizat" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Marchează pachetul ca Neactualizat" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Elimină marcaj pachet" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Elimină vot" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Votează acest pachet" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Dezactivează notificări" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" +msgid "Notify of new comments" +msgstr "Notifică pentru comentarii noi" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" @@ -1591,274 +948,169 @@ msgstr[0] "%d cerere în așteptare" msgstr[1] "%d cereri în așteptare" msgstr[2] "%d de cereri în așteptare" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Șterge pachet" + +msgid "Merge Package" +msgstr "Fuzionează pachet" + msgid "Adopt Package" msgstr "Adoptă pachet" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Detalii pachet de bază" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" +msgid "Category" +msgstr "Categorie" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" +msgid "Change category" +msgstr "Schimbă categoria" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Cuvinte cheie" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Autor" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Vezi informații despre contul lui %s" + msgid "Maintainer" msgstr "Responsabil" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Ultimul autor de pachet" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Voturi" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularitate" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Prima trimitere" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Ultima actualizare" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Adaugă comentariu" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" +msgid "Comment has been added." +msgstr "Comentariul a fost adăugat." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" +msgid "View all comments" +msgstr "Vizualizează toate comentariile" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Ultimele comentarii" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Șterge comentariu" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" +#, php-format +msgid "Comment by %s" +msgstr "Comentariu de %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" +msgid "Anonymous comment" +msgstr "Comentariu anonim" + +msgid "deleted" +msgstr "șters" + +msgid "All comments" +msgstr "Toate comentariile" -#: template/pkg_details.php msgid "Package Details" msgstr "Detalii pachet" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Pachet de bază" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Descriere" -#: template/pkg_details.php msgid "Upstream URL" msgstr "URL upstream" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Vizitează pagina web pentru" -#: template/pkg_details.php msgid "Licenses" msgstr "Licențe" -#: template/pkg_details.php msgid "Groups" msgstr "Grupuri" -#: template/pkg_details.php msgid "Conflicts" msgstr "Conflicte" -#: template/pkg_details.php msgid "Provides" msgstr "Furnizează" -#: template/pkg_details.php msgid "Replaces" msgstr "Înlocuiește" -#: template/pkg_details.php msgid "Dependencies" msgstr "Dependențe" -#: template/pkg_details.php msgid "Required by" msgstr "Cerut de" -#: template/pkg_details.php msgid "Sources" msgstr "Surse" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Închide cererea: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Folosește acest formular pentru a închide cererea pentru pachetul de bază %s%s%s." +msgstr "" +"Folosește acest formular pentru a închide cererea pentru pachetul de bază %s" +"%s%s." + +msgid "Note" +msgstr "Notă" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Câmpul pentru comentarii poate fi lăsat necompletat. Este totuși foarte recomandat să adaugi un comentariu când respingi o cerere." +msgstr "" +"Câmpul pentru comentarii poate fi lăsat necompletat. Este totuși foarte " +"recomandat să adaugi un comentariu când respingi o cerere." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Motiv" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Acceptat" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Respins" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Comentarii" + +#, php-format +msgid "File Request: %s" +msgstr "Înregistrează cerere: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Folosește acest formular pentru a înregistra o cerere pentru pachetul de bază %s%s%s care cuprinde următoarele pachete:" +msgstr "" +"Folosește acest formular pentru a înregistra o cerere pentru pachetul de " +"bază %s%s%s care cuprinde următoarele pachete:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Tipul de cerere" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Ștergere" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Orfan" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Fuzionează" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." @@ -1866,32 +1118,23 @@ msgstr[0] "%d cerere pentru pachet găsită" msgstr[1] "%d cereri pentru pachet găsite" msgstr[2] "%d de cereri pentru pachet găsite" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Pagina %d din %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Pachet" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Depusă de" -#: template/pkgreq_results.php msgid "Date" msgstr "Data" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgid "~%d days left" +msgstr "~%d zile rămase" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" @@ -1899,128 +1142,96 @@ msgstr[0] "~%d oră rămasă" msgstr[1] "~%d ore rămase" msgstr[2] "~%d de ore rămase" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "<1 oră a rămas" -#: template/pkgreq_results.php msgid "Accept" msgstr "Acceptă" -#: template/pkgreq_results.php msgid "Locked" msgstr "Blocat" -#: template/pkgreq_results.php msgid "Close" msgstr "Închide" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Închis" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Nume, Descriere" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Doar nume" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Nume exact" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Pachet de bază exact" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php msgid "All" msgstr "Toate" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Marcate" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Nemarcate" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Nume" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Votat" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Ultima modificare" +msgid "Age" +msgstr "Vârstă" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Crescător" -#: template/pkg_search_form.php msgid "Descending" msgstr "Descrescător" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Introdu criteriul de căutare" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Orice" + msgid "Search by" msgstr "Caută după" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Cuvinte cheie" + msgid "Out of Date" msgstr "Neactualizate" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Sortează după" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Ordinea sortării" -#: template/pkg_search_form.php msgid "Per page" msgstr "Per pagină" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Înainte" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Orfane" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Eroare la preluarea listei de pachete." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Niciun pachet nu s-a potrivit criteriului de căutare." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." @@ -2028,356 +1239,114 @@ msgstr[0] "%d pachet găsit" msgstr[1] "%d pachete găsite" msgstr[2] "%d de pachete găsite" -#: template/pkg_search_results.php msgid "Version" msgstr "Versiune" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Da" -#: template/pkg_search_results.php msgid "orphan" msgstr "orfan" -#: template/pkg_search_results.php msgid "Actions" msgstr "Acțiuni" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Marchează ca Neactualizat" + msgid "Unflag Out-of-date" msgstr "Elimină marcajul de Neactualizat" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adoptă pachete" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Abandonează pachete" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Șterge pachete" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Confirmare" -#: template/search_accounts_form.php msgid "Any type" msgstr "Orice tip" -#: template/search_accounts_form.php msgid "Search" msgstr "Caută" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Statistici" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Pachete orfane" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Pachete adăugate în ultimele 7 zile" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Pachete actualizate în ultimele 7 zile" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Pachete actualizate în ultimul an" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Pachete niciodată actualizate" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Utilizatori înregistrați" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Trusted users" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Actualizări recente" -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Statisticile mele" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Pachete în depozitul fără suport" + msgid "Proposal Details" msgstr "Detaliile propunerii." -#: template/tu_details.php msgid "This vote is still running." msgstr "Această votare este încă în desfășurare." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Trimis: %s de %s " -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Sfârșit" -#: template/tu_details.php msgid "Result" msgstr "Rezultat" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Nu" -#: template/tu_details.php msgid "Abstain" msgstr "Abținere" -#: template/tu_details.php msgid "Total" msgstr "Total" -#: template/tu_details.php msgid "Participation" msgstr "Participare" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Ultimele voturi de la un TU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Ultimul vot" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Niciun rezultat găsit" -#: template/tu_list.php msgid "Start" msgstr "Start" -#: template/tu_list.php msgid "Back" msgstr "Înapoi" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/ru.po b/po/ru.po index ca2890a2..849bc7a4 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1,1597 +1,946 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Alex , 2021 -# Evgeniy Alekseev , 2014-2015 -# Evgeniy Alekseev , 2014-2015, 2016 -# Igor , 2017 -# Kevin Morris , 2021 +# Evgeniy Alekseev , 2014 # Kyrylo Silin , 2011 # Kyrylo Silin , 2011 # Lukas Fleischer , 2011 # Rustam Tsurik , 2013 -# Sergey Shepelev , 2014,2016 -# Alex , 2017 -# Аскольд , 2016 +# Sergey Shepelev , 2014 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Kevin Morris , 2021\n" -"Language-Team: Russian (http://app.transifex.com/lfleischer/aurweb/language/ru/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/aur/language/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" -#: html/404.php msgid "Page Not Found" msgstr "Страница не найдена" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Извините, запрошенная страница не существует." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Примечание" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Клонирование репозитория Git не подразумевает открытие в браузере." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Для клонирования репозитория Git «%s» выполните «%s»." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Нажмите %sздесь%s, для возврата на страницу с подробной информацией о «%s»." - -#: html/503.php msgid "Service Unavailable" -msgstr "Сервис недоступен" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Не паниковать! Сайт недоступен из-за работ. Скоро мы вернемся назад." +msgstr "" -#: html/account.php msgid "Account" -msgstr "Аккаунт" +msgstr "" -#: html/account.php template/header.php msgid "Accounts" msgstr "Учетные записи" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "У вас нет доступа сюда." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Не удалось получить информацию об указанном пользователе." -#: html/account.php msgid "You do not have permission to edit this account." -msgstr "У вас недостаточно прав для изменения этой учётной записи." +msgstr "Вы не имеете права редактировать эту учетную запись." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Неверный пароль." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Используйте эту форму для поиска существующих учетных записей." -#: html/account.php msgid "You must log in to view user information." -msgstr "Вы должны представиться для того, чтобы посмотреть информацию о пользователе." +msgstr "" +"Вы должны представиться для того, чтобы посмотреть информацию о пользователе." + +msgid "Use this form to create an account." +msgstr "Используйте эту форму для создания учетной записи." -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "Добавить предложение" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Неверная метка для действия пользователя." -#: html/addvote.php msgid "Username does not exist." msgstr "Имя пользователя не существует." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "За %s уже идет голосование." -#: html/addvote.php msgid "Invalid type." msgstr "Неправильный тип" -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Предложение не может быть пустым." -#: html/addvote.php msgid "New proposal submitted." msgstr "Новое предложение принято." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Отправить предложение." -#: html/addvote.php msgid "Applicant/TU" msgstr "Кандидат/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(пусто если не нужно)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Тип" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Добавление TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Удаление TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Удаление TU (неактивность без уведомлений)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Внесение изменений в Устав" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Предложение" -#: html/addvote.php msgid "Submit" msgstr "Прислать" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Управление сопровождающими" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Редактировать комментарий" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Панель настроек" - -#: html/home.php template/header.php msgid "Home" msgstr "Главная" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Мои отмеченные пакеты" - -#: html/home.php -msgid "My Requests" -msgstr "Мои заявки" - -#: html/home.php -msgid "My Packages" -msgstr "Мои пакеты" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Искать пакеты, которые я сопровождаю" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Пакеты, в сопровождении которых я участвую" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Поиск пакетов, в которых я сопровождающий" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Добро пожаловать в AUR! Пожалуйста, ознакомьтесь с %sРуководством " +"пользователя AUR%s и с %sРуководством доверенного пользователя AUR%s, чтобы " +"узнать больше." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Присланные пэкиджбилды (англ. PKGBUILD) %sдолжны%s соответствовать %sстандартам создания пакетов для Арча%s, иначе они будут удалены!" +msgstr "" +"Присланные пэкиджбилды (англ. PKGBUILD) %sдолжны%s соответствовать " +"%sстандартам создания пакетов для Арча%s, иначе они будут удалены!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Не забывайте голосовать за понравившиеся вам пакеты!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "В хранилище [extra] некоторые пакеты могут быть представлены в бинарном виде." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"В хранилище [community] некоторые пакеты могут быть представлены в бинарном " +"виде." -#: html/home.php msgid "DISCLAIMER" msgstr "Отказ от ответственности" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Пакеты в AUR содержат предоставленный пользователями контент. Любое использование предоставляемых файлов выполняйте на свой риск." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Неподдерживаемые пакеты — это пакеты, созданные пользователями. Любой способ " +"их использования осуществляется на ваш страх и риск." -#: html/home.php -msgid "Learn more..." -msgstr "Больше..." - -#: html/home.php msgid "Support" -msgstr "Поддержка" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Запросы по пакету" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Три типа запросов могут быть посланы с использованием %sДействия над пакетом%s на странице пакета:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Запрос на сброс сопровождающего" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Запросить, чтобы пакет быть лишен сопровождающего, например, если текущий сопровождающий неактивен и пакет давно помечен, как устаревший." - -#: html/home.php -msgid "Deletion Request" -msgstr "Запрос на удаление" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Запрос объединения" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Запросить объединение пакета с другим. Может быть использовано, когда пакет необходимо переименовать или заменить другим." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Если вы хотите обсудить запрос, вы можете использовать список рассылки %saur-requests%s. Однако, пожалуйста, не используйте список рассылки для отправки запросов." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Загрузка пакетов" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "На текущий момент для загрузки пакетов в AUR используется Git через SSH. Смотри %sЗагрузка пакетов%s в ArchWiki для более подробной информации." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Следующие отпечатки ключей используются AUR:" - -#: html/home.php msgid "Discussion" msgstr "Обсуждение" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Отчет об ошибке" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Поиск пакетов" -#: html/index.php msgid "Adopt" msgstr "Усыновить" -#: html/index.php msgid "Vote" msgstr "Голосовать" -#: html/index.php msgid "UnVote" msgstr "Убрать голос" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Извещать" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Не извещать" -#: html/index.php +msgid "Flag" +msgstr "Пометить" + msgid "UnFlag" msgstr "Снять метку" -#: html/login.php template/header.php msgid "Login" msgstr "Войти" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Вы вошли как: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Выход" -#: html/login.php msgid "Enter login credentials" msgstr "Введите учётные данные" -#: html/login.php -msgid "User name or primary email address" -msgstr "Имя пользователя или основной адрес эл. почты" +msgid "Username" +msgstr "Имя пользователя" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Пароль" -#: html/login.php msgid "Remember me" msgstr "Запомнить меня" -#: html/login.php msgid "Forgot Password" msgstr "Забыли пароль?" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Вход через HTTP отключен. Пожалуйста, %sпереключитесь на HTTPs%s, чтобы войти." +msgstr "" +"Вход через HTTP отключен. Пожалуйста, %sпереключитесь на HTTPs%s, чтобы " +"войти." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Критерии поиска" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Пакеты" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Ошибка получения информации о пакете." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Отсутствует обязательное значение." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Пароли не совпадают." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Пароль должен быть не менее %s символов." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Неверная электронная почта." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Сброс пароля" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Проверьте свою электронную почту на наличие ссылки подтверждения." -#: html/passreset.php msgid "Your password has been reset successfully." -msgstr "Ваш пароль успешно сброшен." +msgstr "Ваш пароль был успешно переустановлен." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Подтвердите своё имя пользователя или основной адрес эл. почты:" +msgid "Confirm your e-mail address:" +msgstr "Подтвердите адрес своей электронной почты:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Введите ваш новый пароль:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Подтвердите ваш новый пароль:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Продолжить" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Если вы забыли имя пользователя или основной адрес эл. почты, который использовали для регистрации, напишите сообщение в список рассылки %saur-general%s." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Если вы забыли электронный адрес, который вы использовали для регистрации, " +"пожалуйста, отошлите сообщение в список рассылки %saur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Введите своё имя пользователя или основной адрес эл. почты:" +msgid "Enter your e-mail address:" +msgstr "Введите свой адрес электронной почты:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Группы пакетов" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Выбранные пакеты будут брошены." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Не могу найти пакет для объединения голосов и комментариев." +msgstr "Не могу найти пакет для объединения с ним голосов и комментариев." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Невозможно объединить группу пакетов с самой собой." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "Выбранные пакеты не были удалены. Поставьте галочку для подтверждения." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Удаление пакета" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Удалить пакет" +#, php-format +msgid "Delete Package: %s" +msgstr "Удалить пакет: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " msgstr "Используйте эту форму, чтобы удалить группу пакетов %s%s%s из AUR:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Удаление пакета необратимо." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Активируйте чекбокс для подтверждения действия." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Подтвердите удаление пакета" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Удалить" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Только Доверенные Пользователи и Разработчики могут удалять пакеты." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Бросить пакет" -#: html/pkgdisown.php #, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Используйте данную форму, чтобы бросить группу пакетов %s%s%s, которая включает в себя следующие пакеты:" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." +msgid "Disown Package: %s" +msgstr "" + +#, php-format +msgid "" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Ставя галочку, вы подтверждаете, что хотите бросить пакеты и сделать сопровождающим %s%s%s." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Ставя галочку, вы подтверждаете, что хотите бросить пакет." +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "Подтвердите отказ от пакета" +msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "Бросить" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Отметить комментарий" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Отметить пакет устаревшим" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Используйте данную форму, чтобы отметить устаревшими группу пакетов %s%s%s, которая включает в себя следующие пакеты:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Пожалуйста %sне%s используйте данную форму для сообщения об ошибке. Используйте для этого комментарии." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Введите описание, почему данные пакет устарел; добавление ссылок на новость о релизе или архив с новой версией предпочтительно." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Комментарии" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Пометить" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Только зарегистрированные пользователи могут отметить пакет устаревшим." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Объединение пакетов" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Объединить пакеты" +#, php-format +msgid "Merge Package: %s" +msgstr "Объединить пакет: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Используйте эту форму, чтобы объединить группу пакетов %s%s%s с другим пакетом." +msgstr "" +"Используйте эту форму, чтобы объединить группу пакетов %s%s%s с другим " +"пакетом." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Следующие пакеты будут удалены:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Объединение пакетов — необратимое действие." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Введите имя пакета, с которым вы хотите объединить этот пакет." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Объединить с:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Подтвердить объединение пакетов" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Объединить" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Только Доверенные Пользователи и Разработчики могут объединять пакеты." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Отправить запрос" +msgid "File Request" +msgstr "Запрос действия" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Закрыть запрос" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Первый" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Назад" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Далее" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Последний" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Запросы" -#: html/register.php template/header.php -msgid "Register" -msgstr "Регистрация" +msgid "Trusted User" +msgstr "Доверенный пользователь" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Используйте эту форму для создания учетной записи." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Условия обслуживания" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Этот документ был обновлён, ознакомьтесь с ним внимательно:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "редакция %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Я принимаю приведённые выше положения и условия." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Не получилось показать предложение." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Голосование закрыто." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Только Доверенные Пользователи имеют право голоса." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Нельзя голосовать за себя." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Вы уже проголосовали." -#: html/tu.php msgid "Vote ID not valid." msgstr "Идентификатор голосование неверный." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Сейчас голосов" -#: html/tu.php msgid "Past Votes" msgstr "Прошлые голоса" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Голосовавшие" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Регистрация аккаунтов с вашего IP адреса запрещена, возможная причина проблемы — спам-атаки. Извините за неудобства." +msgstr "" +"Регистрация аккаунтов с вашего IP адреса запрещена, возможная причина " +"проблемы — спам-атаки. Извините за неудобства." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Отсутствует идентификатор пользователя" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Неверное имя пользователя." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Длина должна быть от %s до %s символов" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Начинаются и заканчиваются цифрой или буквой" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." -msgstr "Может содержать только одну точку, подчёркивание или тире." +msgstr "Может содержать только одну запятую, подчёркивание или тире." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "Неправильный адрес электронной почты." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "Неверная домашняя страница, укажите полный адрес с указанием протокола HTTP(s)." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "Неверный отпечаток ключа PGP." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "Публичный SSH ключ неправильный." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Невозможно повысить привилегии." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Язык пока не поддерживается." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Часовые пояса пока не поддерживаются." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." -msgstr "Имя %s%s%s уже занято." +msgstr "Имя пользователя, %s%s%s, уже используется." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "Адрес %s%s%s уже используется." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "Публичный SSH ключ %s%s%s уже используется." - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." msgstr "" -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Ошибка при создании аккаунта %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "Учетная запись %s%s%s была успешно создана." -#: lib/acctfuncs.inc.php +msgid "Click on the Login link above to use your account." +msgstr "Нажмите на ссылку для входа вверху чтобы зайти." + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Добро пожаловать в %s! Для того чтобы установить начальный пароль для " +"нового аккаунта, пожалуйста нажмите на ссылку ниже. Если ссылка не работает, " +"скопируйте и вставьте её в веб-браузер." + msgid "A password reset key has been sent to your e-mail address." msgstr "Ключ для смены пароля был отправлен на ваш электронный адрес." -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "Нажмите на ссылку Войти выше." - -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "С аккаунтом %s%s%s не произведено никаких действий." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "Учетная запись %s%s%s успешно изменена." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Доступ к форме входа с вашего IP адреса запрещен, возможная причина проблемы — спам-атаки. Извините за неудобства." +msgstr "" +"Доступ к форме входа с вашего IP адреса запрещен, возможная причина проблемы " +"— спам-атаки. Извините за неудобства." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Действие аккаунта приостановлено." -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Ваш пароль был сброшен. Если вы только что создали аккаунт, пожалуйста используйте ссылку из письма подтверждения чтобы установить начальный пароль. В противном случае, запросите ключ для сброса на странице %sСброс пароля%s." +msgstr "" +"Ваш пароль был сброшен. Если вы только что создали аккаунт, пожалуйста " +"используйте ссылку из письма подтверждения чтобы установить начальный " +"пароль. В противном случае, запросите ключ для сброса на странице %sСброс " +"пароля%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Неверно указаны имя пользователя или пароль." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Произошла ошибка при создании пользовательской сессии." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Неверная электронная почта и комбинация сброса ключа." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Нет" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Просмотр информации об аккаунте %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "ID или имя группы пакетов отсутствует." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Вы не можете редактировать данный комментарий." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Комментарий не существует." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Комментарий не может быть пустым." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Комментарий добавлен." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Вы должны представиться прежде чем редактировать информацию о пакете." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Идентификатор комментария отсутствует." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Не более 5 комментариев могут быть прикреплены." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Вы не можете прикрепить данный комментарий." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Вы не можете открепить данный комментарий." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Комментарий был прикреплен." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Комментарий был откреплен." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Ошибка получения информации о пакете." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Не найдена информация о пакете." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." -msgstr "Вы должны войти чтобы отмечать пакеты." +msgstr "Вы должны войти прежде чем расставлять флажки на пакеты." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Вы не выбрали ни одного пакета для пометки." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Выбранные пакеты не были отмечены, пожалуйста, введите комментарий." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Выбранные пакеты помечены как устаревшие." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." -msgstr "Вы должны войти чтобы снимать флажки." +msgstr "Вы должны войти прежде чем снимать флажки." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Вы не выбрали ни одного пакета для снятия пометки." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "С выбранных пакетов пометка снята." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "У вас нет права на удаление пакетов." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Вы не выбрали ни одного пакета для удаления." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Выбранные пакеты удалены." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." -msgstr "Вы должны войти чтобы усыновлять пакеты." +msgstr "Вы должны войти прежде чем усыновлять пакеты." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." -msgstr "Вы должны войти чтобы бросать пакеты." +msgstr "Вы должны войти прежде чем бросать пакеты." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Вы не выбрали ни одного пакета для усыновления." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Вы не выбрали ни одного пакета чтобы бросить." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Выбранные пакеты усыновлены." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Выбранные пакеты брошены." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." -msgstr "Вы должны войти чтобы голосовать." +msgstr "Вы должны войти прежде чем голосовать." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." -msgstr "Вы должны войти чтобы снимать голос с пакета." +msgstr "Вы должны войти прежде чем снимать голос с пакета." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Вы не выбрали ни одного пакета для голосования." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Ваш голос убран с выбранного пакета." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Вы проголосовали за выбранные пакеты." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Невозможно добавить в список получателей извещений." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Вы добавлены в список извещений для %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Вам больше не будут приходить извещения от %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Вы не можете отменить удаление данного комментария." +msgid "You must be logged in before you can edit package information." +msgstr "Вы должны представиться прежде чем редактировать информацию о пакете." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Комментарий был восстановлен." +msgid "Missing comment ID." +msgstr "Идентификатор комментария отсутствует." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "У вас нет прав для удаления этого комментария." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Комментарий удален." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Комментарий был отредактирован." +msgid "You are not allowed to delete this comment." +msgstr "У вас нет прав для удаления этого комментария." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Вы не можете редактировать ключевые слова данной группы пакетов." +msgid "Missing category ID." +msgstr "Отсутствует идентификатор категории." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Ключевые слова были обновлены." +msgid "Invalid category ID." +msgstr "Неверный идентификатор категории." + +msgid "You are not allowed to change this package category." +msgstr "Вам не позволено менять категорию этого пакета." + +msgid "Package category changed." +msgstr "Категория пакета изменилась." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Вы не можете управлять сопровождающими данной группы пакетов." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Неправильное имя пользователя: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "Сопровождающие пакета были обновлены." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Просмотреть информацию о пакете" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "требует %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." -msgstr "Вы должны войти, чтобы отправить запрос по пакету." +msgstr "" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." -msgstr "Неверное имя: допустим только нижний регистр." +msgstr "Неверное имя: только нижний регистр допустим." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "Поле комментариев должно быть заполнено." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Неправильный тип запроса." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Запрос добавлен успешно." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Неправильная причина." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." -msgstr "Только Доверенные пользователи или разработчики могут закрывать запросы." +msgstr "" +"Только Доверенные пользователи или разработчики могут закрывать запросы." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Запрос закрыт успешно." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Вы можете использовать данную форму, чтобы удалить следующий аккаунт AUR: %s." +msgstr "" +"Вы можете использовать данную форму, чтобы удалить следующий аккаунт AUR: %s." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sПРЕДУПРЕЖДЕНИЕ%s: Данное действие не может быть отменено." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Подтвердите удаление" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Имя пользователя" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Тип учетной записи" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Пользователь" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Разработчик" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Доверенные пользователи и Разработчики" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Адрес электронной почты" -#: template/account_details.php -msgid "hidden" -msgstr "скрыто" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Настоящее имя" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Домашняя страница" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC Ник" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Отпечаток ключа PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Статус" -#: template/account_details.php msgid "Inactive since" msgstr "Неактивен с" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Активный" -#: template/account_details.php -msgid "Registration date:" -msgstr "Дата регистрации:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "неизвестно" - -#: template/account_details.php msgid "Last Login" msgstr "Последний вход" -#: template/account_details.php msgid "Never" msgstr "Никогда" -#: template/account_details.php msgid "View this user's packages" msgstr "Посмотреть пакеты этого пользователя" -#: template/account_details.php msgid "Edit this user's account" msgstr "Отредактировать этот аккаунт" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Нажмите %sздесь%s, если Вы хотите удалить данный аккаунт насовсем." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Нажмите %sздесь%s, чтобы просмотреть данные о пользователе." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "необходимо" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Имя пользователя имя, которое будет использоваться для входа. Это имя видимо всех, даже когда учётная запись не активна." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Обычный пользователь" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Доверенный пользователь" + msgid "Account Suspended" msgstr "Действие учетной записи приостановлено" -#: template/account_edit_form.php msgid "Inactive" msgstr "Неактивен" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Пожалуйста убедитесь, что Вы корректно ввели Ваш email; в противном случае вы будете заблокированы." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Скрыть email." - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Язык" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Часовой пояс" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Введите пароль еще раз" -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Следующая информация необходима, только если вы хотите загружать пакеты в AUR." +msgid "Language" +msgstr "Язык" -#: templates/partials/account_form.html msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "Публичный SSH ключ" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Настройки уведомлений" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Уведомлять о новых комментариях" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Уведомлять об обновлении пакета" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Уведомлять об измененях собственности" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" msgstr "" -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Обновить" -#: template/account_edit_form.php msgid "Create" msgstr "Создать" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Очистить" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "По вашему запросу ничего не найдено." -#: template/account_search_results.php msgid "Edit Account" msgstr "Изменить учетную запись" -#: template/account_search_results.php msgid "Suspended" msgstr "Приостановлена" -#: template/account_search_results.php msgid "Edit" msgstr "Редактировать" -#: template/account_search_results.php msgid "Less" -msgstr "Меньше" +msgstr "Назад" -#: template/account_search_results.php msgid "More" -msgstr "Больше" +msgstr "Далее" -#: template/account_search_results.php msgid "No more results to display." msgstr "Больше нет результатов." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Используйте данную форму, чтобы добавить сопровождающих для %s%s%s (одно имя на строку):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "Пользователи" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "Сохранить" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Комментарий: %s" +msgid "My Packages" +msgstr "Мои пакеты" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s отметил %s%s%s устаревшим %s%s%s по следующей причине:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s не отмечен устаревшим." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Вернуться к деталям" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d aurweb Development Team." - -#: template/header.php msgid " My Account" msgstr "Моя учётная запись" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Регистрация" + +msgid "unknown" +msgstr "неизвестно" + +msgid "Package Base Details" +msgstr "Информация по группе пакетов" + msgid "Package Actions" msgstr "Действия над пакетом" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Просмотреть PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "Посмотреть изменения" +msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" -msgstr "Загрузить снимок" +msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Искать в Wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Отмечен устаревшим (%s)" +msgid "Flagged out-of-date" +msgstr "Помечен как устаревший" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Пометить пакет как устаревший" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Снять пометку" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Удалить голос" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Проголосовать за пакет" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Выключить уведомления" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Включить уведомления" +msgid "Notify of new comments" +msgstr "Уведомлять о новых комментариях" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "Управление сопровождающими" +msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" @@ -1600,274 +949,167 @@ msgstr[1] "%d запроса в обработке" msgstr[2] "%d запросов в обработке" msgstr[3] "%d запросов в обработке" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Удалить пакет" + +msgid "Merge Package" +msgstr "Объединить пакеты" + msgid "Adopt Package" msgstr "Усыновить пакет" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Информация по группе пакетов" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" -msgstr "URL для git clone" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "только чтение" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Ключевые слова" +msgid "Category" +msgstr "Категория" + +msgid "Change category" +msgstr "Изменить категорию" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Автор" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Просмотр информации об аккаунте %s" + msgid "Maintainer" msgstr "Ответственный" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Последний приславший" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Голосов" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Популярность" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Впервые послан" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Последнее обновление" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Редактировать комментарий для: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Добавить комментарий" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" +msgid "Comment has been added." +msgstr "Комментарий добавлен." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" +msgid "View all comments" +msgstr "Посмотреть все комментарии" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Закрепленные комментарии" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Последние комментарии" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s прокомментировал %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Анонимный комментарий для %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "удалён %s %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "удалён %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "отредактирован %s %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "отредактирован %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Восстановить комментарий" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Удалить комментарий" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Закрепить комментарий" +#, php-format +msgid "Comment by %s" +msgstr "Комментарий %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Открепить комментарий" +msgid "Anonymous comment" +msgstr "Анонимный комментарий" + +msgid "deleted" +msgstr "удален" + +msgid "All comments" +msgstr "Все комментарии" -#: template/pkg_details.php msgid "Package Details" msgstr "Информация о пакете" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Группа пакетов" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Описание" -#: template/pkg_details.php msgid "Upstream URL" msgstr "URL апстрима" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Посетить сайт" -#: template/pkg_details.php msgid "Licenses" msgstr "Лицензия" -#: template/pkg_details.php msgid "Groups" msgstr "Группы" -#: template/pkg_details.php msgid "Conflicts" msgstr "Конфликтует" -#: template/pkg_details.php msgid "Provides" msgstr "Предоставляет" -#: template/pkg_details.php msgid "Replaces" msgstr "Заменяет" -#: template/pkg_details.php msgid "Dependencies" msgstr "Зависимости" -#: template/pkg_details.php msgid "Required by" msgstr "Требуется пакетами" -#: template/pkg_details.php msgid "Sources" msgstr "Исходники" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Закрыть запрос %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "Используйте эту форму, чтобы закрыть запрос о группе пакетов %s%s%s." -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "Примечание" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "При отклонении запроса рекомендуется заполнить поле комментарий (не обязательно)." +msgstr "" +"При отклонении запроса рекомендуется заполнить поле комментарий (не " +"обязательно)." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Причина" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Принято" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Отклонено" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Комментарии" + +#, php-format +msgid "File Request: %s" +msgstr "Запрос: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Используйте данную форму, чтобы послать запрос по поводу группы пакетов %s%s%s, которая включает следующие пакеты:" +msgstr "" +"Используйте данную форму, чтобы послать запрос по поводу группы пакетов %s%s" +"%s, которая включает следующие пакеты:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Тип запроса" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Удаление" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Сделать сиротой" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Объединить с" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Нет запросов по выбранному критерию поиска." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." @@ -1876,33 +1118,23 @@ msgstr[1] "Найдены запросы для %d пакетов." msgstr[2] "Найдены запросы для %d пакетов." msgstr[3] "Найдены запросы для %d пакетов." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Страница %d из %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Пакет" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Послан" -#: template/pkgreq_results.php msgid "Date" msgstr "Дата" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "остался ~%d день" -msgstr[1] "осталось ~%d дня" -msgstr[2] "осталось ~%d дней" -msgstr[3] "осталось ~%d дней" +msgid "~%d days left" +msgstr "осталось ~%d дней" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" @@ -1911,128 +1143,96 @@ msgstr[1] "осталось ~%d часа" msgstr[2] "осталось ~%d часов" msgstr[3] "осталось ~%d часов" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "осталось меньше часа" -#: template/pkgreq_results.php msgid "Accept" msgstr "Принять" -#: template/pkgreq_results.php msgid "Locked" msgstr "Заблокировано" -#: template/pkgreq_results.php msgid "Close" msgstr "Закрыть" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Ожидает" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Закрыт" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Название, описание" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Только название" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Точное имя" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Точное имя группы" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Сопровождающий" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Ответственный, сопровождающий" - -#: template/pkg_search_form.php msgid "All" msgstr "Все" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Отмеченные" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Неотмеченные" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Имя" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Мой голос" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Последнее обновление" +msgid "Age" +msgstr "Возраст" -#: template/pkg_search_form.php msgid "Ascending" msgstr "По возрастанию" -#: template/pkg_search_form.php msgid "Descending" msgstr "По убыванию" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Введите критерии поиска" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Любой" + msgid "Search by" msgstr "Искать по" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Ключевые слова" + msgid "Out of Date" msgstr "Устарел" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Сортировать по" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Порядок сортировки" -#: template/pkg_search_form.php msgid "Per page" msgstr "Постранично" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Поехали" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Сироты" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Ошибка получения списка пакетов." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Нет пакетов по выбранному критерию поиска." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." @@ -2041,356 +1241,114 @@ msgstr[1] "Найдено %d пакета." msgstr[2] "Найдено %d пакетов." msgstr[3] "Найдено %d пакетов." -#: template/pkg_search_results.php msgid "Version" msgstr "Версия" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Популярность считается, как сумма всех голосов, где каждый голос взвешен с коэффициентом %.2f за каждый день разницы между днём голосования и днём загрузки пакета." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Да" -#: template/pkg_search_results.php msgid "orphan" -msgstr "брошеный" +msgstr "сирота" -#: template/pkg_search_results.php msgid "Actions" msgstr "Действия" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Пометить как Устаревший" + msgid "Unflag Out-of-date" msgstr "Убрать флаг Устаревший" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Усыновить пакеты" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Бросить пакеты" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Удалить пакеты" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Подтвердить" -#: template/search_accounts_form.php msgid "Any type" msgstr "Любой тип" -#: template/search_accounts_form.php msgid "Search" msgstr "Поиск" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Статистика" -#: template/stats/general_stats_table.php msgid "Orphan Packages" -msgstr "Брошеные пакеты" +msgstr "Пакеты-сироты" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Пакеты, добавленные за прошедшие 7 дней" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Пакеты, обновленные за прошедшие 7 дней" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Пакеты, обновленные за прошедший год" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Пакеты, которые никогда не обновлялись" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Зарегистрированных пользователей" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Доверенных пользователей" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Последние обновления" -#: template/stats/updates_table.php -msgid "more" -msgstr "больше" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Моя статистика" -#: template/tu_details.php -msgid "Proposal Details" -msgstr "Подробности предложения" +msgid "Packages in unsupported" +msgstr "Пакетов в [unsupported]" + +msgid "Proposal Details" +msgstr "Подробнее о предложении" -#: template/tu_details.php msgid "This vote is still running." msgstr "Голосование продолжается." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Получено: %s %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Конец" -#: template/tu_details.php msgid "Result" msgstr "Результат" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Нет" -#: template/tu_details.php msgid "Abstain" msgstr "Воздерживаюсь" -#: template/tu_details.php msgid "Total" msgstr "Всего" -#: template/tu_details.php msgid "Participation" msgstr "Участие" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Последний голос TU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Последний голос" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Нет результатов." -#: template/tu_list.php msgid "Start" msgstr "Начало" -#: template/tu_list.php msgid "Back" msgstr "Назад" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/sk.po b/po/sk.po index a54f145f..1a5fa63d 100644 --- a/po/sk.po +++ b/po/sk.po @@ -1,2387 +1,1342 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# archetyp , 2013-2016 -# Jose Riha , 2018,2022 +# archetyp , 2013-2015 # Matej Ľach , 2011 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Jose Riha , 2018,2022\n" -"Language-Team: Slovak (http://app.transifex.com/lfleischer/aurweb/language/sk/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Slovak (http://www.transifex.com/projects/p/aur/language/" +"sk/)\n" +"Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sk\n" -"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: html/404.php msgid "Page Not Found" msgstr "Stránka nebola nájdená" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Mrzí nás to, ale stránka, ktorú ste zadali, neexistuje." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Poznámka" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "URL adresy na klonovanie Git repozitárov nie sú určené pre otváranie v prehliadači." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Na klonovanie Git repozitáre pre %s spustite %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Kliknite %ssem%s pre návrat na stránku s detailami o %s." - -#: html/503.php msgid "Service Unavailable" -msgstr "Služba nie je dostupná" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Zachovajte pokoj. Na stránke momentálne prebieha údržba. Vrátime sa čoskoro." +msgstr "" -#: html/account.php msgid "Account" msgstr "Účet" -#: html/account.php template/header.php msgid "Accounts" msgstr "Účty" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Nemáte potrebné práva pre prístup do tejto oblasti." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Nemožno získať informácie pre špecifikovaného užívateľa. " -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Nemáte potrebné oprávnenia, pre úpravu tohoto účtu. " -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Neplatné heslo." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Použite tento formulár pre vyhľadávanie v existujúcich účtoch." -#: html/account.php msgid "You must log in to view user information." msgstr "Musíte sa prihlásiť, pre zobrazenie užívateľských informácií. " -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Použite tento formulár pre vytvorenie účtu. " + msgid "Add Proposal" msgstr "Pridať návrh" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Neplatný znak pre užívateľskú akciu." -#: html/addvote.php msgid "Username does not exist." msgstr "Užívateľské meno neexistuje." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "O %s už návrh beží." -#: html/addvote.php msgid "Invalid type." msgstr "Neplatný typ." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Návrch nemôže byť prázdny." -#: html/addvote.php msgid "New proposal submitted." msgstr "Nový návrh bol odoslaný." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Odošli návrh na hlasovanie." -#: html/addvote.php msgid "Applicant/TU" msgstr "Adept/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(prázdne ak nemožno uplatniť)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Typ" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Pridanie TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Odobranie TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Odobranie TU (neohlásená neaktivita)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Zmena stanov" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Návrh" -#: html/addvote.php msgid "Submit" msgstr "Odoslať" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Manažovať spolupracovníkov" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Editovať komentár" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Nástenka" - -#: html/home.php template/header.php msgid "Home" msgstr "Domov" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Moje označené balíčky" - -#: html/home.php -msgid "My Requests" -msgstr "Moje požiadavky" - -#: html/home.php -msgid "My Packages" -msgstr "Moje balíčky" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Hľadať balíčky, ktoré spravujem" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Spoločne spravované balíčky" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Hľadať balíčky, v ktorých pôsobím ako spolupracovník" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Vitajte v AUR! Prečítajte si prosím %sAUR smernicu pre užívateľov%s a %sAUR " +"smernicu pre TU%s pre ďalšie informácie." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Prispené PKGBUILDy sa %smusia%s riadiť %sArch podmienkami pre balíčky%s, inak budú vymazané!" +msgstr "" +"Prispené PKGBUILDy sa %smusia%s riadiť %sArch podmienkami pre balíčky%s, " +"inak budú vymazané!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Nezabudnite hlasovať za svoje obľúbené balíčky!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Niektoré balíčky môžu byť poskytnuté ako binárky v [extra]. " +msgid "Some packages may be provided as binaries in [community]." +msgstr "Niektoré balíčky môžu byť poskytnuté ako binárky v [community]. " -#: html/home.php msgid "DISCLAIMER" msgstr "UPOZORNENIE" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Balíčky v AUR sú výsledkom práce užívateľov. Akékoľvek použitie týchto súborov je na vlastnú zodpovednosť." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Nepodporované balíčky sú vytvárané užívateľmi. Akékoľvek použitie " +"poskytnutých súborov je na vaše vlastné riziko. " -#: html/home.php -msgid "Learn more..." -msgstr "Dozvedieť sa viac..." - -#: html/home.php msgid "Support" -msgstr "Podpora" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "Žiadosti týkajúce sa balíčkov" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "V súčasnosti existujú tri typy žiadostí, ktoré možno vyplniť v časti %sAkcie balíčka%s na stránke s detailami balíčka, a to:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "Žiadosť o osirenie" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Žiadosť o odobratie vlastníctva balíčka, napr. ak správca balíčka nie je aktívny a balíček bol dlhšiu dobu označený ako neaktuálny." - -#: html/home.php -msgid "Deletion Request" -msgstr "Žiadosť o vymazanie" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "Žiadosť o zlúčenie" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Žiadosť o zlúčenie balíčka do iného. Možno použiť tiež v prípade, že balíček potrebuje byť premenovaný alebo nahradený rozdeleným balíčkom." +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Ak potrebujete prediskutovať nejakú požiadavku, kedykoľvek môžete napísať na mailing list %saur-requests%s. Nepoužívajte však tento mailing list na posielanie požiadaviek." +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "Podanie balíčkov" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Git cez SSH sa teraz používa na podanie balíčkov do AUR. Pre ďalšie informácie pozri tiež sekciu %sPodanie balíčkov%s na AUR stránke v ArchWiki." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Uvedené SSH fingerprints sa používajú pre AUR:" - -#: html/home.php msgid "Discussion" msgstr "Diskusia" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Ohlasovanie chýb" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "Hľadanie balíčka" -#: html/index.php msgid "Adopt" msgstr "Adoptovať" -#: html/index.php msgid "Vote" msgstr "Hlasuj" -#: html/index.php msgid "UnVote" msgstr "Odober hlas" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Upozorni" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Zruš upozornenie" -#: html/index.php +msgid "Flag" +msgstr "Označ" + msgid "UnFlag" msgstr "Odznač" -#: html/login.php template/header.php msgid "Login" msgstr "Prihlásiť" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Prihlásený ako: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Odhlásiť" -#: html/login.php msgid "Enter login credentials" msgstr "Zadajte prihlasovacie údaje" -#: html/login.php -msgid "User name or primary email address" -msgstr "Meno používateľa alebo primárna e-mailová adresa" +msgid "Username" +msgstr "Užívateľské meno" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Heslo" -#: html/login.php msgid "Remember me" msgstr "Zapamätaj si ma" -#: html/login.php msgid "Forgot Password" msgstr "Zabudnuté heslo" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "HTTP prihlasovanie je zablokované. Pre prihlásenie prosím %sprepnite na HTTPs%s." +msgstr "" +"HTTP prihlasovanie je zablokované. Pre prihlásenie prosím %sprepnite na HTTPs" +"%s." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Vyhľadávacie kritériá" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Balíčky" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Pri pokuse o získanie podrobností o balíčku nastala chyba." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Povinné pole nie je vyplnené." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Heslá sa nezhodujú. " -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Heslo musí mať aspoň %s znakov." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Neplatný e-mail." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" + msgid "Password Reset" msgstr "Obnova hesla" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Skontrolujte si svoj e-mail pre potvrdzujúci odkaz." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Heslo bolo úspešne obnovené." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Potvrďte vaše meno používateľa alebo primárnu e-mailovú adresu:" +msgid "Confirm your e-mail address:" +msgstr "Potvrďte svoju e-mailovú adresu:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Zadajte nové heslo:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Potvrďte nové heslo:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Pokračuj" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" +"Ak ste zabudli e-mailovú adresu, ktorú ste použili pri registrácii, pošlite " +"prosím správu na %saur-general%s mailing list." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "Zadajte svoju e-mailovú adresu:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Vybrané balíčky neboli vyvlastnené, pozrite potvrdzovacie zaškrtávacie políčko." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." msgstr "" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Nepodarilo sa nájsť balíček, do ktorého sa mali zlúčiť hlasy a komentáre." +msgstr "" +"Nepodarilo sa nájsť balíček, do ktorého sa mali zlúčiť hlasy a komentáre." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Nemožno zlúčiť základňu balíčka so sebou samou." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "Vybrané balíčky neboli odstránené, začiarknite potvrdzujúce políčko." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Vymazanie balíčka" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Vymaž balíček" +#, php-format +msgid "Delete Package: %s" +msgstr "Vymazať balíček: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Použite tento formulár pre vymazanie základne balíčka %s%s%s a nasledovných balíčkov z AUR: " +msgstr "" +"Použite tento formulár pre vymazanie základne balíčka %s%s%s a nasledovných " +"balíčkov z AUR: " -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Vymazanie balíčka je nevratné." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Zaškrtnite políčko pre potvrdenie akcie." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Potvrďte vymazanie balíčka" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Vymazať" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Len dôverovaní užívatelia a vývojári môžu vymazať balíčky." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Vyvlastni balíček" -#: html/pkgdisown.php #, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Použite tento formulár na vyvlastnenie základne balíčka %s%s%s, ktorá zahrňuje nasledujúce balíčky:" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." +msgid "Disown Package: %s" +msgstr "" + +#, php-format +msgid "" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Označením zaškrtávacieho políčka potvrdzujete, že chcete vyvlastniť balíček a presunúť vlastníctvo na %s%s%s." +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Označením zaškrtávacieho políčka potvrdzujete, že chcete vyvlastniť balíček." +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "Potvrďte na vyvlastnenie balíčka" +msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "Vyvlastniť" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Označ komentár" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Označ balíček ako zastaranú verziu" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Použite tento formulár na označenie základne balíčka %s%s%s a nasledujúcich balíčkov ako zastarané verzie:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Tento formulár %sneslúži%s na nahlasovanie chýb. Na to použite komentár k balíčku." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Uveďte nižšie podrobnosti o tom prečo je balíček zastaraný, podľa možnosti pridajte tiež link na oznam k novej verzii alebo nový tarball." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Komentáre" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Označ" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Označiť zastaranú verziu balíčka môžu iba registrovaní užívatelia." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Zlúčenie balíčkov" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Zlúč balíček" +#, php-format +msgid "Merge Package: %s" +msgstr "Zlúčiť balíček: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Použite tento formulár pre zlúčenie základne balíčka %s%s%s do iného balíčka. " +msgstr "" +"Použite tento formulár pre zlúčenie základne balíčka %s%s%s do iného " +"balíčka. " -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Nasledujúce balíčky budú vymazané:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Operácia zlúčenia balíčkov je nevratná." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Zadajte meno balíčka, do ktorého chcete zlúčiť uvedený balíček." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Zlúčiť do:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Potvrďte zlúčenie balíčka" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Zlúčiť" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Len dôverovaní užívatelia a vývojári môžu zlúčiť balíčky." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Odoslať žiadosť" +msgid "File Request" +msgstr "Vyplniť žiadosť" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "Zatvoriť žiadosť" +msgstr "Zatvorit žiadosť" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Prvý" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Predchádzajúci" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" -msgstr "Ďalej " +msgstr "Ďaľej " -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Posledný" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Žiadosti" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registrovať" +msgid "Trusted User" +msgstr "Dôverovaný užívateľ (TU)" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Použite tento formulár pre vytvorenie účtu. " - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "revízia: %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Nepodarilo sa načítať údaje o návrhu." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Hlasovanie o tomto návrhu bolo ukončené." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Práve hlasovať majú len dôverovaní užívatelia" -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Nemôžete hlasovať v návrhu o Vás." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "O tomto návrhu ste už hlasovali." -#: html/tu.php msgid "Vote ID not valid." msgstr "ID hlasu nie je platné." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Súčasné hlasy" -#: html/tu.php msgid "Past Votes" msgstr "Minulé hlasy" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Hlasujúci" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Registrácia účtu bolo zablokovaná pre vašu IP adresu, pravdepodobne z dôvodu stálych spamových útokov. Za nepríjemnosť sa ospravedlňujeme." +msgstr "" +"Registrácia účtu bolo zablokovaná pre vašu IP adresu, pravdepodobne z dôvodu " +"stálych spamových útokov. Za nepríjemnosť sa ospravedlňujeme." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Chýba ID užívateľa" -#: lib/acctfuncs.inc.php msgid "The username is invalid." -msgstr "Užívateľské meno je neplatné." +msgstr "Užívateľké meno je neplatné." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Musí mať dĺžku medzi %s a %s znakmi" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Začínať a končiť s písmenom alebo číslom" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Môže obsahovať len jednu bodku, podčiarkovník alebo pomlčku." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "E-mailová adresa nie je platná." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "Záložná e-mailová adresa nie je platná." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "PGP otlačok kľúča je neplatný." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "Verejný SSH kľúč nie je platný." +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Nepodarilo sa rozšíriť práva účtu." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Jazyk nie je momentálne podporovaný." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "Užívateľské meno %s%s%s sa už používa." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "Adresa %s%s%s sa už používa." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "Verejný SSH kľúč %s%s%s sa už používa." - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." msgstr "" -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Chyba pri vytváraní účtu, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "Účer %s%s%s bol úspešne vytvorený." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Obnovovacie heslo vám bolo zaslané na vašu e-mailovú adresu." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Kliknite na Prihlásenie pre použitie svojho účtu." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Vitajte na %s! Pre zadanie prvotného hesla pre nový účet, kliknite prosím na " +"link nižšie. Ak link nefunguje, skúste ho skopírovať a vložiť do vašeho " +"prehliadača." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "Obnovovacie heslo vám bolo zaslané na vašu e-mailovú adresu." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Žiadne zmeny neboli vykonané na účte %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "Účet %s%s%s bol úspešne zmenený." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Prihlasovací formulár je v súčasnosti zablokovaný pre vašu IP adresu, pravdepodobne z dôvodu stálych spamových útokov. Za nepríjemnosť sa ospravedlňujeme." +msgstr "" +"Prihlasovací formulár je v súčasnosti zablokovaný pre vašu IP adresu, " +"pravdepodobne z dôvodu stálych spamových útokov. Za nepríjemnosť sa " +"ospravedlňujeme." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Účet bol pozastavený" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Vaše heslo bolo obnovené. Ak ste si práve vytvorili nový účet, použite prosím link z potvrdzovacieho emailu na nastavenie prvotného hesla. Inak prosím zašlite požiadavku na obnovenie hesla na stránku %sObnova hesla%s." +msgstr "" +"Vaše heslo bolo obnovené. Ak ste si práve vytvorili nový účet, použite " +"prosím link z potvrdzovacieho emailu na nastavenie prvotného hesla. Inak " +"prosím zašlite požiadavku na obnovenie hesla na stránku %sObnova hesla%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Nesprávne užívateľské meno alebo heslo." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Pri vytváraní užívateľského sedenia sa vyskytla chyba." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Neplatný email a kombinácia obnovovacích znakov." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Žiadny" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Pozri informácie o účte pre %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Chyba ID alebo meno základne balíčka." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Nemáte oprávnenie na editovanie tohoto komentára." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Komentár neexistuje." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Komentár nemôže byť prázdny." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Komentár bol pridaný." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Musíte byť prihlásený ak chcete editovať informácie o balíčku." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Chýba ID komentára." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Nemôže byť pripnutých viac ako 5 komentárov." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Nemáte oprávnenie na pripnutie tohoto komentára." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Nemáte oprávnenie na odopnutie tohoto komentára." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Komentár bol pripnutý." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Komentár bol odopnutý." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Chyba pri získavaní informácií o balíčku." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Informácie o balíčku sa nepodarilo nájsť." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Musíte byť prihlásený ak chcete označovať balíčky." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Nebol vybraný žiadny balíček na označenie." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Vybrané balíčky neboli označené, zanechajte prosím komentár." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Vybrané balíčky boli označené ako zastarané." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Musíte byť prihlásený ak chcete odznačiť balíčky." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Nebol vybraný žiadny balíček na odznačenie." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Vybrané balíčky boli odznačené." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Nemáte práve vymazať balíčky." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Nebol vybraný žiadny balíček na vymazanie." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Vybrané balíčky boli vymazané." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Musíte byť prihlásený ak chcete adoptovať balíčky." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Musíte byť prihlásený ak chcete vyvlastniť balíčky." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Nebol vybraný žiadny balíček na adopciu." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Neoznačili ste žiadne balíčky na vyvlastnenie." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Vybrané balíčky boli adoptované." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Vybrané balíčky boli vyvlastnené." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Musíte byť prihlásený ak chcete hlasovať za balíčky." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Musíte byť prihlásený ak chcete odobrať hlas balíčkom." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Nebol vybraný žiadny balíček pre hlasovanie." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Váš hlas bol odobratý z vyznačených balíčkov." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Váš hlas bol pridaný vyznačeným balíčkom." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Pridanie do zoznamu upozornení bolo neúspešné." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Boli ste pridaný na notifikačný zoznam komentárov pre %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Boli ste odobraný z notifikačného zoznamu komentárov pre %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Nemáte práva na obnovenie tohto komentára." +msgid "You must be logged in before you can edit package information." +msgstr "Musíte byť prihlásený ak chcete editovať informácie o balíčku." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Komentár bol obnovený." +msgid "Missing comment ID." +msgstr "Chýba ID komentára." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Nemáte práva na vymazanie tohto komentára." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Komentár bol vymazaný." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Komentár bol editovaný." +msgid "You are not allowed to delete this comment." +msgstr "Nemáte práva na vymazanie tohto komentára." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Nemáte oprávnenie na editovanie kľúčových slov tejto základne balíčka." +msgid "Missing category ID." +msgstr "Chýba ID kategórie." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Kľúčové slová základne balíčka boli aktualizované." +msgid "Invalid category ID." +msgstr "Neplatné ID kategórie." + +msgid "You are not allowed to change this package category." +msgstr "Na zmenu kategórie balíčka nemáte oprávnenie." + +msgid "Package category changed." +msgstr "Kategória balíčka bola zmenená." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Nie ste oprávnený manažovať spolupracovníkov tejto základne balíčka." +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "Neplatné užívateľské meno: %s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "Spolupracovníci základne balíčka boli aktualizovaní." +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Pozri detaily balíčky pre" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "vyžaduje %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "Musíte byť prihlásený ak chcete posielať žiadosti o balíčkoch." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Neplatné meno: povolené sú iba malé písmená." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "Pole s komentárom nemôže byť prázdne." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Neplatný typ žiadosti." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Požiadavka bola úspešne pridaná." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Neplatný dôvod." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "Len Dôverovaní Užívatelia (TU) a vývojári môžu zatvárať žiadosti." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Žiadosť bola úspešne uzavretá." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "Tento formulár môžete použiť na trvalé vymazanie AUR účtu %s." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sUPOZORNENIE%s: Túto akciu nemožno vrátiť." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Potvrdiť vymazanie" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Užívateľské meno" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Typ účtu" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Užívateľ" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Vývojár" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Dôverovaný užívateľ & Vývojár" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "E-mailová adresa" -#: template/account_details.php -msgid "hidden" -msgstr "skrytý" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Skutočné meno" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Domovská stránka" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC prezývka" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "PGP otlačok kľúča" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" -msgstr "Stav" +msgstr "Status" -#: template/account_details.php msgid "Inactive since" msgstr "Neaktívny od" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Aktívny" -#: template/account_details.php -msgid "Registration date:" -msgstr "Dátum registrácie" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "neznámy" - -#: template/account_details.php msgid "Last Login" msgstr "Posledné prihlásenie" -#: template/account_details.php msgid "Never" msgstr "Nikdy" -#: template/account_details.php msgid "View this user's packages" msgstr "Pozrieť balíčky tohto užívateľa" -#: template/account_details.php msgid "Edit this user's account" msgstr "Editovať účet tohto užívateľa" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Kliknite %ssem%s ak chcete natrvalo vymazať tento účet." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Kliknite %ssem%s pre informácie o užívateľovi." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "povinný" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Normálny užívateľ" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Dôverovaný užívateľ (TU)" + msgid "Account Suspended" msgstr "Účet bol pozastavený" -#: template/account_edit_form.php msgid "Inactive" msgstr "Neaktívny" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Overte prosím, že ste emailovú adresu zadali správne, inak budete vymknutý." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Skryť emailovú adresu" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Jazyk" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Potvrďte heslo" -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Nasledujúca informácia je dôležitá iba v prípade, že chcete podať balíčky do AUR." +msgid "Language" +msgstr "Jazyk" -#: templates/partials/account_form.html msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "Verejný SSH kľúč" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Nastavenia upozornení" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Upozorni na nové komentáre" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Upozorni na aktualizácie balíčkov" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Upozorni na zmeny vo vlastníctve balíčka" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" msgstr "" -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Aktualizácia" -#: template/account_edit_form.php msgid "Create" msgstr "Vytvoriť" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Reset" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Pre vaše vyhľadávacie kritériá neboli nájdené žiadne výsledky." -#: template/account_search_results.php msgid "Edit Account" msgstr "Editovať účet" -#: template/account_search_results.php msgid "Suspended" msgstr "Pozastavený" -#: template/account_search_results.php msgid "Edit" msgstr "Editovať" -#: template/account_search_results.php msgid "Less" msgstr "Menej" -#: template/account_search_results.php msgid "More" msgstr "Viac" -#: template/account_search_results.php msgid "No more results to display." msgstr "Nie sú ďalšie výsledky na zobrazenie." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Použite tento formulár pre pridanie spolupracovníkov pre %s%s%s (jedno užívateľské meno na riadok):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "Užívatelia" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "Uložiť" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Komentár k označeniu balíčka ako zastaranej verzie: %s" +msgid "My Packages" +msgstr "Moje balíčky" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s bol označený %s%s%s ako zastaraný %s%s%s z nasledujúceho dôvodu:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s nie je označený ako zastarný." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Návrat na detaily" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d aurweb Development Team." - -#: template/header.php msgid " My Account" -msgstr " Môj účet" +msgstr "Môj účet" + +msgid "Register" +msgstr "Registrovať" + +msgid "unknown" +msgstr "neznámy" + +msgid "Package Base Details" +msgstr "Detaily základne balíčka" -#: template/pkgbase_actions.php msgid "Package Actions" msgstr "Akcie balíčka" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Pozrieť PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "Prezrieť zmeny" +msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" -msgstr "Stiahnuť snapshot" +msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Prehľadať wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Označený ako zastaraný (%s)" +msgid "Flagged out-of-date" +msgstr "Označený ako neaktuálny" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Označ balíček ako neaktuálny" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Odznač balíček" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Odober hlas" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Hlasuj za tento balíček" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Vypni upozornenia" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Povoliť upozornenia" +msgid "Notify of new comments" +msgstr "Upozorni na nové komentáre" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "Manažovať spolupracovníkov" +msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d ostávajúcich žiadostí" msgstr[1] "%d ostávajúce žiadosti" msgstr[2] "%d ostávajúcich žiadostí" -msgstr[3] "%d ostávajúcich žiadostí" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Vymaž balíček" + +msgid "Merge Package" +msgstr "Zlúč balíček" + msgid "Adopt Package" msgstr "Adoptuj balíček" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Detaily základne balíčka" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" -msgstr "Git Clone URL" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "len na čítanie" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Kľúčové slová" +msgid "Category" +msgstr "Kategória" + +msgid "Change category" +msgstr "Zmeniť kategóriu" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Prispievateľ" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Pozri informácie o účte pre %s" + msgid "Maintainer" msgstr "Spravovateľ" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Naposledy zabalil" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Hlasy" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularita" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Prvý príspevok" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Posledná aktualizácia" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Editovať komentár k: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Pridať komentár" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" +msgid "Comment has been added." +msgstr "Komentár bol pridaný." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" +msgid "View all comments" +msgstr "Pozrieť všetky komentáre" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Pripnuté komentáre" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Posledné komentáre" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s dal komentár k %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Anonymný komentár k %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "vymazal %s %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "vymazaný %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "editovaný %s %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "editovaný %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Obnoviť komentár" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Vymaž komentár" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Pripnúť komentár" +#, php-format +msgid "Comment by %s" +msgstr "Komentár od %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Odopnúť komentár" +msgid "Anonymous comment" +msgstr "Anonymný komentár" + +msgid "deleted" +msgstr "vymazaný" + +msgid "All comments" +msgstr "Všetky komentáre" -#: template/pkg_details.php msgid "Package Details" msgstr "Detaily balíčka" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Základňa balíčka" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Popis" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Upstream URL" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Navštív web stránku pre" -#: template/pkg_details.php msgid "Licenses" msgstr "Licencie" -#: template/pkg_details.php msgid "Groups" msgstr "Skupiny" -#: template/pkg_details.php msgid "Conflicts" msgstr "Konflikt s" -#: template/pkg_details.php msgid "Provides" msgstr "Poskytuje" -#: template/pkg_details.php msgid "Replaces" msgstr "Nahrádza" -#: template/pkg_details.php msgid "Dependencies" msgstr "Závislosti" -#: template/pkg_details.php msgid "Required by" msgstr "Vyžadovaný" -#: template/pkg_details.php msgid "Sources" msgstr "Zdroje" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Uzavrieť požiadavku: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Použite tento formulár pre zatvorenie požiadavky na základňu balíčka %s%s%s." +msgstr "" +"Použite tento formulár pre zatvorenie požiadavky na základňu balíčka %s%s%s." + +msgid "Note" +msgstr "Poznámka" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Políčko pre komentár možno nechať prázdne. Napriek tomu sa odporúča zanechať komentár pri zamietnutí požiadavky." +msgstr "" +"Políčko pre komentár možno nechať prázdne. Napriek tomu sa odporúča zanechať " +"komentár pri zamietnutí požiadavky." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Dôvod" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Prijatý" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Zamietnutý" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Komentáre" + +#, php-format +msgid "File Request: %s" +msgstr "Vyplniť žiadosť: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Použite tento formulár na vyplnenie požiadavky ohľadom základne balíčka %s%s%s ktorá zahrňuje nasledovné balíčky:" +msgstr "" +"Použite tento formulár na vyplnenie požiadavky ohľadom základne balíčka %s%s" +"%s ktorá zahrňuje nasledovné balíčky:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Typ žiadosti" -#: template/pkgreq_form.php msgid "Deletion" -msgstr "Vymazať" +msgstr "Vymazanie" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Vyvlastniť" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Zlúčiť do" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." -msgstr[0] "Bola nájdená %d požiadavka týkajúc sa balíčka." -msgstr[1] "Boli nájdené %d požiadavky týkajúcich sa balíčkov." -msgstr[2] "Bolo nájdených %d požiadaviek týkajúcich sa balíčkov." -msgstr[3] "Bolo nájdených %d požiadaviek týkajúcich sa balíčkov." +msgstr[0] "Bola nájdená %d požiadavka ohľadom balíčkov." +msgstr[1] "Boli nájdené %d požiadavky ohľadom balíčkov." +msgstr[2] "Bolo nájdených %d požiadaviek ohľadom balíčkov." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Strana %d z %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Balíček" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Vyplnil" -#: template/pkgreq_results.php msgid "Date" msgstr "Dátum" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "ostáva ~%d deň" -msgstr[1] "ostáva ~%d dni" -msgstr[2] "ostáva ~%d dní" -msgstr[3] "ostáva ~%d dní" +msgid "~%d days left" +msgstr "~%d dní ostáva" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "ostáva ~%d hodina" msgstr[1] "ostávajú ~%d hodiny" msgstr[2] "ostáva ~%d hodín" -msgstr[3] "ostáva ~%d hodín" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "ostáva < 1 hodina" -#: template/pkgreq_results.php msgid "Accept" msgstr "Prijať" -#: template/pkgreq_results.php msgid "Locked" msgstr "Uzamknuté" -#: template/pkgreq_results.php msgid "Close" msgstr "Zatvoriť" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Zatvorené" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "meno, popis" -#: template/pkg_search_form.php msgid "Name Only" msgstr "iba meno" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Presné meno" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Presná základňa balíčka" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php msgid "All" msgstr "Všetky" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Označené" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Neoznačené" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Meno" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "Hlasoval" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Naposledy zmenený" +msgid "Age" +msgstr "vek" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Vzostupne" -#: template/pkg_search_form.php msgid "Descending" msgstr "Zostupne" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Zadaj kritériá pre vyhľadávanie" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Ľubovoľné" + msgid "Search by" msgstr "Vyhľadávať podľa" -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "Neaktuálne" +msgid "Keywords" +msgstr "Kľúčové slová" + +msgid "Out of Date" +msgstr "Neaktuálny" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Zotriediť podľa" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Zotriediť" -#: template/pkg_search_form.php msgid "Per page" msgstr "Na stránku" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Choď" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Osirené" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Chyba pri získavaní zoznamu balíčkov." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Žiadne balíčky nezodpovedajú vaším vyhľadávacím kritériám." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "%d nájdených balíčkov." msgstr[1] "%d nájdené balíčky." msgstr[2] "%d nájdených balíčkov." -msgstr[3] "%d nájdených balíčkov." -#: template/pkg_search_results.php msgid "Version" msgstr "Verzia" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Popularita sa počíta ako súčet všetkých hlasov, pričom každý hlas je prenásobený váhovým koeficientom %.2f každý deň od jeho pridania." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Áno" -#: template/pkg_search_results.php msgid "orphan" msgstr "osirelý" -#: template/pkg_search_results.php msgid "Actions" msgstr "Akcie" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Označ ako neaktuálny." + msgid "Unflag Out-of-date" msgstr "Odznač ako neaktuálny" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Adoptuj balíčky" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Vyvlastni balíčky" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Vymaž balíčky" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Potvrď" -#: template/search_accounts_form.php msgid "Any type" msgstr "Ľub. typ" -#: template/search_accounts_form.php msgid "Search" msgstr "Hľadaj" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Štatistika" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Osirelé balíčky" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Balíčky pridané za posledných 7 dní" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Balíčky aktualiz. za uplynulých 7 dní" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Balíčky aktualiz. za posledný rok" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Nikdy neaktualizované balíčky" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Registrovaní užívatelia" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Dôverovaní užívatelia (TU)" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Nedávne aktualizácie" -#: template/stats/updates_table.php -msgid "more" -msgstr "viac" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Moja štatistika" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Nepodporované balíčky" + msgid "Proposal Details" msgstr "Detaily o návrhu" -#: template/tu_details.php msgid "This vote is still running." msgstr "Hlasovanie stále prebieha." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Prispené: %s od %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Koniec" -#: template/tu_details.php msgid "Result" msgstr "Výsledok" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Nie" -#: template/tu_details.php msgid "Abstain" msgstr "Zdržalo sa" -#: template/tu_details.php msgid "Total" msgstr "Celkom" -#: template/tu_details.php msgid "Participation" msgstr "Účasť" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Posledné hlasy od TU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Posledný hlas" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Žiadne výsledky neboli nájdené." -#: template/tu_list.php msgid "Start" msgstr "Začiatok" -#: template/tu_list.php msgid "Back" msgstr "Späť" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Ak si už viac neželáte dostávať upozornenia na tento balíček, prejdite prosím na stránku balíčku [2] a vyberte \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] zlúčil(a) {old} [2] do {new} [3].\n\n-- \nAk si už viac neželáte dostávať upozornenia na tento balíček, prejdite prosím na stránku balíčku [2] a vyberte \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] odstránil(a) {pkgbase} [2].\n\nUpozornenia na tento balíček už viac nebudete dostávať." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "Súvisiace komentáre k žiadosti o uzatvorenie balíčka..." - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "Táto operácia uzavrie všetky súvisiace nevybavené žiadosti balíčkov. Ak %sComments%s vynecháte, použije sa automaticky generovaný komentár." - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/sr.po b/po/sr.po index becffa33..7899e15f 100644 --- a/po/sr.po +++ b/po/sr.po @@ -1,1588 +1,965 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: # Lukas Fleischer , 2011 -# Slobodan Terzić , 2011-2012,2015-2017 +# Slobodan Terzić , 2011-2012,2015 # Slobodan Terzić , 2015 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Slobodan Terzić , 2011-2012,2015-2017\n" -"Language-Team: Serbian (http://app.transifex.com/lfleischer/aurweb/language/sr/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-12 02:57+0000\n" +"Last-Translator: Slobodan Terzić \n" +"Language-Team: Serbian (http://www.transifex.com/projects/p/aur/language/" +"sr/)\n" +"Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: sr\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: html/404.php msgid "Page Not Found" msgstr "Stranica nije nađena" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Stranica koju ste zahtevali ne postoji." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Beleška" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "URL-ovi za Git kloniranje nisu namenjeni za otvaranje u pregledaču." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Da bi klonirali git riznicu %s, pokrenite %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Kliknite %sovde%s da bi se vratili na stranicu o %s." - -#: html/503.php msgid "Service Unavailable" msgstr "Servis nije dostupan" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Ne paničite! Sajt je van mreže usled održavanja. Povratak se očekuje uskoro." +msgstr "" +"Ne paničite! Sajt je van mreže usled održavanja. Povratak se očekuje uskoro." -#: html/account.php msgid "Account" msgstr "Nalog" -#: html/account.php template/header.php msgid "Accounts" msgstr "Nalozi" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Nije vam dozvoljen pristup ovoj oblasti." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Ne mogu da dobavim podatke o izabranom korisniku." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Nemate dozvole za uređivanje ovog naloga." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Ovim obrascem pretražujete postojeće naloge." -#: html/account.php msgid "You must log in to view user information." msgstr "Morate se prijaviti da bi videli podatke o korisniku." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Ovim formularom pravite nalog." + msgid "Add Proposal" msgstr "Dodavanje predloga" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Neispravan token korisničke radnje." -#: html/addvote.php msgid "Username does not exist." msgstr "Korisničko ime ne postoji." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "Predlog za %s već postoji." -#: html/addvote.php msgid "Invalid type." msgstr "Nedozvoljen tip." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Predlog ne može biti prazan." -#: html/addvote.php msgid "New proposal submitted." msgstr "Novi predlog je poslat." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Pošaljite predlog za glasanje." -#: html/addvote.php msgid "Applicant/TU" msgstr "Podnosioc/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(prazno ako je nevažeće)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Vrsta" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Dodavanje TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Uklanjanje TU" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Uklanjanje TU (nedeklarisana neaktivnost)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Dopuna o podzakonskim aktima" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Predlog" -#: html/addvote.php msgid "Submit" msgstr "Slanje" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "Upravljanje koodržavaocima" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Uređivanje komentara" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Komandna tabla" - -#: html/home.php template/header.php msgid "Home" msgstr "Početna" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Moji označeni paketi" - -#: html/home.php -msgid "My Requests" -msgstr "Moji zahtevi" - -#: html/home.php -msgid "My Packages" -msgstr "Moji paketi" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Pretraži pakete koje održavam" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Koodržavani paketi" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Pretraži pakete koje koodržavam" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Dobrodošli u AUR! Molimo pročitajte %sSmernice za korisnike AUR-a%s i " +"%sSmernice za poverljive korinike%s za više informacija." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Priloženi PKGBUILD-ovi %smoraju%s biti u skladu sa %sArčovim standardima pakiranja%s ili će biti obrisani!" +msgstr "" +"Priloženi PKGBUILD-ovi %smoraju%s biti u skladu sa %sArčovim standardima " +"pakiranja%s ili će biti obrisani!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Ne zaboravite da glasate za omiljene pakete!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Neki paketi se dostavljaju u binarnom obliku u riznici [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "Neki paketi se dostavljaju u binarnom obliku u riznici [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "UPOZORENJE" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Paketi u AUR-u su sadržaj koji stvaraju korisnici. Upotrebljavate ih na sopstvenu odgovornost." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Paketi označeni sa [unsupported] su sadržaj koji stvaraju korisnici. " +"Upotrebljavate ih na sopstvenu odgovornost." -#: html/home.php -msgid "Learn more..." -msgstr "Saznajte više..." - -#: html/home.php msgid "Support" msgstr "Podrška" -#: html/home.php msgid "Package Requests" msgstr "Zahtevi za pakete" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Postoje tri vrste zahteva koji mogu biti podneti kroz kućicu %sRadnje nad paketima%s na stranici sa detaljima o paketu:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" +"Postoje tri vrste zahteva koji mogu biti podneti kroz kućicu %sRadnje nad " +"paketima%s na stranici sa detaljima o paketu:" -#: html/home.php msgid "Orphan Request" msgstr "Zahtevi za odricanje" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "zahtev za odricanje od paketa, npr. kada je održavalac neaktivan a paket je predugo označen kao zastareo." +msgstr "" +"zahtev za odricanje od paketa, npr. kada je održavalac neaktivan a paket je " +"predugo označen kao zastareo." -#: html/home.php msgid "Deletion Request" msgstr "Zahtevi za brisanje" -#: html/home.php msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." msgstr "" +"zahtev za brisanje paketa iz Arčove Korisničke Riznice. Ne koristite ovo ako " +"je paket polomljen i može se lako ispraviti. Umesto toga, kontaktirajte " +"održavaoca paketa i podnesite zahtev za odricanje ukoliko je potreban." -#: html/home.php msgid "Merge Request" msgstr "Zahtevi za spajanje" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "zahtev za spajanje paketa sa drugim paketom. Koristi se kada je paketu potrebno novo ime ili ga je potrebno razdeliti ma manje pakete." +msgstr "" +"tahtev za spajanje paketa sa drugim paketom. Koristi se kada je paketu " +"potrebno novo ime ili ga je potrebno razdeliti ma manje pakete." -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Ukoliko želite da diskutujete o zahtevu, možete koristiti dopisnu listu %saur-requests%s. Međutim, molimo da ne koristite tu listu za podnošenje zahteva." +msgstr "" +"Ukoliko želite da diskutujete o zahtevu, možete koristiti dopisnu listu " +"%saur-requests%s. Međutim, molimo da ne koristite tu listu za podnošenje " +"zahteva." -#: html/home.php -msgid "Submitting Packages" -msgstr "Prilaganje paketa" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Za prilaganje paketa u AUR sada se koristi Git preko SSH. Pogledajte sekciju %sPrilaganje paketa%s na stranici o AUR-u na Arčovom wikiju." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Sledeći SSH otisci se koriste za AUR:" - -#: html/home.php msgid "Discussion" msgstr "Diskusija" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" +"Opšta diskusija vezana za Arčovu Korisničku Riznicu (AUR) i strukturu " +"Poverljivih korisnika se vodi na dopisnoj listi %saur-general%s.Za diskusiju " +"o razvoju samog web sučelja AUR-a, pogedajte dopisnu listu %saur-dev%s." -#: html/home.php msgid "Bug Reporting" msgstr "Prijavljivanje grešaka" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" +"Ukoliko nađete grešku u web sučelju AUR-a. molimo da je prijavite na našem " +"%sbubolovcu%s. Bubolovac koristite %sisključivo%s za prjavljivanje grešaka u " +"samom AUR-u. Za prijavu grešaka u samim paketima kontaktirajte održavaoce " +"paketa ili ostavite komentar na odgovarajućoj stranici paketa." -#: html/home.php msgid "Package Search" msgstr "Pretraga paketa" -#: html/index.php msgid "Adopt" msgstr "Usvoji" -#: html/index.php msgid "Vote" msgstr "Daj glas" -#: html/index.php msgid "UnVote" msgstr "Ukloni glas" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" -msgstr "Obaveštenja" +msgstr "Obaveštavaj" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Ne obaveštavaj" -#: html/index.php +msgid "Flag" +msgstr "Označi" + msgid "UnFlag" msgstr "Odznači" -#: html/login.php template/header.php msgid "Login" msgstr "Prijava" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Prijavljeni ste kao: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Odjava" -#: html/login.php msgid "Enter login credentials" msgstr "Unesite podatke za prijavu" -#: html/login.php -msgid "User name or primary email address" -msgstr "" +msgid "Username" +msgstr "Korisničko ime" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Lozinka" -#: html/login.php msgid "Remember me" msgstr "Pamti me" -#: html/login.php msgid "Forgot Password" msgstr "Zaboravljena lozinka" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Prijavljivanje preko HTTP je isključeno. Koristite %sHTTPs%s da bi se prijavili." +msgstr "" +"Prijavljivanje preko HTTP je isključeno. Koristite %sHTTPs%s da bi se " +"prijavili." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Kriterijum pretrage" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Paketi" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Greška pri dobavljanju detalja paketa." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Nedostaje neophodno polje." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Polja lozinke se ne poklapaju." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Lozinka mora imati najmanje %s znaka." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Neispravna e-pošta." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" +"Zahtev za resetovanje lozinke za nalog %s je poslat na adresu e-pošte. " +"Ukoliko želite da resetujete lozinku, ispratite vezu ispod; u suprotnom " +"ignorišite ovu poruku i ništa se neće desiti." + msgid "Password Reset" msgstr "Resetovanje lozinke" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Proverite e-poštu za vezu za potvrđivanje." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Vaša lozinka je uspešno resetovana." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" +msgid "Confirm your e-mail address:" +msgstr "Potvrdite adresu e-pošte:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Unesite novu lozinku:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Potvrdite novu lozinku:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Nastavi" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." msgstr "" +"Ukoliko ste zaboravili registracionu adresu e-pošte, molimo pošaljite poruku " +"na dopisnu listu %saur-general%s." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" +msgid "Enter your e-mail address:" +msgstr "Unesite adresu e-pošte:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Osnove paketa" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." msgstr "Izabrani paketi nisu odreknuti, pogledajte kućicu za potvrdu." -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "Ne mogu da nađem paket kako bih stopio glasove i komentare." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Ne mogu da spojim osnovu paketa sa samom sobom." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "Izabrani paketi nisu obrisani; pogledajte kućicu za potvrđivanje." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Brisanje paketa" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Obriši paket" +#, php-format +msgid "Delete Package: %s" +msgstr "Obriši paket: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Ovim formularom brišete osnovu paketa %s%s%s i sledeće pakete iz AUR-a:" +msgstr "" +"Ovim formularom brišete osnovu paketa %s%s%s i sledeće pakete iz AUR-a:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Brisanje paketa je trajno." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Označite kućicu za potvrdu." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Potvrdite brisanje paketa" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Obriši" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Samo Poverljivi korisnici i Programeri mogu brisati pakete." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Odrekni se paketa" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "Odricanje paketa: %s" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Ovim formularom se odričete osnove paketa %s%s%s i sledećih pripadajučih pakete:" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "" +"Ovim formularom se odričete osnove paketa %s%s%s i sledećih pripadajučih " +"pakete:" -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Označavanjem kućice potvrđujete odricanje prenos vlasništva paketa na %s%s%s." +msgstr "" +"Označavanjem kućice potvrđujete odricanje prenos vlasništva paketa na %s%s%s." -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." msgstr "Označavanjem kućice potvrđujete da želite da se odreknete od paketa." -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "Potvrdite odricanje od paketa" -#: html/pkgdisown.php msgid "Disown" msgstr "Odrekni se" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" +msgid "Only Trusted Users and Developers can disown packages." +msgstr "Samo Poverljivi korisnici i Programeri mogu vršiti odricanje paketa." -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Označi komentar" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Označi paket kao zastareo" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Ovim formularom označavate osnovu paketa %s%s%s i sledeće pakete kao zastarele:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Molimo da ovim formularom %sNE%s prijavljujete greške. Umesto toga koristite komentare o paketu." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Ispod unesite razloge zbog kojih je paket zastareo, poželjno i veze ka objavi novog izdanja ili izvornom kodu nove verzije." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Komentari" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Označi" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Samo registrovani korisnici mogu označavati pakete zastarelim." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Spajanje paketa" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Spoji paket" +#, php-format +msgid "Merge Package: %s" +msgstr "Spajanje paketa: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "Ovim formularom spajate osnovu paketa %s%s%s sa drugim paketom." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Sledeći paketi će biti obrisani:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Kada se jednom spoje, paketi ne mogu više biti razdvojeni." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Unesite ime paketa sa kojim želite da spojite ovaj paket." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Spoji sa:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Potvrdite spajanje" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Spoji" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Samo Poverljivi korisnici i Programeri mogu da spajaju pakete." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" +msgid "File Request" msgstr "Podnesi zahtev" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Zatvori zahtev" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Prva" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Prethodna" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Sledeća" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Zadnja" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Zahtevi" -#: html/register.php template/header.php -msgid "Register" -msgstr "Registracija" +msgid "Trusted User" +msgstr "Poverljivi korisnik" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Ovim formularom pravite nalog." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Uslovi korišćenja" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Sledeći dokumenti su ažurirani. Molimo da ih pažljivo pročitate:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "revizija %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Prihvatam gore navedene uslove." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Ne mogu da dobavim detalje o predlogu." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Glasanje o ovom predlogu je završeno." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Samo poverljivi korisnici mogu da glasaju." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Ne možete glasati za predlog koji se odnosi na vas." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Već ste glasali za ovaj predlog." -#: html/tu.php msgid "Vote ID not valid." msgstr "Neispravan ID glasa." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Trenutno glasova" -#: html/tu.php msgid "Past Votes" msgstr "Prethodni glasovi" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Glasači" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Registrovanje naloga sa vaše IP adrese je onemogućeno, najverovatnije usled napada spama. Oprostite na neprijatnosti." +msgstr "" +"Registrovanje naloga sa vaše IP adrese je onemogućeno, najverovatnije usled " +"napada spama. Oprostite na neprijatnosti." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Nedostaje ID korisnika" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Neispravno korisničko ime." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Mora imati između %s i %s znakova." -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Počnje i završava slovom ili brojem" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Može sadržati samo jedan razmak, podvlaku ili crticu." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "Neispravna adresa e-pošte." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "Domaća stranica je neispravna, molimo navedite puni HTTP(s) URL." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "Otisak PGP ključa nije ispravan." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "Neispravan javni SSH ključ." -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Ne mogu da uvećam dozvole naloga." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Jezik trenutno nije podržan." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Vremenska zona trenutno nije podržana." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "Korisničko ime %s%s%s je već u upotrebi." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "Adresa %s%s%s je već u upotrebi." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "Javni SSH ključ %s%s%s je već u upotrebi." -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Greška pri pravljenju naloga %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "Nalog %s%s%s je uspešno napravljen." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Ključ za resetovanje lozinke je poslat na vašu adresu e-pošte." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Kliknite iznad na vezu Prijava da bi koristili svoj nalog." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Dobrodošli u %s! Da bi postavili početnu lozinku za vaš novi nalog, kliknite " +"na vezu ispod. Ukoliko veza ne radi, probate da je iskopirate u vaš veb " +"pregledač." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "Ključ za resetovanje lozinke je poslat na vašu adresu e-pošte." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Nisu izvršene nikakve izmene naloga %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "Nalog %s%s%s je uspešno izmenjen." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Formular za prijavljivanje je trenutno onemogućen za vašu IP adresu, najverovatnije usled napada spama. Oprostite na neprijatnosti." +msgstr "" +"Formular za prijavljivanje je trenutno onemogućen za vašu IP adresu, " +"najverovatnije usled napada spama. Oprostite na neprijatnosti." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Nalog je suspendovan" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Vaša lozinka je resetovana. Ukoliko ste tek napravili nov nalog, molimo upotrebite vezu iz e-pisma za potvrdu kako bi postavili početnu lozinku. U suprotnom, zatražite resetovajne ključa putem stranice %sResetovanje lozinke%s." +msgstr "" +"Vaša lozinka je resetovana. Ukoliko ste tek napravili nov nalog, molimo " +"upotrebite vezu iz e-pisma za potvrdu kako bi postavili početnu lozinku. U " +"suprotnom, zatražite resetovajne ključa putem stranice %sResetovanje lozinke" +"%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Loše korisničko ime ili lozinka." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Došlo je do greške pri pravljenju korisničke sesije." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Neispravna kombinacija e-pošte i ključa za resetovanje." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Nema" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Prikaži podatke o nalogu za %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Nedostaje ID ili ime baze paketa." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Nemate dozvolu za uređivanje ovog komentara." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Komentar ne postoji." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Komentar ne sme biti prazan." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Komentar je dodat." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Morate se prijaviti da bi ste uređivali podatke o paketu." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Nedostaje ID komentara." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Ne može se izdvojiti više od 5 komentara." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Nemate dozvole za izdvajanje ovog komentara." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Nemate dozvole da odvajanje ovog komentara." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Komentar je izdvojen." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Komentar je odvojen." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Greška pri dobavaljanju podataka o paketu." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Ne mogu naći podatke o paketu." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Morate se prijaviti pre označavanja paketa." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Niste izabrali pakete za označavanje." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Izabrani paketi nisu označeni, molimo unesite komentar." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Izabrani paketi su označeni kao zastareli." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Morate se prijaviti da bi uklonili oznake." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Niste izabrali paket za uklanjanje oznake." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Označenim paketima je uklonjena oznaka." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Nemate dozvole za brisanje paketa." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Niste izabrali pakete za brisanje." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Izbrani paketi su obrisani." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Morate se prijaviti da bi usvojili pakete." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Morate se prijaviti da bi ste se odrekli paketa." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Niste izabrali paketa za usvajanje." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Niste izabrali pakete kojih bi da se odreknete." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Izabrani paketi su usvojeni." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Odrekli ste se izabranog paketa." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Morate se prijaviti da bi glasali za pakete." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Morate se prijaviti da bi uklonili glasove za pakete." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Niste izabrali pakete za koje glasate." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Vaši glasovi su uklonjeni za izabrane paketa." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Dali ste glas izabranim paketima." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Ne mogu da dodam na spisak za obaveštenja." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Dodati ste na spisak za obaveštenja o %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Uklonjeni ste sa spiska obaveštavanja o komentarima za %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Nemate dozvole za povraćaj ovog komentara." +msgid "You must be logged in before you can edit package information." +msgstr "Morate se prijaviti da bi ste uređivali podatke o paketu." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Komentar je povraćen." +msgid "Missing comment ID." +msgstr "Nedostaje ID komentara." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Nije vam dozvoljeno brisanje ovog komentara." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Komentar je obrisan." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Komentar je uređen." +msgid "You are not allowed to delete this comment." +msgstr "Nije vam dozvoljeno brisanje ovog komentara." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Nije vam dozvoljeno da uređujete ključne reči za ovu osnovu paketa." +msgid "Missing category ID." +msgstr "Nedostaje ID kategorije." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Ključne reči baze paketa su ažurirane." +msgid "Invalid category ID." +msgstr "Neispravan ID kategorije." + +msgid "You are not allowed to change this package category." +msgstr "Nemate dozvolu da promenite kategoriju ovog paketa." + +msgid "Package category changed." +msgstr "Kategorija paketa je izmenjena." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "Nije vam dozvvoljeno da upravljate koodržavaocima ove osnove paketa." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "Neispravno korisničko ime: %s" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "Koodržavaoci osnove baze paketa su ažurirani." -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Prikaži detalje paketa za" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "zahteva %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "Morate se prijaviti da bi slali zahteve za pakete." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Neispravno ime: dozvoljena su samo mala slova." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "Polje komentara ne sme biti prazno." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Neispravan tip zahteva" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Zahtev je uspešno dodat." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Neispravan razlog." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "Samo Poverljivi korisnici i programeri mogu zatvarati zahteve." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Zahtev je uspešno zatvoren." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "Ovim možete trajno obrisati nalog %s iz AUR-a." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sUPOZORENJE%s: ova radnja se ne može opozvati" -#: template/account_delete.php msgid "Confirm deletion" msgstr "Potvrda brisanja" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Korisničko ime" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Tip naloga" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Korisnik" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Programer" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Poverljivi korisnik i programer" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Adresa e-pošte" -#: template/account_details.php -msgid "hidden" -msgstr "skrivena" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Pravo ime" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Domaća stranica" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC nadimak" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Otisak PGP ključa" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Status" -#: template/account_details.php msgid "Inactive since" msgstr "Neaktivan od" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Aktivan" -#: template/account_details.php -msgid "Registration date:" -msgstr "Datum registracije:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "nepoznata" - -#: template/account_details.php msgid "Last Login" msgstr "Poslednje prijavljivanje" -#: template/account_details.php msgid "Never" msgstr "Nikad" -#: template/account_details.php msgid "View this user's packages" msgstr "Pregledaj korisnikove pakete" -#: template/account_details.php msgid "Edit this user's account" msgstr "Uređivanje naloga ovog korisnika" -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Kliknite %sovde%s ako želite trajno brisanje ovog naloga." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Kliknite %sovde%s za podatke o korisniku." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php msgid "required" msgstr "neophodno" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Vaše korisničko ime kojim se prijavljujete. Vidljivo je u javnosti, čak i ako je vaš nalog neaktivan." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Običan korisnik" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Poverljivi korisnik" + msgid "Account Suspended" msgstr "Nalog je suspendovan" -#: template/account_edit_form.php msgid "Inactive" msgstr "Neaktivan" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Proverite da li ste ispravno uneli adresu e-pošte, inače će vam pristup biti odbijen." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Skrij adresu e-pošte" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "Jezik" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Vremenska zona" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Ponovo unesite lozinku" -#: template/account_edit_form.php +msgid "Language" +msgstr "Jezik" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Sledeće informacije su neophodne ako želite da prilažete pakete u Arčovu korisničku riznicu." - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" +"Sledeće informacije su neophodne ako želite da prilažete pakete u Arčovu " +"korisničku riznicu." -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "Javni SSH ključ" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Postavke obaveštenja" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Obavesti o novim komentarima" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Obavesti o nadogradnjama paketa" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Obavesti o promenama vlasništva" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Ažuriraj" -#: template/account_edit_form.php msgid "Create" msgstr "Napravi" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Resetuj" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Nema rezultata koji se poklapaju sa kriterijumom pretrage." -#: template/account_search_results.php msgid "Edit Account" msgstr "Uredi nalog" -#: template/account_search_results.php msgid "Suspended" msgstr "Suspendovan" -#: template/account_search_results.php msgid "Edit" msgstr "Uredi" -#: template/account_search_results.php msgid "Less" msgstr "Manje" -#: template/account_search_results.php msgid "More" msgstr "Više" -#: template/account_search_results.php msgid "No more results to display." msgstr "Nema daljih rezultata." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "Upravljanje koodržavaocima: %s" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Ovim formularom dodajete koodržavaoce za %s%s%s (jedno korisničko ime po liniji):" +msgstr "" +"Ovim formularom dodajete koodržavaoce za %s%s%s (jedno korisničko ime po " +"liniji):" -#: template/comaintainers_form.php msgid "Users" msgstr "Korisnici" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "Sačuvaj" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Komentar o oznaci zastarelosti: %s" +msgid "My Packages" +msgstr "Moji paketi" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s označi %s%s%s kao zastareo %s%s%s iz sledećeg razloga:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s nije označen kao zastareo." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Nazad na detalje" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d aurweb Development Team." - -#: template/header.php msgid " My Account" msgstr "Moj nalog" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Registracija" + +msgid "unknown" +msgstr "nepoznata" + +msgid "Package Base Details" +msgstr "Podaci o bazi paketa" + msgid "Package Actions" msgstr "Radnje nad paketom" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Prikaži PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "Prikaz izmena" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "Preuzimanje snimka" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Pretraži wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Označen kao zastareo (%s)" +msgid "Flagged out-of-date" +msgstr "Označen kao zastareo" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Označi kao zastareo" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Odznači paket" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Ukloni glas" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Glasajte za paket" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Ugasi obaveštenja" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Uključi obaveštenja" +msgid "Notify of new comments" +msgstr "Obavesti o novim komentarima" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" msgstr "Upravljanje koodržavaocima" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" @@ -1590,274 +967,167 @@ msgstr[0] "%d zahtev na čekanju" msgstr[1] "%d zahteva na čekanju" msgstr[2] "%d zahteva na čekanju" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Obriši paket" + +msgid "Merge Package" +msgstr "Spoji paket" + msgid "Adopt Package" msgstr "Usvoji paket" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Podaci o bazi paketa" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "URL za git kloniranje" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "samo za čitanje" +msgid "Category" +msgstr "Kategorija" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" +msgid "Change category" +msgstr "Promeni kategoriju" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Ključne reči" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Pošiljalac" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Prikaži podatke o nalogu za %s" + msgid "Maintainer" msgstr "Održavalac" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Poslednji paketar" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" -msgstr "Glasovi" +msgstr "Glasova" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Popularnost" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Prvi put priloženo" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Poslednje ažuriranje" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Uređivanje komentara za: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Dodaj komentar" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" +msgid "Comment has been added." +msgstr "Komentar je dodat." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" +msgid "View all comments" +msgstr "Prikaži sve komentare" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Izdvojeni komentari" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Poslednji komentari" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s postavi komentar %s u" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Anoniman komentar za %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "%s obrisa %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "obrisan %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "%s izmeni %s " - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "izmenjen %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Povraćeni komentar" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Obriši komentar" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Izdvoji komentar" +#, php-format +msgid "Comment by %s" +msgstr "Komentar od %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Odvoji komentar" +msgid "Anonymous comment" +msgstr "Anoniman komentar" + +msgid "deleted" +msgstr "obrisan" + +msgid "All comments" +msgstr "Svi komentari" -#: template/pkg_details.php msgid "Package Details" msgstr "Podaci o paketu" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Osnova paketa" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Opis" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Uzvodni URL" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Poseti sajt za" -#: template/pkg_details.php msgid "Licenses" msgstr "Licence" -#: template/pkg_details.php msgid "Groups" msgstr "Grupe" -#: template/pkg_details.php msgid "Conflicts" msgstr "Sukobi" -#: template/pkg_details.php msgid "Provides" msgstr "Dostavlja" -#: template/pkg_details.php msgid "Replaces" msgstr "Smenjuje" -#: template/pkg_details.php msgid "Dependencies" msgstr "Zavisnosti" -#: template/pkg_details.php msgid "Required by" msgstr "Zahteva ga" -#: template/pkg_details.php msgid "Sources" msgstr "Izvori" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Zatvaranje zahteva: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "Ovim formularom zatvarate zahteve za osnovu paketa %s%s%s." -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "Beleška" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Polje komentara može ostati prazno. Međutim, preporučujemo da uvek dodate komentar pri odbijanju zahteva." +msgstr "" +"Polje komentara može ostati prazno. Međutim, preporučujemo da uvek dodate " +"komentar pri odbijanju zahteva." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Razlog" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Prihvaćeno" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Odbijeno" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Komentari" + +#, php-format +msgid "File Request: %s" +msgstr "Slanje zahteva: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Ovim formularom pošaljite zahtev vezan za osnovu paketa %s%s%s koja sadrži sledeće pakete:" +msgstr "" +"Ovim formularom pošaljite zahtev vezan za osnovu paketa %s%s%s koja sadrži " +"sledeće pakete:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Tip zahteva" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Brisanje" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Siročić" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Stopi sa" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Nema zahteva koji odgovaraju kriterijumu pretrage." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." @@ -1865,32 +1135,23 @@ msgstr[0] "%d zahtev za paket." msgstr[1] "%d zahteva za paket." msgstr[2] "%d zahteva za paket." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Stranica %d od %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Paket" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Posla" -#: template/pkgreq_results.php msgid "Date" msgstr "Datum" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "Preostaje još ~%d dan" -msgstr[1] "Preostaje još ~%d dana" -msgstr[2] "Preostaje još ~%d dana" +msgid "~%d days left" +msgstr "Preostalo dana: ~%d" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" @@ -1898,128 +1159,96 @@ msgstr[0] "Preostao ~%d čas" msgstr[1] "Preostala ~%d časa" msgstr[2] "Preostalo ~%d časova" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "<1 sata preostalo" -#: template/pkgreq_results.php msgid "Accept" msgstr "Prihvati" -#: template/pkgreq_results.php msgid "Locked" msgstr "Zaključano" -#: template/pkgreq_results.php msgid "Close" msgstr "Zatvori" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Na čekanju" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Zatvoreno" -#: template/pkg_search_form.php msgid "Name, Description" -msgstr "Ime, opis" +msgstr "ime, opis" -#: template/pkg_search_form.php msgid "Name Only" -msgstr "Samo ime" +msgstr "samo ime" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Tačno ime" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Tačna osnova paketa" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Koodržavalac" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Održavalac, koodržavalac" - -#: template/pkg_search_form.php msgid "All" msgstr "svi" -#: template/pkg_search_form.php msgid "Flagged" msgstr "označeni" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "neoznačeni" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Ime" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "Popularnost" + msgid "Voted" msgstr "Dat glas" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Poslednja izmena" +msgid "Age" +msgstr "Starost" -#: template/pkg_search_form.php msgid "Ascending" msgstr "rastući" -#: template/pkg_search_form.php msgid "Descending" msgstr "opadajući" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Unesite kriterijum pretrage" -#: template/pkg_search_form.php +msgid "Any" +msgstr "bilo koja" + msgid "Search by" msgstr "Traži se" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Ključne reči" + msgid "Out of Date" msgstr "Zastareli paketi" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Složi prema" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Način ređanja" -#: template/pkg_search_form.php msgid "Per page" msgstr "Po stranici" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Idi" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Siročići" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Greška pri pruzimanju spiska paketa." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Nijedan paket ne odgovara kriterijumu pretrage." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." @@ -2027,356 +1256,114 @@ msgstr[0] "Nađen %d paket." msgstr[1] "Nađena %d paketa." msgstr[2] "Nađeno %d paketa." -#: template/pkg_search_results.php msgid "Version" msgstr "Verzija" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Popularnost se izračunava kao suma svih glasova, gde svaki glas ima teži %.2f po danu od kada je dat." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Da" -#: template/pkg_search_results.php msgid "orphan" msgstr "sirčoić" -#: template/pkg_search_results.php msgid "Actions" msgstr "Radnje" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Označi kao zastareo" + msgid "Unflag Out-of-date" msgstr "Ukloni oznaku zastarelosti" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Usvoji paket" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Odrekni se paketa" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Obriši pakete" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Potvrdi" -#: template/search_accounts_form.php msgid "Any type" msgstr "Bilo koji tip" -#: template/search_accounts_form.php msgid "Search" msgstr "Pretraži" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Statistika" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Paketa siročića" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Paketa dodato u zadnjih 7 dana" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Paketa ažurirano u zadnjih 7 dana" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Paketa ažurirano prethodne godine" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Paketa koji nikad nisu ažurirani" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Registrovanih korisnika" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Poverljivih korisnika" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Nedavno ažurirano" -#: template/stats/updates_table.php -msgid "more" -msgstr "više" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Moja statistika" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Paketa u [unsupported]" + msgid "Proposal Details" msgstr "Detalji predloga" -#: template/tu_details.php msgid "This vote is still running." msgstr "Glasanje u toku." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Priloženo: %s od %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Ističe" -#: template/tu_details.php msgid "Result" msgstr "Rezultat" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Ne" -#: template/tu_details.php msgid "Abstain" msgstr "Uzdržan" -#: template/tu_details.php msgid "Total" msgstr "Ukupno" -#: template/tu_details.php msgid "Participation" msgstr "Učešće" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Poslednji glasovi od TU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Poslednji glas" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Nema rezultata." -#: template/tu_list.php msgid "Start" msgstr "Pokrenut" -#: template/tu_list.php msgid "Back" msgstr "Nazad" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/sr_RS.po b/po/sr_RS.po deleted file mode 100644 index cfe5b5d3..00000000 --- a/po/sr_RS.po +++ /dev/null @@ -1,2380 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -# Nikola Stojković , 2013 -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Nikola Stojković , 2013\n" -"Language-Team: Serbian (Serbia) (http://app.transifex.com/lfleischer/aurweb/language/sr_RS/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: sr_RS\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "Почетна" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "Не заборави да гласаш за омиљене пакете!" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "Критеријум за претрагу" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "Пакети" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/sv_SE.po b/po/sv_SE.po deleted file mode 100644 index 651b8bfb..00000000 --- a/po/sv_SE.po +++ /dev/null @@ -1,2380 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -# Johannes Löthberg , 2015-2016 -# Kevin Morris , 2022 -# Kim Svensson , 2011 -# Kim Svensson , 2012 -# Luna Jernberg , 2021-2023 -# Robin Björnsvik , 2014-2015 -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Luna Jernberg , 2021-2023\n" -"Language-Team: Swedish (Sweden) (http://app.transifex.com/lfleischer/aurweb/language/sv_SE/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: sv_SE\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "Sidan kunde inte hittas" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "Tyvärr, sidan du försöker nå existerar inte." - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Notera" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "git clone URLs är inte avsedda att öppnas i en webbläsare." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "För att klona Git-förrådet för %s, kör %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Klicka %shär%s för att återgå till %sdetaljsidan." - -#: html/503.php -msgid "Service Unavailable" -msgstr "Tjänsten är otillgänglig" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Få inte panik! Den här sidan är nere för underhåll. Vi kommer tillbaka snart." - -#: html/account.php -msgid "Account" -msgstr "Konto" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "Konton" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "Du har inte åtkomst till den här sidan." - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "Kunde inte nå information för den önskade användaren." - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "Du har inte tillåtelse att ändra det här kontot." - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Ogiltigt lösenord." - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "Använd det här fältet för söka efter existerande konton." - -#: html/account.php -msgid "You must log in to view user information." -msgstr "Du måste var inloggad för att se användarinformation." - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "Lägg till förslag" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "Ogiltigt värde för användareåtgärd." - -#: html/addvote.php -msgid "Username does not exist." -msgstr "Användarnamnet finns inte." - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "%s har redan förslag som är aktivt." - -#: html/addvote.php -msgid "Invalid type." -msgstr "Ogiltig typ." - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "Förslag kan inte vara tomt." - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "Nytt förslag har skickats." - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "Skicka ett förslag att rösta på." - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "Sökande/TU" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "(tom ifall irrelevant)" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "Typ" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "Tillägg av en paketunderhållare" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "Borttagning av en paketunderhållare" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "Borttagning av en paketunderhållare (odeklarerad inaktivitet)" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "Andringar av stadgar" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "Förslag" - -#: html/addvote.php -msgid "Submit" -msgstr "Skicka" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "Hantera sam-ansvariga" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Redigera kommentar" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Informationspanel" - -#: html/home.php template/header.php -msgid "Home" -msgstr "Hem" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "Mina flaggade paket" - -#: html/home.php -msgid "My Requests" -msgstr "Mina Förfrågningar" - -#: html/home.php -msgid "My Packages" -msgstr "Mina paket" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Sök efter paket jag underhåller" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Sam-ansvariga paket" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Sök efter paket jag är sam-ansvarig för" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "Välkommen till AUR! Vänligen läs %sAUR användarriktlinjer%s för mer information och %sAUR Inlämningsriktlinjer%s om du vill bidra med en PKGBUILD." - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "Bidragna PKGBUILDer %småste%s följa %sArch Packaging Standards%s, annars kommer de bli borttagna!" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "Kom ihåg att rösta på dina favorit paket!" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Några paket kan vara tillhandahållna som binära filer i [extra]." - -#: html/home.php -msgid "DISCLAIMER" -msgstr "ANSVARSFRISKRIVNING" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "AUR paket är användarproducerat innehåll. All användning av de tillhandahållna filerna görs på egen risk." - -#: html/home.php -msgid "Learn more..." -msgstr "Lär dig mer..." - -#: html/home.php -msgid "Support" -msgstr "Hjälp" - -#: html/home.php -msgid "Package Requests" -msgstr "Paket förfrågningar" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Det finns tre typer av förfrågningar som kan öppnas i boxen %sPaket hanteringar%s på paket detaljer sidan:" - -#: html/home.php -msgid "Orphan Request" -msgstr "Härrelösnings förfrågning" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "Öppna en förfrågan om att göra ett paket herrelöst, till exempel när den ansvarige är inaktiv och paketet har varit flaggat utdaterat en lång tid." - -#: html/home.php -msgid "Deletion Request" -msgstr "Raderings förfrågan" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "Begär att ett paket tas bort från Arch User Repository. Vänligen använd inte detta om ett paket är trasigt och lätt kan fixas. Kontakta istället underhållaren och lämna in begäran om ett föräldralöst paket vid behov." - -#: html/home.php -msgid "Merge Request" -msgstr "Ihopslags förfrågning" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "Begär att ett paket ska bli ihopslaget med ett annat. Kan användas när ett paket behöver bli omdöpt, eller ersatt av ett delat paket." - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "Om du vill diskutera en förfrågning kan du använda %saur-requests%s maillistan. Men snälla använd inte den listan för att öppna nya förfrågningar." - -#: html/home.php -msgid "Submitting Packages" -msgstr "Ladda up paket" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Git över SSH används nu för att ladda up paket till AUR. Se %sSubmitting packages%s sectionen av Arch User Repository artikeln på ArchWiki för mer information." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "De följande SSH fingeravtryck används för AUR:" - -#: html/home.php -msgid "Discussion" -msgstr "Diskussion" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "Allmän diskussion om Arch User Repository (AUR) och Paketunderhållar-strukturen äger rum på %saur-general%s. För diskussion som rör utvecklingen om AUR-webbgränssnittet, använd %saur-dev%s mailinglistan." - -#: html/home.php -msgid "Bug Reporting" -msgstr "Bugg Rapportering" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "Om du hittar ett fel i AUR-webbgränssnittet, vänligen fyll i en felrapport på våran %sfelspårare%s. Använd felspåraren för att rapportera buggar i AUR-webbgränssnittet %sendast%s. För att rapportera paketbuggar kontakta underhållaren eller lämna en kommentar på lämplig paketsida." - -#: html/home.php -msgid "Package Search" -msgstr "Sök Paket" - -#: html/index.php -msgid "Adopt" -msgstr "Adoptera" - -#: html/index.php -msgid "Vote" -msgstr "Rösta" - -#: html/index.php -msgid "UnVote" -msgstr "Ångra Röst" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "Meddela" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "Meddela inte" - -#: html/index.php -msgid "UnFlag" -msgstr "Flagga inte" - -#: html/login.php template/header.php -msgid "Login" -msgstr "Logga in" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "Inloggad som: %s" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "Logga ut" - -#: html/login.php -msgid "Enter login credentials" -msgstr "Ange inloggningsuppgifter" - -#: html/login.php -msgid "User name or primary email address" -msgstr "Användarnamn eller primär epostadress" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "Lösenord" - -#: html/login.php -msgid "Remember me" -msgstr "Kom ihåg mig" - -#: html/login.php -msgid "Forgot Password" -msgstr "Glömt lösenordet" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "HTTP inloggning ej tillgänglig. Byt %sswtich till HTTPS%s om du vill logga in." - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "Sökkriterier" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "Paket" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "Fel vid hämtning av paketdetaljer." - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "Ett nödvändigt fält saknas." - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "Lösenorden stämmer inte överens." - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "Ditt lösenord måste vara åtminstone %s karaktärer." - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "Ogiltig e-postadress." - -#: html/passreset.php -msgid "Password Reset" -msgstr "Återställ Lösenord" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "Kolla din e-mailadress efter en bekräftelselänk." - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "Återställningen av ditt lösenord lyckades." - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Bekräfta ditt användarnamn eller primär e-postadress:" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "Ange ett nytt lösenord:" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "Bekfräfta ditt nya lösenord:" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "Fortsätt" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Om du har glömt användarnamnet och den primära e-postadress som du använde för att registrera dig, vänligen skicka ett meddelande till %saur-general%s e-postlistan." - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Ange ditt användarnamn eller primär e-postadress:" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Paket baser" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "De valda paketen har inte gjorts herrelösa, kryssa i konfirmationsrutan." - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "De valda paketen har inte adopteras, markera kryssrutan för bekräftelse." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "Kan inte hitta paket att slå ihop röster och kommentarer i." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "Kan inte slå ihop en paket bas med sig självt." - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "De valda paketen har inte blivit raderade, kryssa i konfirmationsrutan." - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "Paket radering" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Radera paket" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "Använd det här formuläret för att radera paket basen %s%s%s och de följande paketen från AUR:" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "Radering av ett paket är permanent." - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "Kryssa i kryssrutan för att konfirmera handlingen." - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "Konfirmera paket radering" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "Radera" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "Endast paketunderhållare och utvecklare kan ta bort paket." - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "Gör paket herrelös" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Använd det här formuläret för att göra paket basen %s%s%s och de följande paketen härrelösa i AUR:" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "Genom att markera kryssrutan bekräftar du att du inte längre vill vara sam-ansvarig för paket." - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "Genom att kryssa i kryssrutan konfirmerar du att du vill överföra ansvaret för detta paket till %s%s%s." - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Genom att kryssa i kryssrutan konfirmerar du att du vill göra paketet herrelöst." - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "Konfirmera för att göra paketet herrelöst" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "Gör herrelös" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "Endast Paketunderhållare och utvecklare kan göra paket herrelösa" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Flagga Kommentar" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Flagga Paketet Gammalt" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "Detta verkar vara ett VCS-paket. Flagga den %sinte%s som inaktuell om paketversionen i AUR inte matchar den mest senaste commit. Flaggning av detta paket bör endast göras om källkoden har flyttats eller ändringar i PKGBUILD krävs på grund av de senaste uppströmsändringarna." - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Använd det här formuläret för att flagga paketbasen %s%s%s och de följande paketen som gammla: " - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Var snäll och använd %sinte%s detta formulär för att raportera buggar. Andvänd paketkommentarerna istället." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Skriv in detaljer om varför paketet är gammalt nedan, helst med länkar till den nya releasen." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Kommentarer" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Flagga" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Bara registrerade användare kan flagga paket som gammla." - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "Paket ihopsammanslagning" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Slå samman paket" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Använd det här formuläret för att slå ihop paket basen %s%s%s med ett annat paket." - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "De följande paketen kommer att bli raderade:" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "När paketet har blivit ihopsammanslaget kan det inte ogöras." - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "Skriv in paket namnet du viss slå ihop detta paket med." - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "Slå ihop in i:" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "Konfirmera ihopslagning" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "Slå ihop" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "Endast paketunderhållare och utvecklare kan slå samman paket." - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Skicka In Förfrågning" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "Stäng förfrågning" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "Första" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "Förra" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "Nästa" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "Sista" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "Förfrågningar" - -#: html/register.php template/header.php -msgid "Register" -msgstr "Registrera" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "Använd det här fältet för att skapa ett konto." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Användarvillkor" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Följande dokument har uppdaterats. Vänligen granska dem noggrant:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "revision %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Jag accepterar villkoren ovan." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "Paketunderhållare" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "Kunde inte hämta förslagsdetaljer." - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "Röstning för detta förslag är stängt." - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "Endast paketunderhållare tillåts rösta." - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "Du kan inte rösta för ett förslag om dig." - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "Du har redan röstat för detta förslag." - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "Omröstnings IDt är inte giltigt" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "Nuvaranda omröstningar" - -#: html/tu.php -msgid "Past Votes" -msgstr "Tidigare omröstningar" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "Röstare" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "Konto registrering har blivit avstängt för din IP, troligen på grund av spam attacker. Vi ber om ursäkt för besväret." - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "Användar ID fattas" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "Användarnamnet är ogiltigt." - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "Det måste vara mellan %s och %s karaktärer långt" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "Starta och sluta med en bokstav eller nummer" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "Kan bara innehålla en punkt, understreck, eller bindestreck." - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Vänligen bekräfta ditt nya lösenord." - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "Email adressen är ogiltigt." - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "Backup-e-postadressen är ogiltig." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "Hemsidan är ogiltig, ange den fullständiga HTTP(s) URL." - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "Fingeravtrycket för PGP nyckeln är ogiltigt." - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "Den publika SSH nyckeln är ogiltig." - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "Kan inte öka kontots tillgång." - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "Språket stöds för nuvarande inte." - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Tidszon stöds för nuvarande inte." - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "Användarnamnet %s%s%s används redan." - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "Addressen %s%s%s används redan." - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "Den publika SSH nyckeln %s%s%s används redan." - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "CAPTCHA saknas." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "Denna CAPTCHA har löpt ut. Var god försök igen." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "Det angivna CAPTCHA-svaret är ogiltigt." - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "Fel vid skapande av kontot %s%s%s" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "Kontot %s%s%s har skapats framgångsrikt." - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "En lösenordsåterställnings nyckel har skickats till din e-mail adress." - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "Klicka på Inloggning länken ovan för att använda ditt konto." - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "Inga ändringar gjordes till kontot, %s%s%s." - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "Kontot %s%s%s har blivit modifierat framgångsrikt." - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "Inloggnings formuläret är för närvarande avstängt för din IP adress, troligen på grund av spam attacker. Vi ber om ursäkt för besväret." - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "Konto avstängt" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "Du har inte behörighet att stänga av konton." - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "Ditt lösenord har blivit återställt. Om du precis skapade ett nytt konto, var god och följ länken i konfirmations mailet för att sätta ett första lösenord. Annars, var god och skicka in en förfrågan om en återställningsnyckel på %sLösenords Återställning%s sidan" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "Fel användarnamn eller lösenord." - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "Ett fel inträffade vid genererandet av en användar session." - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "Ogiltig e-mail och återställningsnyckel kombination." - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "Ingen" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Visa konto information för %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Paketbas ID eller paketbasnamn saknas." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Du har inte rättigheter till att redigera denna kommentar." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Kommentaren existerar inte." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Kommentaren kan inte vara tom." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Kommentaren har blivit tillagd." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Du måste vara inloggad innan du kan redigera paket information." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Kommentars ID fattas." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Inte mer än 5 kommentarer kan bli fästa." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Du har inte rättigheter till att fästa denna kommentar." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Du har inte rättigheter till att lossa denna kommentar." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Kommentaren har blivit fäst." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Kommentaren har blivit lossad." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "Fel vid hämtning av paket detaljer." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "Paket detaljer kunde inte hittas." - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "Dåligt referenshuvud." - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "Du har inte valt några paket att notifieras om." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "De valda paket aviseringar har aktiverats." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "Du har inte valt några paket för notifieringsborttagning." - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "Ett paket du valde har inga notifieringar aktiverade." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "De valda paketens notifieringar har blivit borttagna." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "Du måste vara inloggad före du kan flagga paket." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "Du valde inte några paket att flagga." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "De valda paketen har inte blivit flaggade, var snäll och skriv in en kommentar." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "De valda paketen har blivit flaggade utdaterade." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "Du måste vara inloggad före du kan avflagga paket." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "Du valde inte några paket att avflagga." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "De valda paketen har blivit avflaggade." - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "Du har inte tillgång till att radera paket." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "Du valde inte några paket att radera." - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "Ett av paketen du valde finns inte." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "De valda paketen har blivit raderade." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "Du måste vara inloggad före du kan adoptera paket." - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "Du är inte tillåten att adoptera ett av paketen du valde." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "Du måste vara inloggad före du kan göra paket härrelösa." - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "Du har inte tillåtelse att göra ett av paketen du valde herrelöst." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "Du valde into några paket att adoptera." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "Du valde inte några paket att göra härrelösa." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "De valda paketen har blivit adopterade." - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "De valda paketen har blivit härrelösa." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "Du måste vara inloggad före du kan rösta för paket" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "Du måste vara inloggad före du kan ta bort din röst från paket." - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "Du valde inte något paket att rösta för." - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "Dina röster har blivit borttagna från de valda paketen." - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "Dina röster har blivit sparade för de valda paketen." - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "Kunde inte lägga till i notifierings listan." - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "Du har blivit tillagd i kommentarnotifierings listan för %s" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "Du har blivit borttagen från kommentarsnotifierings listan för %s" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Du har inte rättigheter att återta denna kommentar." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Kommentaren har blivit återtagen." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Du kan inte ta bort den här kommentaren" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "Kommentaren har blivit borttagen." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Kommentaren har bilvit redigerad." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Du kan inte redigera nyckelorden för den här paket basen." - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Paket basens nyckelord har blivit updaterade." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Du har inte tillåtelse att ändra sam-ansvariga för denna paket bas." - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "Felaktigt användar namn: %s" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "Paket basens sam-ansvariga har blivit updaterade" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "Visa paket detaljer för" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "behöver %s" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "Du måste vara inloggad för att öppna paket förfrågningar." - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "Felaktigt namn: bara gemener är tillåtna" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "Kommentarsfältet får inte vara tomt." - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "Felaktig förfrågningstyp" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "Lade till förfrågningen framgångsrikt." - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "Felaktig anledning" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "Bara TUs och Developers kan stänga förfrågningar." - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "Förfrågning stängt framgångsrikt" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Du kan använda det här formuläret för att permanent radera AUR kontot %s." - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "%sVARNING%s: Den här handlingen kan inte ogöras." - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "Konfirmera radering" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Användarnamn" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "Konto typ" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "Användare" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "Developer" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "Paketunderhållare & Utvecklare" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "Email Adress" - -#: template/account_details.php -msgid "hidden" -msgstr "gömd" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "Riktigt namn" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Hemsida" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "IRC nick" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "PGP nyckel fingerprint" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "Status" - -#: template/account_details.php -msgid "Inactive since" -msgstr "Inaktiv sen" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "Aktiv" - -#: template/account_details.php -msgid "Registration date:" -msgstr "Registrerings datum:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "okänd" - -#: template/account_details.php -msgid "Last Login" -msgstr "Sista inloggning" - -#: template/account_details.php -msgid "Never" -msgstr "Aldrig" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "Visa den här användarens paket" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "Redigera den här användarens konto" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "Lista denna användarens kommentarer" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "Klicka %shär%s om du vill permanent radera detta konto." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Klicka %shär%s för användarinformation." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Klicka %shär%s för att lista kommentarerna från detta konto." - -#: template/account_edit_form.php -msgid "required" -msgstr "krävs" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Ditt användarnamn är det namn du kommer att använda för att logga in. Det är synligt för allmänheten, även om ditt konto är inaktivt." - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "Normal användare" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "Konto avstängt" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "Inaktiv" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Var god och se till att du har skrivit in din epostadress korrect, annars kommer du bli utelåst." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Göm epostadress" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "Om du inte döljer din e-postadress är den synlig för alla registrerade AUR-användare. Om du döljer din e-postadress är den endast synlig för medlemmar av Arch Linux-personalen." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Backup e-postadress" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "Ange eventuellt en sekundär e-postadress som kan användas för att återställa ditt konto om du förlorar åtkomsten till din primära e-postadress." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "Länkar för återställning av lösenord skickas alltid till både din primära och din reserv epostadress." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "Din backup-e-postadress är alltid endast synlig för medlemmar av Arch Linux-personalen, oberoende av %s inställningen." - -#: template/account_edit_form.php -msgid "Language" -msgstr "Språk" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Tidszon" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Om du vill ändra lösenordet, ange ett nytt lösenord och bekräfta det nya lösenordet genom att ange det igen." - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "Skriv lösenord igen" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Den följande informationen är bara nödvändig om du vill ladda upp paket till Arch User Repository." - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "Specificera flera SSH-nycklar separerade med en ny rad, tomma rader ignoreras." - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "Dölj borttagna kommentarer" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "SSH publik nyckel" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Notifieringsinställningar" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Notifiera om nya kommentarer" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Notifiera om paketupdateringar" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Notifiera om ägarskaps ändringar." - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "För att bekräfta profiländringarna, vänligen ange ditt nuvarande lösenord:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "Ditt nuvarande lösenord" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "För att skydda AUR mot automatiskt kontoskapande ber vi dig att tillhandahålla utdata från följande kommando:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Svar" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "Updatera" - -#: template/account_edit_form.php -msgid "Create" -msgstr "Skapa" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "Återställ" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "Inga resultat matchade dina sök kriterier." - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "Redigera konto" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "Stäng av" - -#: template/account_search_results.php -msgid "Edit" -msgstr "Redigera" - -#: template/account_search_results.php -msgid "Less" -msgstr "Mindre" - -#: template/account_search_results.php -msgid "More" -msgstr "Mer" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "Inga mer resultat att visa." - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Använd den här formen för att lägga till sam-ansvariga för %s%s%s (ett användarnamn per linje):" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "Användare" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "Spara" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Anledning till flaggning som gammal: %s" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s flaggades %s%s%s som gammalt på %s%s%s av följande anledning:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s är inte flaggad som gammal." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Återvänd till Detaljer" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Upphovsrätt %s 2004-%d aurweb utvecklingsteamet" - -#: template/header.php -msgid " My Account" -msgstr " Mitt konto" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "Paket handlingar" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "Visa PKGBUILD" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "Visa ändringar" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "Ladda ned ögonblicksbild" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "Sök wiki" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Flagga som gammalt (%s)" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "Flagga paketet utdaterat" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "Avflagga paket" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "Ta bort röst" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "Rösta för detta paket" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "Stäng av notifieringar" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Email notifieringar" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "Hantera sam-ansvariga" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "%d väntande förfrågning" -msgstr[1] "%d väntande förfrågningar" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "Adoptera paket" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Paket bas detaljer" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "Git klonings URL" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "skrivskyddad" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "klicka för att kopiera" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Nyckelord" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "Första uppladdare" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "Underhållare" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "Sista paketerare" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "Röster" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Populäritet" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "Först uppladdat" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "Sist updaterat" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Redigera kommentar för: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "Lägg till kommentar" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "Git commit-identifierare som refererar till commits i AUR-paketförrådet och URL:er konverteras automatiskt till länkar." - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "%sMarkdown syntax%s stöds delvis." - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Fästa Kommentarer" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "Senaste kommentarer" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Kommentarer för" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s kommenterade %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Anonym kommentar från %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "Kommenterade på paket %s på %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "raderad %s av %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "raderad %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "redigerad %s av %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "redigerad %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Återta kommentaren" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "Radera kommentar" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Fäst kommentar" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Lossa kommentar" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "Paket detaljer" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "Paket bas" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "Beskrivning" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "Uppströms URL" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "Besök hemsidan för" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "Licenser" - -#: template/pkg_details.php -msgid "Groups" -msgstr "Grupper" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "Konflikter" - -#: template/pkg_details.php -msgid "Provides" -msgstr "Erbjuder" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "Ersätter" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "Beroenden" - -#: template/pkg_details.php -msgid "Required by" -msgstr "Krävs av" - -#: template/pkg_details.php -msgid "Sources" -msgstr "Källor" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "Använd det här formuläret för att stänga förfrågningen för paket basen %s%s%s." - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "Kommentarsfältet kan lämnas tomt, men det är rekommenderat att lämna en kommentar när man avböjer en förfrågning." - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "Anledning" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "Accepterad" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "Avböjd" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "Använd det här formuläret för att öppna en förfrågning mot paket bas %s%s%s, villket inkluderar de följande paketen:" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "Förfrågningstyp" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "Radering" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "Herrelös" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "Slå ihop i" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "Genom att skicka en begäran om borttagning ber du en paketunderhållare att ta bort paketbasen. Denna typ av begäran bör användas för dubbletter, programvara som överges av uppström, såväl som olagliga och irreparabelt trasiga paket." - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "Genom att skicka in en sammanslagningsförfrågan ber du en paketunderhållare att ta bort paketbasen och överföra dess röster och kommentarer till en annan paketbas. Att slå samman ett paket påverkar inte motsvarande Git-förråd. Se till att du själv uppdaterar Git-historiken för målpaketet." - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "Genom att skicka in en föräldralös begäran ber du en paketunderhållare att göra paketbasen herrelös. Vänligen gör bara detta om paketet behöver underhållsåtgärder, underhållaren är MIA och du redan försökt kontakta underhållaren tidigare." - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Inga förfrågningar matchade dina sökkriterier." - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "%d paket förfrågning hittad." -msgstr[1] "%d paket förfrågningar hittade." - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "Sida %d av %d" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "Paket" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "Öppnad av" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "Datum" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d dag kvar" -msgstr[1] "~%d dagar kvar" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "~%d timme kvar" -msgstr[1] "~%d timmar kvar" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "<1 timme kvar" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "Acceptera" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "Låst" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "Stäng" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Väntar på" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "Stängd" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "Namn, Beskrivning" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "Bara namn" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "Exakt namn" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "Exakt paket bas" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Sam-ansvarig" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Ansvarig, Sam-ansvariga" - -#: template/pkg_search_form.php -msgid "All" -msgstr "Alla" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "Flaggade" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "Inte flaggade" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "Namn" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "Röstade" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Senast modifierad" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "Stigande" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "Fallande" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "Skriv in sök kriterier" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "Sök efter" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "Utdaterat" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "Sortera efter" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "Sorterings ordning" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "Per sida" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "Gå" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "Herrelösa" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "Fel inträffade vid hämt av paket listan." - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "Inga paket matchade dina sök kriterier." - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "%d paket hittat" -msgstr[1] "%d paket hittade" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "Version" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Populäritet räknas ut som summan av alla röster, och alla röster har en vikt med en faktor av %.2f per dag sedan den skapades. " - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "Ja" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "herrelös" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "Handlingar" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "Avflagga utdaterat" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "Adoptera paketen" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "Gör paket herrelösa" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "Radera paketen" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "Konfirmera" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "Alla typer" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "Sök" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "Statistik" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "Härrelösa paket" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "Paket tillagda de senaste 7 dagarna" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "Paket uppdaterade de senaste 7 dagarna" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "Paket uppdaterade the senaste året" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "Paket aldrig updaterade" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "Registrerade användare" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "Paketunderhållare" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "Nyliga uppdateringar" - -#: template/stats/updates_table.php -msgid "more" -msgstr "mer" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "Mina statistiker" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "Förslagsdetaljer" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "Den här omröstningen är fortfarande öppen" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "Uppladdad: %s av %s" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "Slut" - -#: template/tu_details.php -msgid "Result" -msgstr "Resultat" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "Nej" - -#: template/tu_details.php -msgid "Abstain" -msgstr "Avstå" - -#: template/tu_details.php -msgid "Total" -msgstr "Totalt" - -#: template/tu_details.php -msgid "Participation" -msgstr "Deltagande" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "Sista röstning per TU" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "Sista röstning" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "Inga resultat hittades." - -#: template/tu_list.php -msgid "Start" -msgstr "Start" - -#: template/tu_list.php -msgid "Back" -msgstr "Backåt" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "AUR Återställ Lösenord" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "En begäran om lösenordsåterställning skickades för kontot {user} som är kopplat till din e-postadress. Om du vill återställa ditt lösenord, följ länken [1] nedan, annars ignorera detta meddelande och ingenting kommer att hända." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Välkommen till Arch User Repository" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Välkommen till Arch User Repository! För att ställa in ett första lösenord för ditt nya konto, klicka på länken [1] nedan. Om länken inte fungerar, försök att kopiera och klistra in den i din webbläsare." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "AUR Kommentar för {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] lade till följande kommentar till {pkgbase} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Om du inte längre vill få meddelanden om detta paket, gå till paketsidan [2] och välj \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "AUR paket uppdatering: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] knuffade en ny commit till {pkgbase} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "AUR inaktuell avisering för {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Ditt paket {pkgbase} [1] har flaggats som inaktuellt av {user} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "AUR-ägarskapsmeddelande för {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "Paketet {pkgbase} [1] adopterades av {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "Paketet {pkgbase} [1] gjordes herrelöst av {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "AUR sam-ansvarig meddelande för {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "Du blev tillagd till sam-ansvarig listan för {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "Du blev borttagen från sam-ansvarig listan för {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "AUR paket borttaget: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] slog ihop {old} [2] till {new} [3].\n\n--\nOm du inte längre vill få meddelanden om det nya paketet, gå till [3] och klicka på \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] raderade {pkgbase} [2].\n\nDu kommer inte längre att få aviseringar om detta paket." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "Paketunderhållare röstningspåminnelse Förslag {id}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Kom ihåg att lägga din röst på förslaget {id} [1]. Omröstningsperioden slutar om mindre än 48 timmar." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "Ogiltig kontotyp har angetts." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "Du har inte behörighet att ändra kontotyper." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "Du har inte behörighet att ändra den här användarens kontotyp till %s." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "Inga befintliga herrelösa begäranden att acceptera för %s." - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "Internt serverfel" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "Ett allvarligt fel har inträffat." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "Detaljer har loggats och kommer att granskas av postmästaren så snabbt som möjligt. Vi ber om ursäkt för eventuella besvär som detta kan ha orsakat." - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "AUR serverfel" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "Relaterade paketförfrågningar stängningskommentar..." - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "Denna åtgärd kommer att stänga alla väntande paketförfrågningar relaterade till det paketet. %sOm kommentarer%s utelämnas kommer en stängningskommentar att automatiskt genereras." - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "tilldelade" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "Visa %d mer" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "beroenden" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "Kontot har inte raderas, markera kryssrutan för bekräftelse." - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "Avbryt" - -#: templates/requests.html -msgid "Package name" -msgstr "Paketnamn" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "Observera att om du döljer din e-postadress hamnar den på BCC-listan för eventuella begärandemeddelanden. Om någon svarar på dessa aviseringar kommer du inte att få något e-postmeddelande. Svaren skickas dock vanligtvis till e-postlistan och kommer då att vara synliga i arkivet." diff --git a/po/tr.po b/po/tr.po index 8742b919..988fd2ac 100644 --- a/po/tr.po +++ b/po/tr.po @@ -1,2383 +1,1382 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# tarakbumba , 2011,2013-2015 -# tarakbumba , 2012,2014 -# Demiray Muhterem , 2015,2020-2022 -# Koray Biçer , 2020 +# Atilla Öntaş , 2011,2013-2015 +# Atilla Öntaş , 2012,2014 +# Demiray Muhterem , 2015 # Lukas Fleischer , 2011 # Samed Beyribey , 2012 # Samed Beyribey , 2012 -# Serpil Acar , 2016 -# tarakbumba , 2012 +# Atilla Öntaş , 2012 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Demiray Muhterem , 2015,2020-2022\n" -"Language-Team: Turkish (http://app.transifex.com/lfleischer/aurweb/language/tr/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-12 08:15+0000\n" +"Last-Translator: Atilla Öntaş \n" +"Language-Team: Turkish (http://www.transifex.com/projects/p/aur/language/" +"tr/)\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: html/404.php msgid "Page Not Found" msgstr "Sayfa Bulunamadı" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "Üzgünüz, talep ettiğiniz sayfa bulunamadı." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Not" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Git clone linkleri web tarayıcıda açılamazlar." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "%s'in Git deposunu kopyalamak için, %s komutunu çalıştırın." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Detaylar sayfasına %s geri dönmek için %sburaya%s tıklayınız." - -#: html/503.php msgid "Service Unavailable" msgstr "Hizmete Erişilemiyor" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Paniklemeyin! Bu site bakım çalışmaları nedeniyle erişime kapatıldı. Kısa süre sonra yeniden çalışmaya başlayacak" +msgstr "" +"Paniklemeyin! Bu site bakım çalışmaları nedeniyle erişime kapatıldı. Kısa " +"süre sonra yeniden çalışmaya başlayacak" -#: html/account.php msgid "Account" msgstr "Hesap" -#: html/account.php template/header.php msgid "Accounts" msgstr "Hesaplar" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "Bu alana erişim izniniz yok." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Belirtilen kullanıcı verileri alınamadı." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "Bu hesap üzerinde değişiklik yapma izniniz yok." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Yanlış şifre." - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Mevcut hesaplar içinde arama yapmak için bu formu kullanın." -#: html/account.php msgid "You must log in to view user information." msgstr "Kullanıcı bilgilerini görmek için giriş yapmalısınız." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Yeni bir hesap oluşturmak için bu formu kullanın." + msgid "Add Proposal" msgstr "Öneri ekle" -#: html/addvote.php msgid "Invalid token for user action." msgstr "Kullanıcı işlemi için geçersiz anahtar." -#: html/addvote.php msgid "Username does not exist." msgstr "Kullanıcı adı bulunamadı." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s için yürürlükte olan bir öneri var." -#: html/addvote.php msgid "Invalid type." msgstr "Geçersiz tür." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Öneri boş olamaz." -#: html/addvote.php msgid "New proposal submitted." msgstr "Yeni öneri gönderildi." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Oylanması için öneri gönder." -#: html/addvote.php msgid "Applicant/TU" msgstr "İstekli/TU" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(uygulanabilir değilse boş)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Tür" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Bir GK ekleme" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Bir GK çıkartma" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Bir GK çıkartma (bildirilmemiş hareketsizlik)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Amendment of Bylaws" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Öneri" -#: html/addvote.php msgid "Submit" msgstr "Gönder" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "Yardımcı bakımcıları Yönet" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Yorumu düzenle" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Kontrol Paneli" - -#: html/home.php template/header.php msgid "Home" msgstr "Anasayfa" -#: html/home.php -msgid "My Flagged Packages" -msgstr "İşaretli Paketlerim" - -#: html/home.php -msgid "My Requests" -msgstr "İsteklerim" - -#: html/home.php -msgid "My Packages" -msgstr "Paketlerim" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Bakımını yaptığım paketleri ara" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Ortak Bakılan Paketler" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Birlikte baktığım paketleri ara" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"AUR'a hoş geldiniz! Bilgi almak için lütfen %sAUR Kullanıcı Rehberi%s ve " +"%sGK Rehberini%s okuyun." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Eklenen PKGBUILD dosyaları %smutlaka%s %sArch Paket Standartlarına%s uymalıdır aksi takdirde silinecektir. " +msgstr "" +"Eklenen PKGBUILD dosyaları %smutlaka%s %sArch Paket Standartlarına%s " +"uymalıdır aksi takdirde silinecektir. " -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Beğendiğiniz paketleri oylamayı unutmayın!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Burada listelenen paketlerin bazıları [extra] deposunda yer almaktadır." +msgid "Some packages may be provided as binaries in [community]." +msgstr "" +"Burada listelenen paketlerin bazıları [community] deposunda yer almaktadır." -#: html/home.php msgid "DISCLAIMER" msgstr "FERAGATNAME" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "AUR paketleri kullanıcılar tarafından üretilirler. Bu paketlerin herhangi bir risk taşıyabileceğini unutmayın." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Desteklenmeyen paketler kullanıcılar tarafından üretilen içeriğe " +"sahiptirler. Bu paketlerin kullanımından doğan risk kullanıcının kendisine " +"aittir." -#: html/home.php -msgid "Learn more..." -msgstr "Daha fazlasını öğrenin..." - -#: html/home.php msgid "Support" msgstr "Destek" -#: html/home.php msgid "Package Requests" msgstr "Paket Talepleri" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Paket ayrıntıları sayfasındaki %sPaket Eylemleri%s kutusunda doldurulabilecek üç tür talep vardır:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" +"Paket ayrıntıları sayfasındaki %sPaket Eylemleri%s kutusunda " +"doldurulabilecek üç tür talep vardır:" -#: html/home.php msgid "Orphan Request" msgstr "Sahipsiz Bırakma Talebi" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Bir paketin sahipliğinin bırakılması talebi, mesela bakımcısının etkin olmaması ve paketin uzun zamandır güncel değil olarak işaretlenmiş olması." +msgstr "" +"Bir paketin sahipliğinin bırakılması talebi, mesela bakımcısının etkin " +"olmaması ve paketin uzun zamandır güncel değil olarak işaretlenmiş olması." -#: html/home.php msgid "Deletion Request" msgstr "Silme Talebi" -#: html/home.php msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." msgstr "" +"Bir paketin Arch Kullanıcı Deposundan kaldırılması talebidir. Lütfen bunu, " +"bir paket çalışmıyor fakat kolayca düzeltilebiliyorsa kullanmayın. Bunun " +"yerine, paket bakımcısı ile iletişim kurun ve mecbur kalınırsa paketin " +"sahipsiz bırakılması talebinde bulunun." -#: html/home.php msgid "Merge Request" msgstr "Birleştirme Talebi" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Bir paketin bir başkası ile birleştirilmesi talebidir. Bir paketin yeniden adlandırılması veya bir ayrılmış paketle değiştirilmesi gerekiyorsa kullanılabilir." +msgstr "" +"Bir paketin bir başkası ile birleştirilmesi talebidir. Bir paketin yeniden " +"adlandırılması veya bir ayrılmış paketle değiştirilmesi gerekiyorsa " +"kullanılabilir." -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Bir talep hakkında tartışmak istiyorsanız, %saur-requests%s e-posta listesini kullanabilirsiniz. Bununla birlikte o e-posta listesini dosya talepleri için kullanmamalısınız." +msgstr "" +"Bir talep hakkında tartışmak istiyorsanız, %saur-requests%s e-posta " +"listesini kullanabilirsiniz. Bununla birlikte o e-posta listesini dosya " +"talepleri için kullanmamalısınız." -#: html/home.php -msgid "Submitting Packages" -msgstr "Paketleri göndermek" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Artık AUR' a paket göndermek için SSH üzerinden Git kullanılmaktadır. Daha fazla bilgi için Arch Kullanıcı Deposu ArchWiki sayfasındaki %sPaketleri Göndermek%s bölümüne bakın." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "AUR için şu SSH parmak izleri kullanılmaktadır:" - -#: html/home.php msgid "Discussion" msgstr "Tartışma" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" +"Arch Kullanıcı Deposu (AUR) ve Güvenilir Kullanıcı yapısı ile ilgili genel " +"tartışmalar %saur-general%s üzerinde yapılır. AUR web arayüzü geliştirme " +"süreci ilgili tartışmalar %saur-dev%s listesinde yapılmaktadır." -#: html/home.php msgid "Bug Reporting" msgstr "Hata Bildirimi" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" +"Eğer AUR'da bir hata ile karşılaştırsanız lütfen %shata takip sistemine%s " +"bildirin. Hata takip sistemini lütfen %ssadece%s AUR sistemi için kullanın. " +"Paketleme hatalarını paket bakımcısı ile iletişime geçerek bildirebilir veya " +"paketle ilgili görüşlerinizi ilgili paketin sayfasında iletebilirsiniz." -#: html/home.php msgid "Package Search" msgstr "Paket Ara" -#: html/index.php msgid "Adopt" -msgstr "Sahiplen" +msgstr "Sorumluluğunu Al" -#: html/index.php msgid "Vote" msgstr "Oy ver" -#: html/index.php msgid "UnVote" msgstr "Oyu kaldır" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Bilgilendirme" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Bildirimi iptal et" -#: html/index.php +msgid "Flag" +msgstr "İşaretle" + msgid "UnFlag" msgstr "İşareti Kaldır" -#: html/login.php template/header.php msgid "Login" msgstr "Giriş" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "%s olarak giriş yapıldı" -#: html/login.php template/header.php msgid "Logout" msgstr "Çıkış" -#: html/login.php msgid "Enter login credentials" msgstr "Giriş bilgilerinizi doldurun" -#: html/login.php -msgid "User name or primary email address" -msgstr "Kullanıcı adı veya birincil e-posta adresi" +msgid "Username" +msgstr "Kullanıcı Adı" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Parola" -#: html/login.php msgid "Remember me" msgstr "Beni hatırla" -#: html/login.php msgid "Forgot Password" msgstr "Parolamı Unuttum" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "HTTP oturum açma devredışı. Lütfen oturum açmak için %sHTTPS kullanın%s." +msgstr "" +"HTTP oturum açma devredışı. Lütfen oturum açmak için %sHTTPS kullanın%s." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Arama Ölçütü" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Paketler" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Paket ayrıntılarını almaya çalışırken hata oluştu." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Gerekli bir alan doldurulmamış." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Parolalar eşleşmiyor." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Şifreniz en az %s karakterden oluşmalıdır." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Geçersiz e-posta adresi" -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" +"E-posta hesabınızla ilişkilendirilmiş bir %s hesabı için parola sıfırlama " +"isteği gönderilmiş. Parolanızı sıfırlamak istiyorsanız aşağıdaki bağlantıyı " +"izleyin; aksi takdirde bu iletiyi yok sayın ve herhangi bir işlem yapılmasın." + msgid "Password Reset" msgstr "Parola sıfırlama" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Onaylama bağlantısı için e-posta hesabınızı denetleyin." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Parolanız başarıyla sıfırlandı." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Kullanıcı adınızı veya birincil e-posta adresinizi doğrulayın:" +msgid "Confirm your e-mail address:" +msgstr "E-posta adresinizi onaylayın:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Yeni parolanızı girin:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Yeni parolanızı onaylayın:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Devam" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Kaydettiğiniz kullanıcı adını ve birincil e-posta adresini unuttuysanız, lütfen %s genel %s posta listesine bir mesaj gönderin." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Kayıt olurken kullandığınız e-posta adresini hatırlamıyorsanız lütfen %saur-" +"general%s posta listesine mesaj gönderin." -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Kullanıcı adınızı veya birincil e-posta adresinizi girin:" +msgid "Enter your e-mail address:" +msgstr "E-posta adresinizi girin:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Paket Tabanları" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "Seçilen paketler için sahiplik bırakılamadı. Onaylama kutucuğunu işaretleyin." +msgstr "" +"Seçilen paketler için sahiplik bırakılamadı. Onaylama kutucuğunu işaretleyin." -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "Seçilen paketler kabul edilmedi, onay kontrol kutusunu işaretleyin." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." -msgstr "Oyların ve yorumların ilişkilendirilebileceği herhangi bir paket bulunamadı." +msgstr "" +"Oyların ve yorumların ilişkilendirilebileceği herhangi bir paket bulunamadı." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Paket temeli kendisi ile birleştirilemiyor." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "Seçilen paketler silinmedi. Onaylama kutucuğunu işaretleyin." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Paket Silimi" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Paketi Sil" +#, php-format +msgid "Delete Package: %s" +msgstr "Paketi sil: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Bu formu paket temeli %s%s%s ve şu paketleri AUR üzerinden silmek için kullanın: " +msgstr "" +"Bu formu paket temeli %s%s%s ve şu paketleri AUR üzerinden silmek için " +"kullanın: " -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Paket silme işlemi kalıcıdır." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "İşlemi onaylamak için kutucuğu işaretleyin." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Paket silmeyi onaylayın" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Sil" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Sadece geliştiriciler ve güvenilir kullanıcılar paket silebilir." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Paket Sahipliğini Bırak" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "Paketi sahiplenmeyi bırak: %s" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Şu paketleri içeren %s%s%s paket temelinin sahipliğini bırakmak için bu formu kullanın:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" +"Şu paketleri içeren %s%s%s paket temelinin sahipliğini bırakmak için bu " +"formu kullanın:" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "Onay kutusunu işaretleyerek, artık bir paket yardımcısı olmak istemediğinizi onaylarsınız." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "İşaretleme kutucuğunu seçerek paketin sahipliğini bırakmayı ve sahipliği %s%s%s üzerine geçirmeyi kabul ediyorsunuz." +msgstr "" +"İşaretleme kutucuğunu seçerek paketin sahipliğini bırakmayı ve sahipliği %s%s" +"%s üzerine geçirmeyi kabul ediyorsunuz." -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "Kutucuğu işaretleyerek paketin sahipliğini bırakmayı kabul ediyorsunuz." +msgstr "" +"Kutucuğu işaretleyerek paketin sahipliğini bırakmayı kabul ediyorsunuz." -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "Paket sahipliğini bırakmayı onayla" -#: html/pkgdisown.php msgid "Disown" msgstr "Sorumluluğunu bırak" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" +"Sadece geliştiriciler ve güvenilir kullanıcılar paketleri sahipsiz " +"bırakabilir." -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Yorumu İşaretle" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Paketi güncel değil olarak işaretle" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "Bu bir VCS paketi gibi görünüyor. AUR'daki paket sürümü en son taahhütle eşleşmiyorsa, lütfen güncelliğini %sdeğil%s olarak işaretleyin. Bu paketin işaretlenmesi, yalnızca, son yukarı akış değişiklikleri nedeniyle PKGBUILD içindeki kaynaklar taşınmışsa veya değişiklikler gerekliyse yapılmalıdır." - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "%s%s%s paket tabanını ve aşağıdaki paketleri güncel olmayan olarak işaretlemek için bu formu kullanın:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Lütfen %s değil, %s hataları bildirmek için bu formu kullanın. Bunun yerine paket yorumlarını kullanın." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Paketin neden güncel olmadığıyla ilgili detayları aşağıya girin, tercihen sürüm bildirilerinin veya yeni tarball sürümünün linklerini dahil ederek." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Yorumlar" - -#: html/pkgflag.php -msgid "Flag" -msgstr "İşaretle" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Sadece kayıtlı kullanıcılar paketleri güncel değil olarak işaretleyebilir." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Paket birleştirme" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Paketi Birleştir" +#, php-format +msgid "Merge Package: %s" +msgstr "Paket Birleştir: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Bu formu paket temeli %s%s%s ile bir başka paketi birleştirmek için kullanın. " +msgstr "" +"Bu formu paket temeli %s%s%s ile bir başka paketi birleştirmek için " +"kullanın. " -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Şu paketler silinecek: " -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Paket birleştirme işlemi geri alınamaz." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Birleştirmek istediğiniz paketin ismini girin." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Şununla birleştir:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Paket birleştirme onayı" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Birleştir" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Sadece geliştiriciler ve güvenilir kullanıcılar paket birleştirebilir." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "İstek Oluştur" +msgid "File Request" +msgstr "Bir talep doldur" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "Kapama Talebi" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "İlk" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Önceki" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "İleri" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Son" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Talepler" -#: html/register.php template/header.php -msgid "Register" -msgstr "Kayıt ol" +msgid "Trusted User" +msgstr "Güvenilen Kullanıcı" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Yeni bir hesap oluşturmak için bu formu kullanın." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Kullanım Şartları" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Aşağıdaki belgeler güncellendi. Lütfen bunları dikkatle inceleyin:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "düzeltme %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Yukarıdaki şartlar ve koşulları kabul ediyorum." - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Öneri detayları alınamadı." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Bu öneri için oylama kapanmıştır." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Sadece Güvenilir Kullanıcılar oy kullanabilir." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Sizin hakkınızdaki bir öneride oy kullanamazsınız." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Bu öneri için zaten oy vermişsiniz." -#: html/tu.php msgid "Vote ID not valid." msgstr "Oy kimliği geçersiz." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Mevcut Oylar" -#: html/tu.php msgid "Past Votes" msgstr "Geçmiş Oylar" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Oy verenler" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Muhtemelen sürekli spam saldırıları olması nedeniyle IP adresinizden hesap oluşturma devre dışı bırakılmış. Bu durumdan dolayı üzgünüz." +msgstr "" +"Muhtemelen sürekli spam saldırıları olması nedeniyle IP adresinizden hesap " +"oluşturma devre dışı bırakılmış. Bu durumdan dolayı üzgünüz." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Kullanıcı kimliği eksik" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Bu kullanıcı adı geçersizdir." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Uzunluğu %s ve %s karakter arasında olabilir." -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Bir rakam veya harf ile başlatıp bitirmelisiniz" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Sadece bir nokta, alt çizgi veya tire barındırabilir." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Lütfen yeni şifrenizi onaylayın." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "E-posta adresi geçerli değil." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "Yedekleme e-posta adresi geçersiz." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "Ana sayfa geçersiz, lütfen tam HTTP(li) URL belirtin." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "PGP anahtarı parmak izi hatalı." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "SSH kamu anahtarı geçersiz." -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "Hesap izinleri yükseltilemiyor." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Dil henüz desteklenmiyor." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Saat dilimi şu anda desteklenmemektedir." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "Kullanıcı adı, %s%s%s, zaten kullanılıyor." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "Adres, %s%s%s, zaten kullanılıyor." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "SSH kamu anahtarı, %s%s%s, zaten kullanımda." -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "CAPTCHA eksik." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "Bu CAPTCHA'nın süresi doldu. Lütfen tekrar deneyin." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "Girilen CAPTCHA yanıtı geçersiz." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "Hesap oluşturulurken hata oluştu, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "Hesap, %s%s%s, başarıyla oluşturuldu." -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "Bir parola sıfırlama anahtarı e-posta adresinize gönderildi." - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "Hesabınızı kullanmak için Giriş bağlantısını kullanın." -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"%s hoş geldiniz! Hesabınız için parolayı ilk kez oluşturmak için lütfen " +"aşağıdaki bağlanıtıyı tıklayın. Bağlantı çalışmazsa onu kopyalayıp " +"tarayıcınıza yapıştırmayı deneyin." + +msgid "A password reset key has been sent to your e-mail address." +msgstr "Bir parola sıfırlama anahtarı e-posta adresinize gönderildi." + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "Hesapta değişiklik yapılmadı, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "Hesap, %s%s%s, başarıyla düzenlendi." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Muhtemelen sürekli spam saldırıları olması nedeniyle IP adresinizden giriş yapma devre dışı bırakılmış. Bu durumdan dolayı üzgünüz." +msgstr "" +"Muhtemelen sürekli spam saldırıları olması nedeniyle IP adresinizden giriş " +"yapma devre dışı bırakılmış. Bu durumdan dolayı üzgünüz." -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "Hesap donduruldu" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "Hesapları askıya alma izniniz yok." - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Parolanız sıfırlandı. Kısa süre önce yeni hesap oluşturduysanız lütfen, ilk parolanızı ayarlamak için onaylama e-postasındaki bağlantıyı kullanın. Aksi takdirde, %sParola Sıfırlama%s sayfasında bir sıfırlama anahtarı talep edin." +msgstr "" +"Parolanız sıfırlandı. Kısa süre önce yeni hesap oluşturduysanız lütfen, ilk " +"parolanızı ayarlamak için onaylama e-postasındaki bağlantıyı kullanın. Aksi " +"takdirde, %sParola Sıfırlama%s sayfasında bir sıfırlama anahtarı talep edin." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Yanlış kullanıcı adı veya şifresi." -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Bir kullanıcı oturumu üretilmeye çalışılırken sorun oluştu." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Geçersiz e-posta adresi ve sıfırlama anahtarı bileşimi" -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Yok" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "%s için hesap bilgilerini görüntüle" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "Paket ID'si veya paket ismi eksik." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "Bu yorumu düzenlemek için yetkiniz yok." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Yorum bulunamadı." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Yorum boş olamaz." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Yorum eklendi." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Paket bilgilerini güncellemek için giriş yapmalısınız." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Yorum kimliği bulunamadı." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "5 taneden fazla yorum iğnelenemez." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Bu yorumu iğnelemek için yetkiniz yok." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Bu yorumun sabitlemesini kaldırma izniniz yok." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Yorum iğnelendi." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Yorum sabitlemesi kaldırıldı" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Paket bilgileri alınırken hata oluştu." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Paket ayrıntıları bulunamadı." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "Kötü Yönlendirici başlık." - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "Bildirilecek herhangi bir paket seçmediniz." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "Seçilen paketlerin bildirimleri etkinleştirildi." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "Bildirim kaldırma için herhangi bir paket seçmediniz." - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "Seçtiğiniz bir pakette bildirimler etkin değil." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "Seçilen paketlerin bildirimleri kaldırıldı." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Paketleri işaretleyebilmek için giriş yapmalısınız." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "İşaretlenecek paketleri seçmediniz." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Seçilen paketler işaretlenmedi, lütfen bir yorum giriniz." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Seçilen paketler güncelliğini yitirmiş olarak işaretlendi." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Paketlerin işaretini kaldırabilmek için giriş yapmalısınız." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "İşareti kaldırılacak paketleri seçmediniz." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "Seçilen paketlerin işareti kaldırıldı." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "Paket silmek için gerekli izne sahip değilsiniz." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Silinecek paketleri seçmediniz." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "Seçtiğiniz paketlerden biri mevcut değil." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Seçilen paketler silindi." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Paketleri sahiplenmek için giriş yapmalısınız." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "Seçtiğiniz paketlerden birini benimsemenize izin verilmiyor." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Paketlerin sahipliğini bırakmak için giriş yapmalısınız." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "Seçtiğiniz paketlerden birini reddetme izniniz yok." - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Sahiplenilecek paketleri seçmediniz." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Sahipliği bırakılacak paketleri seçmediniz." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Seçilen paketler sahiplenildi." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Seçilen paketlerin sahipliği bırakıldı." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Paketlere oy vermeden önce giriş yapmalısınız." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Oy iptali için giriş yapmalısınız." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Oy verilecek paketleri seçmediniz." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Seçtiğiniz paketlerden oyunuz geri alındı." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Seçtiğiniz paketlere oyunuz eklendi." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Bildirim listesine ekleme işlemi başarısız oldu." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "%s bildirim listesine başarıyla eklendiniz." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "%s bildirim listesinden başarıyla çıktınız." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Bu silinmiş yorumu geri almak için yetkili değilsiniz." +msgid "You must be logged in before you can edit package information." +msgstr "Paket bilgilerini güncellemek için giriş yapmalısınız." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Yorum silindi." +msgid "Missing comment ID." +msgstr "Yorum kimliği bulunamadı." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "Bu yorumu silme yetkiniz yok." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Yorum silindi." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Yorum düzenlendi." +msgid "You are not allowed to delete this comment." +msgstr "Bu yorumu silme yetkiniz yok." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Bu paket temelinin anahtar kelimelerini düzenleme yetkisine sahip değilsiniz." +msgid "Missing category ID." +msgstr "Kategori kimliği bulunamadı." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Paket temeli anahtar kelimeleri güncellendi." +msgid "Invalid category ID." +msgstr "Geçersiz kategori." + +msgid "You are not allowed to change this package category." +msgstr "Bu paket kategorisini değiştirmek için gerekli izne sahip değilsiniz." + +msgid "Package category changed." +msgstr "Paket kategorisi değiştirildi." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Bu paket temelinin yardımcı bakımcılarını yönetme yetkisine sahip değilsiniz." +msgstr "" +"Bu paket temelinin yardımcı bakımcılarını yönetme yetkisine sahip değilsiniz." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "Geçersiz kullanıcı adı: %s" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "Paket temeli yardımcı bakımcıları güncellendi." -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Paket detaylarını görüntüle" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "%s'ye ihtiyaç duyuyor." - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "Paket gereksinimlerinin kaydını tutmalısın." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Geçersiz isim: yalnızca küçük harf kullanılabilir." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "Yorum alanı boş olmamalı." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Geçersiz talep türü." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Talep başarıyla eklendi." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Geçersiz sebep." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "Sadece GK'lar ve geliştiriciler talepleri kapatabilirler." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Talep başarıyla kapatıldı." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "Bu formu kullanarak %s AUR hesabını temelli silebilirsiniz." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sUYARI%s: Bu eylem geri döndürülemez." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Silmeyi onayla" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Kullanıcı Adı" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Hesap Türü" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Kullanıcı" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Geliştirici" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Güvenilir Kullanıcı & Geliştirici" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "E-posta adresi" -#: template/account_details.php -msgid "hidden" -msgstr "gizli" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Gerçek İsim" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Anasayfa" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC Rumuzu" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "PGP Anahtar Parmak İzi" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Durum" -#: template/account_details.php msgid "Inactive since" msgstr "Şu tarihten beri etkin değil:" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Etkin" -#: template/account_details.php -msgid "Registration date:" -msgstr "Kayıt tarihi:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "bilinmiyor" - -#: template/account_details.php msgid "Last Login" msgstr "Son giriş" -#: template/account_details.php msgid "Never" msgstr "Hiç" -#: template/account_details.php msgid "View this user's packages" msgstr "Bu kullanıcı tarafından hazırlanan paketleri göster" -#: template/account_details.php msgid "Edit this user's account" msgstr "Bu kullanıcının hesabını düzenleyin" -#: template/account_details.php -msgid "List this user's comments" -msgstr "Bu kullanıcının yorumlarını listele" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Bu hesabı temelli olarak silmek istiyorsanız %sburaya%s tıklayın." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Kullanıcı detayları için %sburaya%s tıklayın." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Bu hesap tarafından yapılan yorumları listelemek için %s buraya %s tıklayın." - -#: template/account_edit_form.php msgid "required" msgstr "gerekli" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Kullanıcı adınız, oturum açmak için kullanacağınız addır. Hesabınız etkin olmasa bile, herkes tarafından görülebilir." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Normal kullanıcı" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Güvenilen kullanıcı" + msgid "Account Suspended" msgstr "Hesap Donduruldu" -#: template/account_edit_form.php msgid "Inactive" msgstr "Etkin değil" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Lütfen e-posta adresinizi doğru girdiğinizden emin olun, aksi halde hesabınız kilitlenecektir." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "E-posta Adresini Gizle" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "E-posta adresinizi gizlemezseniz, tüm kayıtlı AUR kullanıcıları tarafından görülebilir. E-posta adresinizi gizlerseniz, adres yalnızca Arch Linux personeli tarafından görülebilir." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Yedekleme E-posta Adresi" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "İsteğe bağlı olarak, birincil e-posta adresinize erişiminizi kaybetmeniz durumunda hesabınızı geri yüklemek için kullanılabilecek ikincil bir e-posta adresi sağlayın." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "Parola sıfırlama bağlantıları her zaman hem birincil adresinize hem de yedek e-posta adresinize gönderilir." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "Yedek e-posta adresiniz her zaman %s ayarından bağımsız olarak yalnızca Arch Linux personeli tarafından görülebilir." - -#: template/account_edit_form.php -msgid "Language" -msgstr "Dil" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Saat dilimi" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Şifreyi değiştirmek istiyorsanız, yeni bir şifre girin ve yeni şifreyi tekrar girerek onaylayın." - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Parolayı tekrar girin" -#: template/account_edit_form.php +msgid "Language" +msgstr "Dil" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Aşağıdaki bilgi sadece Arch Kullanıcı Deposu' na paket göndermek istiyorsanız gereklidir." - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" +"Aşağıdaki bilgi sadece Arch Kullanıcı Deposu' na paket göndermek " +"istiyorsanız gereklidir." -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "SSH Kamu Anahtarı" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Bildirim ayarları" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Yeni yorumları bildir" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Paket güncellemelerini bildir" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Sahiplik değişikliklerini bildir." - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "Profil değişikliklerini onaylamak için lütfen mevcut şifrenizi girin:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "Mevcut şifreniz" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "AUR otomatik hesap oluşturmaya karşı korumak için sizden aşağıdaki komutun çıktısını sağlamanızı rica ediyoruz:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Cevap" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Güncelle" -#: template/account_edit_form.php msgid "Create" msgstr "Oluştur" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Sıfırla" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "Arama ölçütünzle eşleşen bir sonuç bulunamadı." -#: template/account_search_results.php msgid "Edit Account" msgstr "Hesap Bilgilerini Düzenle" -#: template/account_search_results.php msgid "Suspended" msgstr "Donduruldu" -#: template/account_search_results.php msgid "Edit" msgstr "Düzenle" -#: template/account_search_results.php msgid "Less" msgstr "Az" -#: template/account_search_results.php msgid "More" msgstr "Fazla" -#: template/account_search_results.php msgid "No more results to display." msgstr "Gösterilecek daha fazla sonuç yok." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "Yardımcı bakımcıları yönet: %s" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "%s%s%s için yardımcı bakımcı eklemek istiyorsanız bu formu kullannı (her satırda bir kullanıcı adı):" +msgstr "" +"%s%s%s için yardımcı bakımcı eklemek istiyorsanız bu formu kullannı (her " +"satırda bir kullanıcı adı):" -#: template/comaintainers_form.php msgid "Users" msgstr "Kullanıcılar" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "Kaydet" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Güncel olmayan olarak işaretli yorum: %s" +msgid "My Packages" +msgstr "Paketlerim" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s, aşağıdaki nedenlerden dolayı %s%s%s'i %s%s%s olarak işaretledi:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s güncel değil olarak işaretlenmedi." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Detaylara Geri Dön." - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Telif Hakkı %s 2004-%d aurweb Gelişim Takımı." - -#: template/header.php msgid " My Account" msgstr "Hesabım" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "Kayıt ol" + +msgid "unknown" +msgstr "bilinmiyor" + +msgid "Package Base Details" +msgstr "Paket Temeli Ayrıntıları" + msgid "Package Actions" msgstr "Paket Eylemleri" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "PKGBUILD görüntüle" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "Değişiklikleri Görüntüle" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "Anlık görüntüsünü indir" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Wikide ara" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Güncel değil olarak işaretlendi (%s)" +msgid "Flagged out-of-date" +msgstr "Güncelliğini yitirmiş olarak işaretlendi" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Güncelliğini yitirmiş olarak işaretle" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "İşareti kaldır" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Oyu kaldır" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Pakete oy ver" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Bildirimleri kapat" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Bildirimleri etkinleştir" +msgid "Notify of new comments" +msgstr "Yeni yorumları bildir" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" msgstr "Yardımcı Bakımcıları Yönet" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d adet bekleyen talep" msgstr[1] "%d adet bekleyen talep" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Paketi Sil" + +msgid "Merge Package" +msgstr "Paketi Birleştir" + msgid "Adopt Package" msgstr "Paketi Sahiplen" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Paket Temeli Ayrıntıları" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "Git Clone URL" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "salt okunur" +msgid "Category" +msgstr "Kategori" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "kopyalamak için tıkla" +msgid "Change category" +msgstr "Kategori değiştir" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Anahtar kelimeler" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Yükleyen" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "%s için hesap bilgilerini görüntüle" + msgid "Maintainer" msgstr "Sorumlu" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Son Paketleyici" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Oy" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Beğenilme" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "İlk Yükleme" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Son Güncelleme" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Yorumu düzenle: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Yorum Ekle" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "AUR paketindeki işlemleri referans alan Git işlem tanımlayıcıları ve URL adresleri otomatik olarak bağlantılara dönüştürülür." +msgid "Comment has been added." +msgstr "Yorum eklendi." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "%s Markdown sözdizimi %s kısmen desteklenmektedir." +msgid "View all comments" +msgstr "Tüm yorumları görünüle" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "İğnelenmiş Yorumlar" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Son Yorumlar" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Yorum" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s, %s'e yorum yaptı." - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "%s'e isimsiz yorum" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "%s paketinde %s yorumladı" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "%s'te, %s tarafından silindi." - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "%s'te silindi." - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "%s'te, %s tarafından düzenlendi" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "%s'te düzenlendi." - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Yorumu silmeyi geri al." - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Yorumu sil" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Yorumu iğnele" +#, php-format +msgid "Comment by %s" +msgstr "%s yorumu" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Yorum sabitlemesini kaldır" +msgid "Anonymous comment" +msgstr "İsimsiz yorum" + +msgid "deleted" +msgstr "silindi" + +msgid "All comments" +msgstr "Tüm yorumlar" -#: template/pkg_details.php msgid "Package Details" msgstr "Paket Ayrıntıları" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "Paket Temeli" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Açıklama" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Geliştiricinin Bağlantısı" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Web sayfasını görüntüle" -#: template/pkg_details.php msgid "Licenses" msgstr "Lisanslar" -#: template/pkg_details.php msgid "Groups" msgstr "Gruplar" -#: template/pkg_details.php msgid "Conflicts" msgstr "Çakışır" -#: template/pkg_details.php msgid "Provides" msgstr "Sunar" -#: template/pkg_details.php msgid "Replaces" msgstr "Yerini alır" -#: template/pkg_details.php msgid "Dependencies" msgstr "Bağımlılıklar" -#: template/pkg_details.php msgid "Required by" msgstr "İhtiyaç duyanlar" -#: template/pkg_details.php msgid "Sources" msgstr "Kaynak kodlar" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Kapatma Talebi: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Bu formu %s%s%s paket temeli için yapılan talebi kapatmak için kullanın." +msgstr "" +"Bu formu %s%s%s paket temeli için yapılan talebi kapatmak için kullanın." + +msgid "Note" +msgstr "Not" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Yorum alanı boş bırakılabilir. Ancak, bir talebi reddederken bir yorum eklemeniz şiddetle önerilir." +msgstr "" +"Yorum alanı boş bırakılabilir. Ancak, bir talebi reddederken bir yorum " +"eklemeniz şiddetle önerilir." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Sebep" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Kabul edildi" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Reddedildi" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Yorumlar" + +#, php-format +msgid "File Request: %s" +msgstr "Dosya Talebi: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Bu formu kullanarak aşağıdaki paketleri içeren paket temeli %s%s%s için talep doldurun:" +msgstr "" +"Bu formu kullanarak aşağıdaki paketleri içeren paket temeli %s%s%s için " +"talep doldurun:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Talep türü" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Silme" -#: template/pkgreq_form.php msgid "Orphan" msgstr "Öksüz" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Şununla ilişkilendir:" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Arama kriterlerinize uyan istek yok." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "%d adet paket talebi bulundu." msgstr[1] "%d adet paket talebi bulundu." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Sayfa %d / %d" -#: template/pkgreq_results.php msgid "Package" msgstr "Paket" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Dolduran" -#: template/pkgreq_results.php msgid "Date" msgstr "Tarih" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d gün kaldı" -msgstr[1] "~%d gün kaldı" +msgid "~%d days left" +msgstr "~%d gün kaldı" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "~%d saat kaldı" msgstr[1] "~%d saat kaldı" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "<1 saat kaldı" -#: template/pkgreq_results.php msgid "Accept" msgstr "Kabul" -#: template/pkgreq_results.php msgid "Locked" msgstr "Kilitli" -#: template/pkgreq_results.php msgid "Close" msgstr "Kapat" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "Bekliyor" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Kapandı" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "İsim, Açıklama" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Sadece İsim" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Tam Ad" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Tam Paket Temeli" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Yardımcı Bakıcı" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Bakıcı, Yardımcı Bakıcı" - -#: template/pkg_search_form.php msgid "All" msgstr "Tümü" -#: template/pkg_search_form.php msgid "Flagged" msgstr "İşaretlenmiş" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "İşaretlenmemiş" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "İsim" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "Beğenilme" + msgid "Voted" msgstr "Oylanmış" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Son düzenleme" +msgid "Age" +msgstr "Tarih" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Eskiden yeniye" -#: template/pkg_search_form.php msgid "Descending" msgstr "Yeniden eskiye" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Arama kriteri girin" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Tümü" + msgid "Search by" msgstr "Buna göre ara" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Anahtar kelimeler" + msgid "Out of Date" msgstr "Güncelliğini Yitirmiş" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Sırala" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Sıralama düzeni" -#: template/pkg_search_form.php msgid "Per page" msgstr "Her sayfa" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Git" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Sahipsiz" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Paket listesi alınırken hata oluştu." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "Arama ölçütünüz ile eşleşen paket bulunamadı." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "%d adet paket bulundu." msgstr[1] "%d adet paket bulundu." -#: template/pkg_search_results.php msgid "Version" msgstr "Sürüm" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Popülarite, oluşturulmasından itibaren günlük %.2f oranı ile ağırlaştırılarak bulunan her oyun toplamı ile ölçülür." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Evet" -#: template/pkg_search_results.php msgid "orphan" msgstr "sahipsiz" -#: template/pkg_search_results.php msgid "Actions" msgstr "Eylemler" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Güncelliğini yitirmiş olarak işaretle" + msgid "Unflag Out-of-date" msgstr "\"Güncelliğini Yitirmiş\" İşaretini Kaldır" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Paketleri Sahiplen" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Paketleri sahiplenmeyi bırak" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Paketleri Sil" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Onayla" -#: template/search_accounts_form.php msgid "Any type" msgstr "Herhangi bir tür" -#: template/search_accounts_form.php msgid "Search" msgstr "Ara" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "İstatistikler" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Sahipsiz Paketler" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Son 7 günde eklenen paketler" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Son 7 günde güncellenen paketler" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Geçtiğimiz yıl güncellenen paketler" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Hiç güncellenmemiş paketler" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Kayıtlı Kullanıcılar" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Güvenilen Kullanıcılar" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Son Güncellemeler" -#: template/stats/updates_table.php -msgid "more" -msgstr "daha fazla" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "İstatistiklerim" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Desteklenmeyen paketler" + msgid "Proposal Details" msgstr "Öneri Detayları" -#: template/tu_details.php msgid "This vote is still running." msgstr "Bu oylama hala yürürlükte." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Yüklendi: %s %s tarafından" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Son" -#: template/tu_details.php msgid "Result" msgstr "Sonuç" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Hayır" -#: template/tu_details.php msgid "Abstain" msgstr "Çekimser" -#: template/tu_details.php msgid "Total" msgstr "Toplam" -#: template/tu_details.php msgid "Participation" msgstr "Katkı" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "GK tarafından verilen son oylar" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Son Oy" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Sonuç bulunamadı." -#: template/tu_list.php msgid "Start" msgstr "Başlangıç" -#: template/tu_list.php msgid "Back" msgstr "Geri" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "AUR Şifre Sıfırlama" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "E-posta adresinizle ilişkili {user} hesabı için bir şifre sıfırlama isteği gönderildi. Şifrenizi sıfırlamak isterseniz, aşağıdaki bağlantıyı [1] takip edin, aksi takdirde bu mesajı dikkate almayın; hiçbir şey olmaz." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Arch Kullanıcı Deposuna Hoş Geldiniz" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Arch Kullanıcı Deposuna Hoş Geldiniz! Yeni hesabınız için bir başlangıç şifresi belirlemek için lütfen aşağıdaki bağlantıyı [1] tıklayın. Bağlantı çalışmazsa, kopyalayıp tarayıcınıza yapıştırmayı deneyin." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "{pkgbase} için yorum yapın" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1], {pkgbase} [2] ürününe şu yorumu ekledi:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Artık bu paket hakkında bildirim almak istemiyorsanız, lütfen paket sayfasına [2] gidin ve \"{label}\" seçeneğini seçin." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "Diğer paket güncellemeleri: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1], {pkgbase} [2] için yeni bir işlemde bulundu." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "{pkgbase} için AUR Güncel Değil Bildirimi" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "{pkgbase} [1] paketiniz {user} [2] tarafından eski olarak işaretlendi:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "{pkgbase} için AUR Sahiplik Bildirimi" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "{pkgbase} [1] paketi {user} [2] tarafından kabul edildi." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "{pkgbase} [1] paketi {user} [2] tarafından reddedildi." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "{pkgbase} için AUR Ortak Bakıcı bildirimi" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "{pkgbase} [1] ortak bakıcı listesine eklendi." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "{pkgbase} [1] adlı ortak bakıcı listesinden çıkarıldınız." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "AUR Paketi silindi: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1], {old} [2] ile {new} [3] arasını birleştirdi.\n\n-- \nEğer yeni paket hakkında bildirim almak istemiyorsanız, lütfen [3] 'e gidin ve \"{label}\" düğmesini tıklayın." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] {pkgbase} [2] paketini sildi.\n\nArtık bu paket hakkında bildirim almayacaksınız." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Lütfen {id} [1] teklifine oy vermeyi unutmayın. Oylama süresi 48 saatten az sürer." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "Geçersiz hesap türü sağlandı." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "Hesap türlerini değiştirme izniniz yok." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "Bu kullanıcının hesap türünü %s olarak değiştirme izniniz yok." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "%s için kabul edilecek sahipsize gereksinim yok." - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "İç Sunucu Hatası" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "Önemli bir hata oluştu." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "Ayrıntılar günlüğe kaydedildi ve posta yöneticisi tarafından gözden geçirilecek. Bunun neden olabileceği rahatsızlıktan dolayı özür dileriz." - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "AUR Sunucu Hatası" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "İlgili paket isteği kapatma yorumları..." - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "Bu eylem, kendisiyle ilgili bekleyen paket isteklerini kapatacaktır. %s Yorum %s atlanırsa, bir kapatma yorumu otomatik olarak oluşturulur." - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/uk.po b/po/uk.po index 040c5085..e431c5f6 100644 --- a/po/uk.po +++ b/po/uk.po @@ -1,2390 +1,1380 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: # Lukas Fleischer , 2011 # Rax Garfield , 2012 # Rax Garfield , 2012 -# Vladislav Glinsky , 2019 -# Yarema aka Knedlyk , 2011-2018,2022 +# Yarema aka Knedlyk , 2011-2015 # Данило Коростіль , 2011 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: Yarema aka Knedlyk , 2011-2018,2022\n" -"Language-Team: Ukrainian (http://app.transifex.com/lfleischer/aurweb/language/uk/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-12 12:02+0000\n" +"Last-Translator: Yarema aka Knedlyk \n" +"Language-Team: Ukrainian (http://www.transifex.com/projects/p/aur/language/" +"uk/)\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: uk\n" -"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: html/404.php msgid "Page Not Found" msgstr "Сторінку не знайдено" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "На жаль, запитаної сторінки не існує." -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "Примітка" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Посилання на клонування сховища Git не вдасться відкрити в переглядарці." - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "Щоб клонувати сховище Git з %s, виконайте %s." - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "Клацніть %sтут%s для повернення на сторінку подробиць %s." - -#: html/503.php msgid "Service Unavailable" msgstr "Сервіс недоступний" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "Не панікуйте! Сторінка закрита на технічне обслуговування. Ми скоро повернемося." +msgstr "" +"Не панікуйте! Сторінка закрита на технічне обслуговування. Ми швидко " +"повернемося." -#: html/account.php msgid "Account" msgstr "Обліковий запис" -#: html/account.php template/header.php msgid "Accounts" msgstr "Облікові записи" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "У вас недостатньо прав доступу." -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "Не вдалося отримати інформацію про вказаного користувача." -#: html/account.php msgid "You do not have permission to edit this account." msgstr "У вас недостатньо прав для редагування цього облікового запису." -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "Неправильний пароль" - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "Шукайте облікові записи за допомогою цієї форми." -#: html/account.php msgid "You must log in to view user information." msgstr "Ви повинні увійти в систему для перегляду даних користувача." -#: html/addvote.php template/tu_list.php +msgid "Use this form to create an account." +msgstr "Створіть обліковий запис за допомогою цієї форми." + msgid "Add Proposal" msgstr "Додати пропозицію" -#: html/addvote.php msgid "Invalid token for user action." -msgstr "Невірний маркер дії користувача." +msgstr "Невірний маркер для дій користувача." -#: html/addvote.php msgid "Username does not exist." msgstr "Користувача не існує." -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s вже мають зареєстровану на себе пропозицію." -#: html/addvote.php msgid "Invalid type." msgstr "Неправильний тип." -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "Пропозиція не може бути порожньою." -#: html/addvote.php msgid "New proposal submitted." msgstr "Нову пропозицію надіслано." -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "Надіслати пропозицію для голосування." -#: html/addvote.php msgid "Applicant/TU" msgstr "Претендент/Довірений користувач" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(Порожньо, якщо не застосовується)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "Тип" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "Додавання довіреного користувача" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "Вилучення довіреного користувача" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "Вилучення довіреного користувача (неоголошена бездіяльність)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "Поправки до Статуту" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "Пропозиція" -#: html/addvote.php msgid "Submit" msgstr "Надіслати пакунок" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "Керування ко-супровідниками" +msgstr "Керування супровідниками" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "Редагувати коментар" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "Панель знарядь" - -#: html/home.php template/header.php msgid "Home" msgstr "Початкова сторінка" -#: html/home.php -msgid "My Flagged Packages" -msgstr "Мої відмічені пакунки" - -#: html/home.php -msgid "My Requests" -msgstr "Мої запити" - -#: html/home.php -msgid "My Packages" -msgstr "Мої пакунки" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "Пошук пакунків, які я підтримую" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "Пакунки з сумісним супроводом" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "Пошук пакунків з сумісним супроводом" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"Раді вітати вас в «AUR» — у сховищі користувацьких пакунків. Розширена " +"довідка надана в %sінструкції користувача AUR%s та %sінструкції довіреного " +"користувача (TU) AUR%s." -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "Надіслані PKGBUILD %sповинні%s задовольняти %sстандарти пакування%s, інакше вони вилучаються." +msgstr "" +"Надіслані PKGBUILD %sповинні%s задовольняти %sстандарти пакування%s, інакше " +"вони вилучаються." -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "Не забудьте проголосувати за улюблені пакунки!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "Деякі пакунки можуть бути в бінарному вигляді у сховищі [extra]." +msgid "Some packages may be provided as binaries in [community]." +msgstr "Деякі пакунки можуть бути в бінарному вигляді у сховищі [community]." -#: html/home.php msgid "DISCLAIMER" msgstr "ВІДМОВА ВІД ВІДПОВІДАЛЬНОСТІ" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "Пакунки у сховищі AUR - це пакунки, створені користувачами. Ви можете використовувати їх тільки на Ваш власний страх і ризик." +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "" +"Пакунки, що не підтримуються - це пакунки, створені користувачами. Ви можете " +"використовувати їх тільки на Ваш власний страх і ризик." -#: html/home.php -msgid "Learn more..." -msgstr "Дізнатись більше..." - -#: html/home.php msgid "Support" msgstr "Підтримка" -#: html/home.php msgid "Package Requests" -msgstr "Запит щодо пакунку" +msgstr "Запит пакунку" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "Існують три типи запитів, які можна створити в полі %sДія над пакунком%s на сторінці подробиць пакунку:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" +"Існують три типи запитів, які можна заповнити в полі %sДія над пакунком%s на " +"сторінці подробиць пакунку:" -#: html/home.php msgid "Orphan Request" -msgstr "Запит покинути пакунок" +msgstr "Запит на покинення пакунку" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "Запит щодо позбавлення пакунка власника, наприклад, коли супровідник пакунку неактивний і пакунок позначений як застарілий вже довгий період часу." - -#: html/home.php -msgid "Deletion Request" -msgstr "Запит щодо вилучення" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" +"Запит на позбавлення пакунка власника, наприклад, коли супровідник пакунку " +"неактивний і пакунок позначений як застарілий вже довгий період часу." + +msgid "Deletion Request" +msgstr "Запит на вилучення" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" +"Запит на вилучення пакунку зі Сховища Користувацьких Пакунків AUR. Будь " +"ласка, не використовуйте це, якщо пакунок є зламаний і його можна легко " +"направити. Для цього зв’яжіться з супровідником пакунку і заповніть форму на " +"покинення пакунку в разі необхідності." -#: html/home.php msgid "Merge Request" -msgstr "Запит щодо злиття" +msgstr "Запит на злиття" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "Запит щодо злиття пакунку з іншим пакунком. Цей запит можна використати, коли потрібно перейменувати пакунок або замінити на розділений пакунок." +msgstr "" +"Запит на злиття пакунку з іншим пакунком. Цей запит можна використати, коли " +"потрібно перейменувати пакунок або замінити на розділений пакунок." -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "Якщо Ви бажаєте обговорити запит, використайте список розсилки %saur-requests%s. Будь ласка, не використовуйте цю розсилку для подання запитів." +msgstr "" +"Якщо Ви бажаєте обговорити запит, використайте список розсилки %saur-requests" +"%s. Будь ласка, не використовуйте цю розсилку для подання запитів." -#: html/home.php -msgid "Submitting Packages" -msgstr "Надсилання пакунків" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "Git через SSH тепер використовується для надсилання пакунків до AUR. Для деталей дивіться розділ %sНадсилання пакунків%s на сторінці ArchWiki про Сховище Користувацьких Пакунків AUR." - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "Наступні відбитки ключів SSH використовуються в AUR:" - -#: html/home.php msgid "Discussion" msgstr "Обговорення" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" +"Загальне обговорення сховища користувацьких пакунків (AUR) та структури " +"довірених користувачів відбувається в %saur-general%s. Для дискусій про " +"розробку AUR використовуйте список розсилання %saur-dev%s." -#: html/home.php msgid "Bug Reporting" msgstr "Повідомлення про вади" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" +"Якщо Ви знайдете ваду в AUR, %sповідомте нам%s. Таким чином слід сповіщати " +"%sлише%s про проблеми AUR. При виявленні вади конкретного пакунка зв’яжіться " +"з його супровідником або залиште коментар на сторінці цього пакунка." -#: html/home.php msgid "Package Search" msgstr "Пошук пакунків" -#: html/index.php msgid "Adopt" msgstr "Прийняти" -#: html/index.php msgid "Vote" msgstr "Проголосувати" -#: html/index.php msgid "UnVote" msgstr "Забрати голос" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "Сповіщати" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "Не сповіщати" -#: html/index.php +msgid "Flag" +msgstr "Позначити" + msgid "UnFlag" msgstr "Зняти позначку" -#: html/login.php template/header.php msgid "Login" msgstr "Увійти" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "Ввійшов як: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "Вийти" -#: html/login.php msgid "Enter login credentials" msgstr "Увійдіть, ввівши облікові дані." -#: html/login.php -msgid "User name or primary email address" -msgstr "Назва користувача або адреса електронної пошти" +msgid "Username" +msgstr "Користувач" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "Пароль" -#: html/login.php msgid "Remember me" msgstr "Запам'ятати мене" -#: html/login.php msgid "Forgot Password" msgstr "Забули пароль?" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "Реєстрування через HTTP вимкнено. Будь-ласка, %sперейдіть на HTTPs%s для входу." +msgstr "" +"Реєстрування через HTTP вимкнено. Будь-ласка, %sперейдіть на HTTPs%s для " +"входу." -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "Критерії пошуку" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "Пакунки" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "Стався збій під час пошуку інформації про пакунок." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "Бракує обов’язкового рядка." -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "Паролі не збігаються." -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "Ваш пароль має містити щонайменше %s символів." -#: html/passreset.php msgid "Invalid e-mail." msgstr "Неправильна електронна адреса." -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" +"Запит на скинення паролю для облікового запису %s надісланий на пов’язану з " +"ним адресу електронної пошти. Щоб скинути пароль, натисніть на посилання " +"нижче; щоб залишити все як є, проігноруйте це повідомлення." + msgid "Password Reset" msgstr "Скидання паролю" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "Перевірте свою електронну пошту для підтвердження." -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "Ваш пароль успішно скинуто." -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "Підтвердити назву користувача або адреса електронної пошти:" +msgid "Confirm your e-mail address:" +msgstr "Підтвердьте адресу електронної пошти:" -#: html/passreset.php msgid "Enter your new password:" msgstr "Введіть новий пароль:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "Підтвердження нового паролю:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "Продовжити" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "Якщо Ви забули назву користувача і адресу електронної пошти, використану при реєстрації, зверніться до списку розсилання %saur-general%s." +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"Якщо Ви забули електронну адресу, використану при реєстрації, зверніться до " +"списку розсилання %saur-general%s" -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "Введіть назву користувача або адресу електронної пошти:" +msgid "Enter your e-mail address:" +msgstr "Введіть адресу електронної пошти:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "Бази пакунків" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." msgstr "Вибрані пакунки все ще мають власника, підтвердіть дію." -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "Обрані пакунки не прийнято, перевірте, чи поставлено галочку в полі підтвердження." - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "Не вдалося знайти пакунок для об’єднання голосів та коментарів." -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "Неможливо злити пакунок з самим собою." -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "Обрані пакунки не вилучено, перевірте, чи поставлено галочку в полі підтвердження." +"The selected packages have not been deleted, check the confirmation checkbox." +msgstr "" +"Обрані пакунки не вилучено, перевірте, чи поставлено галочку в полі " +"підтвердження." -#: html/pkgdel.php msgid "Package Deletion" msgstr "Вилучення пакунку" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "Вилучити пакунок" +#, php-format +msgid "Delete Package: %s" +msgstr "Вилучити пакунок: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "Використовуйте цю форму для вилучення бази пакунків %s%s%s і наступних пакунків з AUR. " +msgstr "Використовуйте цю форму для вилучення пакунку %s%s%s з AUR. " -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "Вилучення пакунку є безповоротне." -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "Встановіть галочку, щоб підтвердити дію." -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "Підтвердити вилучення пакунку" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "Вилучити" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "Тільки Довірені Користувачі та Розробники можуть вилучати пакунки." -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "Зректися пакунку" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "Позбавлення пакунка власника: %s" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "Використайте ці форму для позбавлення бази пакунків %s%s%s власника, яка містить наступні пакунки:" +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" +"Використайте ці форму для позбавлення базового пакунка %s%s%s власника, який " +"містить наступні пакунки:" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "Вибираючи це, Ви підтверджуєте, що не бажаєте бути співсупровідником." - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "Вибираючи це, Ви підтверджуєте, що бажаєте позбавити пакунок власника і перенести права власності до %s%s%s." +msgstr "" +"Вибираючи це, Ви підтверджуєте, що бажаєте позбавити пакунок власника і " +"перенести права власності до %s%s%s." -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." msgstr "Вибираючи це, Ви підтверджуєте, що бажаєте позбавити пакунок власника." -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "Підтвердіть позбавлення пакунка власника" -#: html/pkgdisown.php msgid "Disown" msgstr "Відректися" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" +"Тільки Довірені Користувачі та Розробники можуть забирати права власності на " +"пакунок." -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "Позначити коментар" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "Позначити пакунок як застарілий" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "Здається, це пакет VCS. Будь ласка, %sне%s позначайте його як застарілий, якщо версія пакета в AUR не відповідає останньому коміту. Позначити цей пакунок слід лише в тому випадку, якщо джерела переміщено або потрібні зміни в PKGBUILD в зв'язку з останніми змінами." - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "Використовуйте цю форму для позначення бази пакунків %s%s%s і наступні пакунки як застарілі:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "Будь ласка, %sне%s використовуйте цю форму для повідомлення про вади. Використовуйте для цього коментарі до пакунку." - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "Введіть нижче деталі, чому пакунок є застарілим, по можливості подайте посилання до оголошення про новий випуск або архів оновленого випуску." - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "Коментарі" - -#: html/pkgflag.php -msgid "Flag" -msgstr "Позначити" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "Тільки зареєстровані користувачі можуть позначати пакунки як застарілі." - -#: html/pkgmerge.php msgid "Package Merging" msgstr "Об’єднання пакунків" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "Об’єднати пакунок" +#, php-format +msgid "Merge Package: %s" +msgstr "Об’єднати пакунки: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "Використовуйте цю форму для злиття бази пакунків %s%s%s з іншим пакунком." +msgstr "Використовуйте цю форму для злиття пакунку %s%s%s з іншим пакунком." -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "Наступні пакунки будуть вилучені:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "Як тільки пакунок буде об’єднаний, його вже неможливо повернути." -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "Введіть назву пакунка, до якого потрібно приєднати цей." -#: html/pkgmerge.php msgid "Merge into:" msgstr "Об’єднати з:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "Підтвердити об’єднання пакунків" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "Об’єднати" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "Тільки Довірені Користувачі та Розробники можуть об’єднувати пакунки." -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "Надіслати запит" +msgid "File Request" +msgstr "Запит файлу" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" -msgstr "Закриття запиту" +msgstr "Замкнути запит" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "Перший" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "Попередній" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "Далі" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "Останній" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "Запити" -#: html/register.php template/header.php -msgid "Register" -msgstr "Зареєструватись" +msgid "Trusted User" +msgstr "Довірений користувач" -#: html/register.php -msgid "Use this form to create an account." -msgstr "Створіть обліковий запис за допомогою цієї форми." - -#: html/tos.php -msgid "Terms of Service" -msgstr "Умови обслуговування" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "Наступні документи оновлено. Перевірте їх уважно: " - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "перегляд %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "Я приймаю подані вище терміни і умови. " - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "Не вдалось отримати подробиць пропозиції." -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "Голосування на цю пропозицію закрито." -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "Тільки Довірені Користувачі мають право голосу." -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "Ви не можете голосувати за свою пропозицію." -#: html/tu.php msgid "You've already voted for this proposal." msgstr "Ви вже проголосували за цю пропозицію." -#: html/tu.php msgid "Vote ID not valid." msgstr "Ідентифікатор голосу неправильний." -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "Поточні голосування" -#: html/tu.php msgid "Past Votes" msgstr "Минулі голосування" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "Проголосували" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Реєстрація облікових записів закрита для вашої IP-адреси, можливо із-за інтенсивних спам-атак. Вибачте за незручності." +msgstr "" +"Реєстрація рахунку закрита для Вашої адреси IP, можливо із-за інтенсивної " +"спам-атаки. Вибачте за незручності." -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "Бракує ідентифікатора користувача" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "Користувач неправильний." -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "Кількість символів повинна бути від %s до %s" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "Початок та кінець з літери або цифри" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "Може містити тільки один період, підкреслення або дефіс." -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "Підтвердіть новий пароль, будь ласка." - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "Адреса електронної пошти неправильна." -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "Неправильна адреса електронної пошти для відновлення." - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "Неправильна домашня сторінка, вкажіть повну адресу HTTP(s)." - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "Відбиток ключа PGP недійсний." -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "Неправильний публічний ключ SSH." -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." -msgstr "Неможливо збільшити дозволи облікового запису." +msgstr "Неможливо збільшити дозволи рахунку." -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "Наразі ця мова не підтримується." -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "Наразі часова зона не підтримується." - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "Назва користувача %s%s%s вже використовується." -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "Адрес %s%s%s вже використовується." -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "Публічний ключ SSH, %s%s%s, вже використовується." -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "Пропущено CAPTCHA." - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "Термін дії цієї CAPTCHA закінчився. Будь ласка, спробуйте ще раз." - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "Введена відповідь CAPTCHA недійсна." - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." -msgstr "Помилка при спробі створити обліковий запис %s%s%s." +msgstr "Помилка при спробі створити рахунок %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." -msgstr "Обліковий запис %s%s%s успішно створено." +msgstr "Рахунок %s%s%s успішно створено." + +msgid "Click on the Login link above to use your account." +msgstr "" +"Використовуйте обліковий запис, увійшовши за допомогою посилання " +"«Увійти» (згори)." + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"Вітаємо в %s! Щоб встановити початковий пароль для Вашого рахунку натисніть " +"на посилання зверху. Якщо посилання не спрацьовує, скопіюйте його і вставте " +"у Ваш переглядач інтернету." -#: lib/acctfuncs.inc.php msgid "A password reset key has been sent to your e-mail address." msgstr "Ключ скидання пароля висланий на Вашу адресу електронної пошти." -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "Використовуйте обліковий запис, увійшовши за допомогою посилання «Увійти» (згори)." - -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." -msgstr "Жодних змін до облікового запису %s%s%s не внесено." +msgstr "Ніяких змін не внесено до рахунку, %s%s%s." -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." -msgstr "Обліковий запис %s%s%s успішно змінено." +msgstr "Рахунок %s%s%s успішно змінено." -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "Форма логування зараз заборонена для Вашої адреси IP, можливо із-за інтенсивної спам-атаки. Вибачте за незручності." +msgstr "" +"Форма логування зараз заборонена для Вашої адреси IP, можливо із-за " +"інтенсивної спам-атаки. Вибачте за незручності." -#: lib/acctfuncs.inc.php msgid "Account suspended" -msgstr "Обліковий запис вилучено" +msgstr "Рахунок вилучено" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr " \nВи не маєте дозволу на призупинення облікових записів." - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "Ваш пароль скинуто. Якщо Ви щойно створили новий обліковий запис, використайте посилання з електронного листа-підтвердження для встановлення початкового пароля. В протилежному випадку використовайте запит щодо скидання пароля на сторінці %sPassword Reset%s." +msgstr "" +"Ваш пароль скинуто. Якщо Ви щойно створили новий рахунок, тоді використайте " +"посилання електронного листа-підтвердження для встановлення початкового " +"пароля. В протилежному випадку використайте запит на скидання паролю на " +"сторінці %sPassword Reset%s." -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "Неправильний користувач або пароль. " -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "Сталася помилка під час створення сесії користувача." -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "Неприпустима адреса електронної пошти й комбінація клавіш скидання." -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "Немає" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "Переглянути інформацію облікового запису %s" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "ID бази пакунків або ж назва бази пакунків пропущена." - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "У вас немає прав, щоб редагувати цей коментар." - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "Коментаря не існує." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "Коментар не може бути порожнім." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "Коментар додано." - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "Ви повинні увійти у систему, щоб мати можливість редагувати інформацію про пакунок." - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "Немає ідентифікатора коментаря." - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "Можна прикріпити не більше 5 коментарів." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "Вам заборонено прикріпляти цей коментар." - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "Вам заборонено відкріпляти цей коментар." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "Коментар прикріплено." - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "Коментар відкріплено." - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "Помилка пошуку інформації про пакунок." -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "Інформації про пакунок не знайдено." -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "Поганий заголовок Referer." - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "Ви не вибрали жодних пакунків, про які потрібно сповіщати." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "Сповіщення для вибраних пакунків увімкнено." - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "Ви не вибрали жодних пакунків для видалення сповіщень." - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "У вибраному вами пакунку не ввімкнено сповіщення." - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "Сповіщення для вибраних пакунків видалено." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "Для встановлення мітки слід увійти." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "Ви не вибрали жодного пакунку для мітки." -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "Вибрані пакунки не мають міток, подайте коментар, будь ласка." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "Для вибраних пакунків призначено мітку «застарілий»." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "Для зняття мітки слід увійти." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "Не вибрано жодного пакунку, щоб зняти мітку." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "З вибраних пакунків було знято мітку." -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "У Вас немає прав для вилучення пакунків." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "Не вибрано жодного пакунку для вилучення." -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "Один із вибраних Вами пакунків не існує." - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "Вибрані пакунки вилучено." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "Для перейняття пакунків слід увійти." -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "У Вас немає дозволу прийняти один з вибраних Вами пакунків." - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "Для зречення пакунків слід увійти." -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "У Вас немає дозволу відмовитися від одного з вибраних Вами пакунків" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "Ви не вибрали жодного пакунку для переймання." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "Не вибрано жодного пакунку, щоб зректись." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "Вибрані пакунки перейнято." -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "Ви зреклись вибраних пакунків." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "Для голосування слід увійти." -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "Для скасування голосу слід увійти." -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "Ви не вибрали жодного пакунка для голосування." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "Ваші голоси вилучено з вибраних пакунків." -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "Ви проголосували за вибрані пакунки." -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "Неможливо долучити до списку соповіщень." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "Вас долучено до списку сповіщень про коментарі для %s." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "Вас вилучено із списку сповіщень про коментарі для %s." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "Вам заборонено відновлювати цей коментар." +msgid "You must be logged in before you can edit package information." +msgstr "" +"Ви повинні увійти у систему, щоб мати можливість редагувати інформацію про " +"пакунок." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "Коментар відновлено." +msgid "Missing comment ID." +msgstr "Немає ідентифікатора коментаря." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "У вас немає прав, щоб вилучити цей коментар." - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "Коментар вилучено." -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "Коментар редаговано." +msgid "You are not allowed to delete this comment." +msgstr "У вас немає прав, щоб вилучити цей коментар." -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "Ви не маєте прав для редагування ключових слів для цієї бази пакунків." +msgid "Missing category ID." +msgstr "Пропущено ідентифікатор категорії." -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "Ключові слова бази пакунків оновлено." +msgid "Invalid category ID." +msgstr "Неправильний ідентифікатор категорії." + +msgid "You are not allowed to change this package category." +msgstr "Ви не можете змінити катеогрію цього пакунку." + +msgid "Package category changed." +msgstr "Категорію пакунку змінено." -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "Ви не має прав для керування ко-супровідниками цієї бази пакунків." +msgstr "Ви не має прав для керування супровідниками цього базового пакунку." -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "Неправильна назва користувача: %s" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "Оновлено ко-супровідників бази пакунків." +msgstr "Оновлено супровідників базового пакунку." -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "Показати деталі пакунку для " -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "вимагається %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." -msgstr "Ви повинні увійти, щоб створювати запити щодо пакунків." +msgstr "Ви повинні увійти, щоб робити запит пакунків." -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "Неправильна назва: дозволено тільки малі літери." -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "Поле коментаря не повинно пустувати." -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "Неправильний тип запиту." -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "Запит успішно додано." -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "Неправильна причина." -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "Тільки TU (довірені користувачі) і розробники можуть закривати запити." -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "Запит успішно закритий." -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "Для безповоротного видалення облікового запису %s з AUR ви можете використати цю форму." +msgstr "Ви можете використати цю форму для вилучення рахунку в AUR %s." -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%sУВАГА%s: Цю дію неможливо відмінити." -#: template/account_delete.php msgid "Confirm deletion" msgstr "Підтвердити вилучення" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "Користувач" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "Тип облікового запису" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "Користувач" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "Розробник" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "Довірений користувач & Розробник" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Адреса електронної пошти" -#: template/account_details.php -msgid "hidden" -msgstr "приховано" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "Справжнє ім'я" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "Домашня сторінка" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "Псевдонім IRC" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "Відбиток ключа PGP" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "Статус" -#: template/account_details.php msgid "Inactive since" msgstr "Неактивний з" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "Активний" -#: template/account_details.php -msgid "Registration date:" -msgstr "Дата реєстрації:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "невідомо" - -#: template/account_details.php msgid "Last Login" msgstr "Останній вхід" -#: template/account_details.php msgid "Never" msgstr "Ніколи" -#: template/account_details.php msgid "View this user's packages" msgstr "Переглянути пакунки цього користувача" -#: template/account_details.php msgid "Edit this user's account" -msgstr "Редагувати обліковий запис цього користувача" +msgstr "Редагування рахунку цього користувача" -#: template/account_details.php -msgid "List this user's comments" -msgstr "Показати коментарі цього користувача" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "Натисніть %sтут%s, якщо Ви бажаєте безповоротно вилучити цей рахунок." -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "Клацніть %sтут%s, щоб дізнатися більше про користувача." - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "Натисніть %sтут%s, щоб показати коментарі, зроблені цим обліковим записом." - -#: template/account_edit_form.php msgid "required" msgstr "обов'язково" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "Ваша назва користувача є назвою, що буде використовуватися для входу. Вона буде видимою для всіх, навіть якщо Ваш рахунок неактивний." - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "Звичайний користувач" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "Довіренний користувач" + msgid "Account Suspended" msgstr "Обліковий запис призупинено" -#: template/account_edit_form.php msgid "Inactive" msgstr "Неактивний" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "Будь ласка переконайтесь, що Ви правильно ввели Вашу адресу електронної пошти, інакше Ви будете заблоковані." - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "Приховати адресу електронної пошти" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "Якщо ви не приховаєте свою адресу електронної пошти, тоді її можуть бачити всі зареєстровані користувачі AUR. Якщо Ви приховаєте свою адресу електронної пошти, тоді її зможуть бачити лише співробітники Arch Linux." - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "Резервна адреса електронної пошти" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "За бажанням вкажіть додаткову адресу електронної пошти, яку можна використовувати для відновлення облікового запису на випадок втрати доступу до своєї основної електронної адреси." - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "Посилання для скидання пароля завжди надсилаються як на вашу основну, так і на резервну адресу електронної пошти." - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "Вашу резервну електронну адресу завжди бачать лише співробітники Arch Linux, незалежно від налаштувань. %s ." - -#: template/account_edit_form.php -msgid "Language" -msgstr "Мова" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "Часова зона" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "Якщо Ви бажаєте змінити пароль, введіть новий пароль і підтвердьте новий пароль, ввівши його ще раз." - -#: template/account_edit_form.php msgid "Re-type password" msgstr "Введіть пароль ще раз" -#: template/account_edit_form.php +msgid "Language" +msgstr "Мова" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "Наступну інформацію потрібно, якщо Ви бажаєте надіслати пакунки до Сховища Користувацьких Пакунків AUR." - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" +"Наступну інформацію потрібно, якщо Ви бажаєте надіслати пакунки до Сховища " +"Користувацьких Пакунків AUR." -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "Публічний ключ SSH" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "Налаштування повідомлень" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "Сповіщати про нові коментарі" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "Повідомлення про оновлення пакунків" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "Сповіщення про зміну власника" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "Щоб підтвердити зміни профілю, введіть поточний пароль:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "Ваш поточний пароль" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "Щоб захистити AUR від автоматичного створення облікового запису, ми просимо Вас надати результат такої команди:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "Відповідь" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "Оновити" -#: template/account_edit_form.php msgid "Create" msgstr "Створити" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "Очистити" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "За вашим запитом нічого не знайдено." -#: template/account_search_results.php msgid "Edit Account" msgstr "Редагувати обліковий запис" -#: template/account_search_results.php msgid "Suspended" msgstr "Призупинено" -#: template/account_search_results.php msgid "Edit" msgstr "Редагувати" -#: template/account_search_results.php msgid "Less" msgstr "Менше" -#: template/account_search_results.php msgid "More" msgstr "Більше" -#: template/account_search_results.php msgid "No more results to display." msgstr "Більше немає результатів." -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "Керування супровідниками: %s" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "Використайте цю форму для додавання ко-супровідника для %s%s%s (одна назва користувача в одній стрічці):" +msgstr "" +"Використайте цю форму для додавання супровідника для %s%s%s (одна назва " +"користувача в одній стрічці):" -#: template/comaintainers_form.php msgid "Users" msgstr "Користувачі" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "Зберегти" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "Позначено як застарілий коментар: %s" +msgid "My Packages" +msgstr "Мої пакунки" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s позначено %s%s%s як застарілий на %s%s%s з наступної причини:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s не позначений як застарілий." - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "Повернення до подробиць." - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Всі права застережено %s 2004-%d Команда Розробників aurweb." - -#: template/header.php msgid " My Account" -msgstr "Мій обліковий запис" +msgstr "Мій рахунок" + +msgid "Register" +msgstr "Зареєструватись" + +msgid "unknown" +msgstr "невідомо" + +msgid "Package Base Details" +msgstr "Деталі бази пакунків" -#: template/pkgbase_actions.php msgid "Package Actions" msgstr "Дії над пакунком" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "Переглянути PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "Переглянути зміни" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "Звантажити поточну версію" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "Шукати у Вікі" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "Позначено як застарілий (%s)" +msgid "Flagged out-of-date" +msgstr "Позначено як застарілий" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "Позначити пакунок як застарілий" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "Відмінити позначення" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "Вилучити голос" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "Голосувати за цей пакунок" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "Відключити сповіщення" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "Включити сповіщення" +msgid "Notify of new comments" +msgstr "Сповіщати про нові коментарі" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "Керування ко-супровідниками" +msgstr "Керування Супровідниками" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d запит в обробці" msgstr[1] "%d запитів в обробці" msgstr[2] "%d запитів в обробці" -msgstr[3] "%d запитів в обробці" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "Вилучити пакунок" + +msgid "Merge Package" +msgstr "Об’єднати пакунок" + msgid "Adopt Package" msgstr "Прийняти пакунок" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "Деталі бази пакунків" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "Адреса URL для клонування Git" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "тільки для читання" +msgid "Category" +msgstr "Категорія" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "натисніть, щоб скопіювати" +msgid "Change category" +msgstr "Змінити категорію" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "Ключові слова" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "Подавач" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "Показати інформацію про рахунок для %s" + msgid "Maintainer" msgstr "Супровідник" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "Останній збирач пакунку" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "Голоси" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "Популярність" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "Вперше надіслано" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "Останній раз оновлено" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "Редагувати коментар для: %s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "Додати коментар" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "Відповідні відсилачі комітів до ідентифікаторів комітів Git в сховищі пакунків AUR та URL-адреси автоматично перетворюються на посилання." +msgid "Comment has been added." +msgstr "Коментар додано." -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "%sСинтакс Markdown%s підтримується частково." +msgid "View all comments" +msgstr "Переглянути всі коментарі" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "Прикріплені коментарі" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "Останні коментарі" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "Коментарі для" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s коментував про %s" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "Анонімний коментар про %s" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "Коментовано пакунок %s з датою %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "вилучено на %s через %s" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "вилучено %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "редаговано %s через %s" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "редаговано %s" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "Відновити коментар" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "Вилучити коментар" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "Прикріпити коментар" +#, php-format +msgid "Comment by %s" +msgstr "Автор коментаря — %s" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "Відкріпити коментар" +msgid "Anonymous comment" +msgstr "Анонімний коментар" + +msgid "deleted" +msgstr "вилучено" + +msgid "All comments" +msgstr "Всі коментарі" -#: template/pkg_details.php msgid "Package Details" msgstr "Подробиці пакунку" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "База пакунків" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "Опис" -#: template/pkg_details.php msgid "Upstream URL" msgstr "Посилання" -#: template/pkg_details.php msgid "Visit the website for" msgstr "Відвідати веб-сторінку для" -#: template/pkg_details.php msgid "Licenses" msgstr "Ліцензії" -#: template/pkg_details.php msgid "Groups" msgstr "Групи" -#: template/pkg_details.php msgid "Conflicts" msgstr "Конфлікти" -#: template/pkg_details.php msgid "Provides" msgstr "Забезпечує" -#: template/pkg_details.php msgid "Replaces" msgstr "Замінює" -#: template/pkg_details.php msgid "Dependencies" msgstr "Залежності" -#: template/pkg_details.php msgid "Required by" msgstr "Потрібен для" -#: template/pkg_details.php msgid "Sources" msgstr "Сирці" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "Закрити запит: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." -msgstr "Використайте цю форму для закриття запиту щодо бази пакунків %s%s%s." +msgstr "Використайте цю форму для закриття запиту бази пакетів %s%s%s." + +msgid "Note" +msgstr "Примітка" -#: template/pkgreq_close_form.php msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." -msgstr "Поле коментарів може залишатися пустим. Тим не менше, рекомендовано залишити коментар при відкиданні запиту." +msgstr "" +"Поле коментарів може залишатися пустим. Тим не менше, рекомендовано залишити " +"коментар при відкиданні запиту." -#: template/pkgreq_close_form.php msgid "Reason" msgstr "Причина" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "Прийнято" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "Відхилено" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "Коментарі" + +#, php-format +msgid "File Request: %s" +msgstr "Запит файлу: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "Використайте цю форму для створення запиту щодо бази пакунків %s%s%s, яка містить наступні пакунки:" +msgstr "" +"Використайте цю форму для запиту файлу з бази пакунків %s%s%s, який містить " +"наступні пакунки:" -#: template/pkgreq_form.php msgid "Request type" msgstr "Тип запиту" -#: template/pkgreq_form.php msgid "Deletion" msgstr "Вилучення" -#: template/pkgreq_form.php msgid "Orphan" -msgstr "Покинути" +msgstr "Позначити застарілим" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "Об'єднати в" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "Жоден запит не відповідає Вашим критеріям пошуку." - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "Знайдено %d запит пакунку." msgstr[1] "Знайдено %d запитів пакунку." -msgstr[2] "Знайдено %d запитів щодо пакунків." -msgstr[3] "Знайдено %d запитів щодо пакунків." +msgstr[2] "Знайдено %d запитів пакунку." -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "Сторінка %d з %d." -#: template/pkgreq_results.php msgid "Package" msgstr "Пакунок" -#: template/pkgreq_results.php msgid "Filed by" msgstr "Запаковано через" -#: template/pkgreq_results.php msgid "Date" msgstr "Дата" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "~%d день залишився" -msgstr[1] "~%d днів залишилося" -msgstr[2] "~%d днів залишилося" -msgstr[3] "~%d днів залишилося" +msgid "~%d days left" +msgstr "~%d днів залишилося" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "~%d година залишилася" msgstr[1] "~%d годин залишилося" msgstr[2] "~%d годин залишилося" -msgstr[3] "~%d годин залишилося" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "<1 години залишилося" -#: template/pkgreq_results.php msgid "Accept" msgstr "Прийняти" -#: template/pkgreq_results.php msgid "Locked" msgstr "Замкнено" -#: template/pkgreq_results.php msgid "Close" msgstr "Закрити" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "В очікуванні" - -#: template/pkgreq_results.php msgid "Closed" msgstr "Замкнено" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "Назва, опис" -#: template/pkg_search_form.php msgid "Name Only" msgstr "Назва" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "Точна назва" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "Точна база пакунків" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "Ко-супровідник" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "Супровідник, ко-супровідник" - -#: template/pkg_search_form.php msgid "All" msgstr "Всі" -#: template/pkg_search_form.php msgid "Flagged" msgstr "Позначені" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "Не позначені" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "Назва" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "Популярність" + msgid "Voted" msgstr "Проголосовано" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "Востаннє змінювалося" +msgid "Age" +msgstr "Вік" -#: template/pkg_search_form.php msgid "Ascending" msgstr "Висхідний" -#: template/pkg_search_form.php msgid "Descending" msgstr "Спадний" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "Введіть критерії пошуку" -#: template/pkg_search_form.php +msgid "Any" +msgstr "Будь-який" + msgid "Search by" msgstr "Де шукати" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "Ключові слова" + msgid "Out of Date" msgstr "Застарілих" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "Упорядкувати за" -#: template/pkg_search_form.php msgid "Sort order" msgstr "Порядок упорядкування" -#: template/pkg_search_form.php msgid "Per page" msgstr "Результатів на сторінку" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Перейти" -#: template/pkg_search_form.php msgid "Orphans" msgstr "Покинуті" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "Помилка отримання списку пакунків." -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "За вашим запитом не знайдено пакунків." -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "Знайдено %d пакунок." msgstr[1] "Знайдено %d пакунків." msgstr[2] "Знайдено %d пакунків." -msgstr[3] "Знайдено %d пакунків." -#: template/pkg_search_results.php msgid "Version" msgstr "Версія" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "Популярність розраховується як сума всіх голосувань, де кожен голос береться з ваговим коефіцієнтом %.2f за кожен день з часу створення." - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "Так" -#: template/pkg_search_results.php msgid "orphan" msgstr "покинутий" -#: template/pkg_search_results.php msgid "Actions" msgstr "Дії" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "Призначити мітку «застарілий»" + msgid "Unflag Out-of-date" msgstr "Зняти мітку «застарілий»" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "Прийняти пакунки" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "Зректися пакунків" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "Вилучити пакунки" -#: template/pkg_search_results.php msgid "Confirm" msgstr "Підтвердити" -#: template/search_accounts_form.php msgid "Any type" msgstr "Будь-який тип" -#: template/search_accounts_form.php msgid "Search" msgstr "Пошук" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "Статистика" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "Покинуті пакунки" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "Пакунки, додані за останні 7 днів" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "Пакунки, оновлені за останні 7 днів" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "Пакунки, оновлені за останній рік" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "Пакунки, що ніколи не оновлювалися" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "Зареєстровані користувачі" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "Довірені користувачі" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "Останні зміни" -#: template/stats/updates_table.php -msgid "more" -msgstr "більше" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "Моя статистика" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "Пакунки в AUR" + msgid "Proposal Details" msgstr "Подробиці пропозиції" -#: template/tu_details.php msgid "This vote is still running." msgstr "Це голосування все ще доречне." -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "Подано: %s з %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "Кінець" -#: template/tu_details.php msgid "Result" msgstr "Результат" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "Ні" -#: template/tu_details.php msgid "Abstain" msgstr "Утриматися" -#: template/tu_details.php msgid "Total" msgstr "Всього" -#: template/tu_details.php msgid "Participation" msgstr "Участь" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "Останні голосування через TU" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "Останнє голосування" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "Результатів не знайдено." -#: template/tu_list.php msgid "Start" msgstr "Початок" -#: template/tu_list.php msgid "Back" msgstr "Назад" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "Скидання паролю на AUR" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "Запит скидання пароля для облікового запису {user} надіслано на пов’язану з ним адресу електронної пошти. Щоб скинути пароль, перейдіть за посиланням [1] нижче; щоб залишити все як є, проігноруйте це повідомлення." - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "Вітаємо Вас в Arch User Repository — сховищі користувацьких пакунків" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "Вітаємо в AUR – сховищі користувацьких пакунків! Щоб встановити початковий пароль для вашого облікового запису натисніть на посилання [1] нижче. Якщо посилання не спрацьовує, скопіюйте його і вставте у ваш браузер." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "AUR коментар для {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] додав наступний коментар до {pkgbase} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "Якщо Ви не бажаєте більше отримувати повідомлення про цей пакунок, тоді перейдіть на сторінку пакунка [2] і натисніть \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "Оновлення пакунку AUR: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] додав наступний коментар до {pkgbase} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "Повідомлення AUR про застарілі для {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "Цьому пакунку {pkgbase} [1] призначено мітку застарілий користувачем {user} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "Повідомлення AUR про присвоєння для {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "Цей пакунок {pkgbase} [1] був прийнятий користувачем {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "Пакунок {pkgbase} [1] був покинутий користувачем {user} [2]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "Повідомлення про співсупровід AUR для {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "Вас додали до списку співсупровідників {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "Вас видалили зі списку співсупровідників {pkgbase} [1]." - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "Пакунок з AUR вилучено: {pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] з'єднав {old} [2] до {new} [3].\n\n-- \nЯкщо Ви не бажаєте більше отримувати сповіщення про новий пакунок, перейдіть на сторінку [3] і натисніть \"{label}\"." - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] вилучив {pkgbase} [2].\n\nВи більше не будете отримувати повідомлень про цей пакунок." - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "Будь ласка, не забудьте подати свій голос на пропозицію {id} [1]. Голосування закінчиться за менш ніж 48 годин." - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "Вказано недійсний тип облікового запису." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "У Вас немає дозволу змінювати типи облікових записів." - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "Ви не маєте дозволу змінити тип облікового запису цього користувача на %s." - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "Немає наявних запитів на прийняття для %s." - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "Внутрішня помилка сервера" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "Сталася фатальна помилка." - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "Подробиці зареєстровані та будуть переглянуті поштмейстером posthaste. Просимо вибачення за можливі незручності." - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "Помилка сервера AUR" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "Пов'язані коментарі щодо закриття запиту на пакунок..." - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "Ця дія закриє всі запити на пакет, що очікують на розгляд. Якщо %sКоментарі%s пропущено, тоді буде автоматично згенеровано коментар закриття." - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/vi.po b/po/vi.po deleted file mode 100644 index c3f919c4..00000000 --- a/po/vi.po +++ /dev/null @@ -1,2369 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Vietnamese (http://app.transifex.com/lfleischer/aurweb/language/vi/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: vi\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/zh.po b/po/zh.po deleted file mode 100644 index 7abbe77e..00000000 --- a/po/zh.po +++ /dev/null @@ -1,2369 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Chinese (http://app.transifex.com/lfleischer/aurweb/language/zh/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: html/404.php -msgid "Page Not Found" -msgstr "" - -#: html/404.php -msgid "Sorry, the page you've requested does not exist." -msgstr "" - -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "" - -#: html/503.php -msgid "Service Unavailable" -msgstr "" - -#: html/503.php -msgid "" -"Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "" - -#: html/account.php -msgid "Account" -msgstr "" - -#: html/account.php template/header.php -msgid "Accounts" -msgstr "" - -#: html/account.php html/addvote.php -msgid "You are not allowed to access this area." -msgstr "" - -#: html/account.php -msgid "Could not retrieve information for the specified user." -msgstr "" - -#: html/account.php -msgid "You do not have permission to edit this account." -msgstr "" - -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "" - -#: html/account.php -msgid "Use this form to search existing accounts." -msgstr "" - -#: html/account.php -msgid "You must log in to view user information." -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Add Proposal" -msgstr "" - -#: html/addvote.php -msgid "Invalid token for user action." -msgstr "" - -#: html/addvote.php -msgid "Username does not exist." -msgstr "" - -#: html/addvote.php -#, php-format -msgid "%s already has proposal running for them." -msgstr "" - -#: html/addvote.php -msgid "Invalid type." -msgstr "" - -#: html/addvote.php -msgid "Proposal cannot be empty." -msgstr "" - -#: html/addvote.php -msgid "New proposal submitted." -msgstr "" - -#: html/addvote.php -msgid "Submit a proposal to vote on." -msgstr "" - -#: html/addvote.php -msgid "Applicant/TU" -msgstr "" - -#: html/addvote.php -msgid "(empty if not applicable)" -msgstr "" - -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Type" -msgstr "" - -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" - -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" - -#: html/addvote.php -msgid "Amendment of Bylaws" -msgstr "" - -#: html/addvote.php template/tu_list.php -msgid "Proposal" -msgstr "" - -#: html/addvote.php -msgid "Submit" -msgstr "" - -#: html/comaintainers.php template/comaintainers_form.php -msgid "Manage Co-maintainers" -msgstr "" - -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "" - -#: html/home.php template/header.php -msgid "Home" -msgstr "" - -#: html/home.php -msgid "My Flagged Packages" -msgstr "" - -#: html/home.php -msgid "My Requests" -msgstr "" - -#: html/home.php -msgid "My Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " -"otherwise they will be deleted!" -msgstr "" - -#: html/home.php -msgid "Remember to vote for your favourite packages!" -msgstr "" - -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "" - -#: html/home.php -msgid "DISCLAIMER" -msgstr "" - -#: html/home.php template/footer.php -msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "" - -#: html/home.php -msgid "Learn more..." -msgstr "" - -#: html/home.php -msgid "Support" -msgstr "" - -#: html/home.php -msgid "Package Requests" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "" - -#: html/home.php -msgid "Orphan Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be disowned, e.g. when the maintainer is inactive and " -"the package has been flagged out-of-date for a long time." -msgstr "" - -#: html/home.php -msgid "Deletion Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "" - -#: html/home.php -msgid "Merge Request" -msgstr "" - -#: html/home.php -msgid "" -"Request a package to be merged into another one. Can be used when a package " -"needs to be renamed or replaced by a split package." -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you want to discuss a request, you can use the %saur-requests%s mailing " -"list. However, please do not use that list to file requests." -msgstr "" - -#: html/home.php -msgid "Submitting Packages" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "" - -#: html/home.php -msgid "Discussion" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "" - -#: html/home.php -msgid "Bug Reporting" -msgstr "" - -#: html/home.php -#, php-format -msgid "" -"If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "" - -#: html/home.php -msgid "Package Search" -msgstr "" - -#: html/index.php -msgid "Adopt" -msgstr "" - -#: html/index.php -msgid "Vote" -msgstr "" - -#: html/index.php -msgid "UnVote" -msgstr "" - -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php -msgid "Notify" -msgstr "" - -#: html/index.php template/pkg_search_results.php -msgid "UnNotify" -msgstr "" - -#: html/index.php -msgid "UnFlag" -msgstr "" - -#: html/login.php template/header.php -msgid "Login" -msgstr "" - -#: html/login.php html/tos.php -#, php-format -msgid "Logged-in as: %s" -msgstr "" - -#: html/login.php template/header.php -msgid "Logout" -msgstr "" - -#: html/login.php -msgid "Enter login credentials" -msgstr "" - -#: html/login.php -msgid "User name or primary email address" -msgstr "" - -#: html/login.php template/account_delete.php template/account_edit_form.php -msgid "Password" -msgstr "" - -#: html/login.php -msgid "Remember me" -msgstr "" - -#: html/login.php -msgid "Forgot Password" -msgstr "" - -#: html/login.php -#, php-format -msgid "" -"HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "" - -#: html/packages.php template/pkg_search_form.php -msgid "Search Criteria" -msgstr "" - -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php -msgid "Packages" -msgstr "" - -#: html/packages.php -msgid "Error trying to retrieve package details." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Missing a required field." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -msgid "Password fields do not match." -msgstr "" - -#: html/passreset.php lib/acctfuncs.inc.php -#, php-format -msgid "Your password must be at least %s characters." -msgstr "" - -#: html/passreset.php -msgid "Invalid e-mail." -msgstr "" - -#: html/passreset.php -msgid "Password Reset" -msgstr "" - -#: html/passreset.php -msgid "Check your e-mail for the confirmation link." -msgstr "" - -#: html/passreset.php -msgid "Your password has been reset successfully." -msgstr "" - -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "" - -#: html/passreset.php -msgid "Enter your new password:" -msgstr "" - -#: html/passreset.php -msgid "Confirm your new password:" -msgstr "" - -#: html/passreset.php html/tos.php -msgid "Continue" -msgstr "" - -#: html/passreset.php -#, php-format -msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "" - -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "" - -#: html/pkgbase.php -msgid "Package Bases" -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been disowned, check the confirmation " -"checkbox." -msgstr "" - -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot find package to merge votes and comments into." -msgstr "" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php -msgid "Cannot merge a package base with itself." -msgstr "" - -#: html/pkgbase.php -msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." -msgstr "" - -#: html/pkgdel.php -msgid "Package Deletion" -msgstr "" - -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "" - -#: html/pkgdel.php -#, php-format -msgid "" -"Use this form to delete the package base %s%s%s and the following packages " -"from the AUR: " -msgstr "" - -#: html/pkgdel.php -msgid "Deletion of a package is permanent. " -msgstr "" - -#: html/pkgdel.php html/pkgmerge.php -msgid "Select the checkbox to confirm action." -msgstr "" - -#: html/pkgdel.php -msgid "Confirm package deletion" -msgstr "" - -#: html/pkgdel.php template/account_delete.php -msgid "Delete" -msgstr "" - -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" - -#: html/pkgdisown.php template/pkgbase_actions.php -msgid "Disown Package" -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "" - -#: html/pkgdisown.php -#, php-format -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package " -"and transfer ownership to %s%s%s." -msgstr "" - -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to disown the package." -msgstr "" - -#: html/pkgdisown.php -msgid "Confirm to disown the package" -msgstr "" - -#: html/pkgdisown.php -msgid "Disown" -msgstr "" - -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "" - -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "" - -#: html/pkgflag.php -msgid "Flag" -msgstr "" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "" - -#: html/pkgmerge.php -msgid "Package Merging" -msgstr "" - -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "" - -#: html/pkgmerge.php -#, php-format -msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "" - -#: html/pkgmerge.php -msgid "The following packages will be deleted: " -msgstr "" - -#: html/pkgmerge.php -msgid "Once the package has been merged it cannot be reversed. " -msgstr "" - -#: html/pkgmerge.php -msgid "Enter the package name you wish to merge the package into. " -msgstr "" - -#: html/pkgmerge.php -msgid "Merge into:" -msgstr "" - -#: html/pkgmerge.php -msgid "Confirm package merge" -msgstr "" - -#: html/pkgmerge.php template/pkgreq_form.php -msgid "Merge" -msgstr "" - -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" - -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "" - -#: html/pkgreq.php template/pkgreq_close_form.php -msgid "Close Request" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "First" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Previous" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php -msgid "Next" -msgstr "" - -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php -msgid "Last" -msgstr "" - -#: html/pkgreq.php template/header.php -msgid "Requests" -msgstr "" - -#: html/register.php template/header.php -msgid "Register" -msgstr "" - -#: html/register.php -msgid "Use this form to create an account." -msgstr "" - -#: html/tos.php -msgid "Terms of Service" -msgstr "" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php -msgid "Could not retrieve proposal details." -msgstr "" - -#: html/tu.php -msgid "Voting is closed for this proposal." -msgstr "" - -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" - -#: html/tu.php -msgid "You cannot vote in an proposal about you." -msgstr "" - -#: html/tu.php -msgid "You've already voted for this proposal." -msgstr "" - -#: html/tu.php -msgid "Vote ID not valid." -msgstr "" - -#: html/tu.php template/tu_list.php -msgid "Current Votes" -msgstr "" - -#: html/tu.php -msgid "Past Votes" -msgstr "" - -#: html/voters.php template/tu_details.php -msgid "Voters" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"Account registration has been disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Missing User ID" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The username is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "It must be between %s and %s characters long" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Start and end with a letter or number" -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Can contain only one period, underscore or hyphen." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The PGP key fingerprint is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The SSH public key is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Cannot increase account permissions." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Language is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The username, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The address, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The SSH public key, %s%s%s, is already in use." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "Error trying to create account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully created." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Click on the Login link above to use your account." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "No changes were made to the account, %s%s%s." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "The account, %s%s%s, has been successfully modified." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "" -"The login form is currently disabled for your IP address, probably due to " -"sustained spam attacks. Sorry for the inconvenience." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Account suspended" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "" - -#: lib/acctfuncs.inc.php -#, php-format -msgid "" -"Your password has been reset. If you just created a new account, please use " -"the link from the confirmation email to set an initial password. Otherwise, " -"please request a reset key on the %sPassword Reset%s page." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Bad username or password." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "An error occurred trying to generate a user session." -msgstr "" - -#: lib/acctfuncs.inc.php -msgid "Invalid e-mail and reset key combination." -msgstr "" - -#: lib/aur.inc.php template/pkg_details.php -msgid "None" -msgstr "" - -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Error retrieving package details." -msgstr "" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php -msgid "Package details could not be found." -msgstr "" - -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can flag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to flag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been flagged out-of-date." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can unflag packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to unflag." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been unflagged." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You do not have permission to delete packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to delete." -msgstr "" - -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can adopt packages." -msgstr "" - -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can disown packages." -msgstr "" - -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to adopt." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to disown." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been adopted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have been disowned." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can un-vote for packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You did not select any packages to vote for." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been removed from the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Your votes have been cast for the selected packages." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Couldn't add to notification list." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been added to the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "You have been removed from the comment notification list for %s." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been deleted." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "" - -#: lib/pkgbasefuncs.inc.php -#, php-format -msgid "Invalid user name: %s" -msgstr "" - -#: lib/pkgbasefuncs.inc.php -msgid "The package base co-maintainers have been updated." -msgstr "" - -#: lib/pkgfuncs.inc.php template/pkgbase_details.php -msgid "View packages details for" -msgstr "" - -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "You must be logged in to file package requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid name: only lowercase letters are allowed." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "The comment field must not be empty." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid request type." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Added request successfully." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Invalid reason." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Only TUs and developers can close requests." -msgstr "" - -#: lib/pkgreqfuncs.inc.php -msgid "Request closed successfully." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "You can use this form to permanently delete the AUR account %s." -msgstr "" - -#: template/account_delete.php -#, php-format -msgid "%sWARNING%s: This action cannot be undone." -msgstr "" - -#: template/account_delete.php -msgid "Confirm deletion" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Account Type" -msgstr "" - -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php -msgid "User" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Email Address" -msgstr "" - -#: template/account_details.php -msgid "hidden" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Real Name" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "IRC Nick" -msgstr "" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php -msgid "PGP Key Fingerprint" -msgstr "" - -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php -msgid "Status" -msgstr "" - -#: template/account_details.php -msgid "Inactive since" -msgstr "" - -#: template/account_details.php template/account_search_results.php -msgid "Active" -msgstr "" - -#: template/account_details.php -msgid "Registration date:" -msgstr "" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "" - -#: template/account_details.php -msgid "Last Login" -msgstr "" - -#: template/account_details.php -msgid "Never" -msgstr "" - -#: template/account_details.php -msgid "View this user's packages" -msgstr "" - -#: template/account_details.php -msgid "Edit this user's account" -msgstr "" - -#: template/account_details.php -msgid "List this user's comments" -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s if you want to permanently delete this account." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "" - -#: template/account_edit_form.php -msgid "required" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Normal user" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "" - -#: template/account_edit_form.php -msgid "Inactive" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "" - -#: template/account_edit_form.php -msgid "Language" -msgstr "" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "" - -#: template/account_edit_form.php -msgid "Re-type password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php -msgid "SSH Public Key" -msgstr "" - -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php -msgid "Update" -msgstr "" - -#: template/account_edit_form.php -msgid "Create" -msgstr "" - -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Reset" -msgstr "" - -#: template/account_search_results.php -msgid "No results matched your search criteria." -msgstr "" - -#: template/account_search_results.php -msgid "Edit Account" -msgstr "" - -#: template/account_search_results.php -msgid "Suspended" -msgstr "" - -#: template/account_search_results.php -msgid "Edit" -msgstr "" - -#: template/account_search_results.php -msgid "Less" -msgstr "" - -#: template/account_search_results.php -msgid "More" -msgstr "" - -#: template/account_search_results.php -msgid "No more results to display." -msgstr "" - -#: template/comaintainers_form.php -#, php-format -msgid "" -"Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "" - -#: template/comaintainers_form.php -msgid "Users" -msgstr "" - -#: template/comaintainers_form.php template/pkg_comment_form.php -msgid "Save" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "" - -#: template/header.php -msgid " My Account" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Package Actions" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View PKGBUILD" -msgstr "" - -#: template/pkgbase_actions.php -msgid "View Changes" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Download snapshot" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Search wiki" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Flag package out-of-date" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Unflag package" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Remove vote" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Vote for this package" -msgstr "" - -#: template/pkgbase_actions.php scripts/notify.py -msgid "Disable notifications" -msgstr "" - -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "" - -#: template/pkgbase_actions.php -msgid "Manage Co-Maintainers" -msgstr "" - -#: template/pkgbase_actions.php -#, php-format -msgid "%d pending request" -msgid_plural "%d pending requests" -msgstr[0] "" - -#: template/pkgbase_actions.php -msgid "Adopt Package" -msgstr "" - -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Git Clone URL" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Submitter" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Maintainer" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Packager" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Votes" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "First Submitted" -msgstr "" - -#: template/pkgbase_details.php template/pkg_details.php -msgid "Last Updated" -msgstr "" - -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "" - -#: template/pkg_comment_box.php template/pkg_comment_form.php -msgid "Add Comment" -msgstr "" - -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "" - -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "" - -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Latest Comments" -msgstr "" - -#: template/pkg_comments.php -msgid "Comments for" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Delete comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "" - -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "" - -#: template/pkg_details.php -msgid "Package Details" -msgstr "" - -#: template/pkg_details.php template/pkg_search_form.php -msgid "Package Base" -msgstr "" - -#: template/pkg_details.php template/pkg_search_results.php -msgid "Description" -msgstr "" - -#: template/pkg_details.php -msgid "Upstream URL" -msgstr "" - -#: template/pkg_details.php -msgid "Visit the website for" -msgstr "" - -#: template/pkg_details.php -msgid "Licenses" -msgstr "" - -#: template/pkg_details.php -msgid "Groups" -msgstr "" - -#: template/pkg_details.php -msgid "Conflicts" -msgstr "" - -#: template/pkg_details.php -msgid "Provides" -msgstr "" - -#: template/pkg_details.php -msgid "Replaces" -msgstr "" - -#: template/pkg_details.php -msgid "Dependencies" -msgstr "" - -#: template/pkg_details.php -msgid "Required by" -msgstr "" - -#: template/pkg_details.php -msgid "Sources" -msgstr "" - -#: template/pkgreq_close_form.php -#, php-format -msgid "Use this form to close the request for package base %s%s%s." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "" -"The comments field can be left empty. However, it is highly recommended to " -"add a comment when rejecting a request." -msgstr "" - -#: template/pkgreq_close_form.php -msgid "Reason" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Accepted" -msgstr "" - -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php -msgid "Rejected" -msgstr "" - -#: template/pkgreq_form.php -#, php-format -msgid "" -"Use this form to file a request against package base %s%s%s which includes " -"the following packages:" -msgstr "" - -#: template/pkgreq_form.php -msgid "Request type" -msgstr "" - -#: template/pkgreq_form.php -msgid "Deletion" -msgstr "" - -#: template/pkgreq_form.php -msgid "Orphan" -msgstr "" - -#: template/pkgreq_form.php template/pkg_search_results.php -msgid "Merge into" -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "%d package request found." -msgid_plural "%d package requests found." -msgstr[0] "" - -#: template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "Page %d of %d." -msgstr "" - -#: template/pkgreq_results.php -msgid "Package" -msgstr "" - -#: template/pkgreq_results.php -msgid "Filed by" -msgstr "" - -#: template/pkgreq_results.php -msgid "Date" -msgstr "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "" - -#: template/pkgreq_results.php -#, php-format -msgid "~%d hour left" -msgid_plural "~%d hours left" -msgstr[0] "" - -#: template/pkgreq_results.php -msgid "<1 hour left" -msgstr "" - -#: template/pkgreq_results.php -msgid "Accept" -msgstr "" - -#: template/pkgreq_results.php -msgid "Locked" -msgstr "" - -#: template/pkgreq_results.php -msgid "Close" -msgstr "" - -#: template/pkgreq_results.php -msgid "Pending" -msgstr "" - -#: template/pkgreq_results.php -msgid "Closed" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name, Description" -msgstr "" - -#: template/pkg_search_form.php -msgid "Name Only" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Name" -msgstr "" - -#: template/pkg_search_form.php -msgid "Exact Package Base" -msgstr "" - -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "" - -#: template/pkg_search_form.php -msgid "All" -msgstr "" - -#: template/pkg_search_form.php -msgid "Flagged" -msgstr "" - -#: template/pkg_search_form.php -msgid "Not Flagged" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Name" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php -msgid "Voted" -msgstr "" - -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "" - -#: template/pkg_search_form.php -msgid "Ascending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Descending" -msgstr "" - -#: template/pkg_search_form.php -msgid "Enter search criteria" -msgstr "" - -#: template/pkg_search_form.php -msgid "Search by" -msgstr "" - -#: template/pkg_search_form.php template/stats/user_table.php -msgid "Out of Date" -msgstr "" - -#: template/pkg_search_form.php template/search_accounts_form.php -msgid "Sort by" -msgstr "" - -#: template/pkg_search_form.php -msgid "Sort order" -msgstr "" - -#: template/pkg_search_form.php -msgid "Per page" -msgstr "" - -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Go" -msgstr "" - -#: template/pkg_search_form.php -msgid "Orphans" -msgstr "" - -#: template/pkg_search_results.php -msgid "Error retrieving package list." -msgstr "" - -#: template/pkg_search_results.php -msgid "No packages matched your search criteria." -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "%d package found." -msgid_plural "%d packages found." -msgstr[0] "" - -#: template/pkg_search_results.php -msgid "Version" -msgstr "" - -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php -msgid "Yes" -msgstr "" - -#: template/pkg_search_results.php -msgid "orphan" -msgstr "" - -#: template/pkg_search_results.php -msgid "Actions" -msgstr "" - -#: template/pkg_search_results.php -msgid "Unflag Out-of-date" -msgstr "" - -#: template/pkg_search_results.php -msgid "Adopt Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Disown Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Delete Packages" -msgstr "" - -#: template/pkg_search_results.php -msgid "Confirm" -msgstr "" - -#: template/search_accounts_form.php -msgid "Any type" -msgstr "" - -#: template/search_accounts_form.php -msgid "Search" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Statistics" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Orphan Packages" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages added in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past 7 days" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages updated in the past year" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Packages never updated" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Registered Users" -msgstr "" - -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" - -#: template/stats/updates_table.php -msgid "Recent Updates" -msgstr "" - -#: template/stats/updates_table.php -msgid "more" -msgstr "" - -#: template/stats/user_table.php -msgid "My Statistics" -msgstr "" - -#: template/tu_details.php -msgid "Proposal Details" -msgstr "" - -#: template/tu_details.php -msgid "This vote is still running." -msgstr "" - -#: template/tu_details.php -#, php-format -msgid "Submitted: %s by %s" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "End" -msgstr "" - -#: template/tu_details.php -msgid "Result" -msgstr "" - -#: template/tu_details.php template/tu_list.php -msgid "No" -msgstr "" - -#: template/tu_details.php -msgid "Abstain" -msgstr "" - -#: template/tu_details.php -msgid "Total" -msgstr "" - -#: template/tu_details.php -msgid "Participation" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last Votes by TU" -msgstr "" - -#: template/tu_last_votes_list.php -msgid "Last vote" -msgstr "" - -#: template/tu_last_votes_list.php template/tu_list.php -msgid "No results found." -msgstr "" - -#: template/tu_list.php -msgid "Start" -msgstr "" - -#: template/tu_list.php -msgid "Back" -msgstr "" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index f32d628c..693ad6df 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1,2381 +1,1318 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# Feng Chao , 2015-2016 +# leonfeng , 2015 # dongfengweixiao , 2015 -# dongfengweixiao , 2015 -# Felix Yan , 2014,2021 -# Feng Chao , 2012,2021 -# lakejason0 , 2022 +# Felix Yan , 2014 # Lukas Fleischer , 2011 -# pingplug , 2017-2018 -# Feng Chao , 2012 +# leonfeng , 2012 # Weiwen Zhao , 2013 -# Xiaodong Qi , 2016 -# 林凌儿 <308627244@qq.com>, 2021 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: lakejason0 , 2022\n" -"Language-Team: Chinese (China) (http://app.transifex.com/lfleischer/aurweb/language/zh_CN/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/aur/" +"language/zh_CN/)\n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: html/404.php msgid "Page Not Found" msgstr "页面未找到" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "请求的页面不存在。" -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "提示" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Git clone URL 并不应该使用浏览器打开。" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "要克隆 Git 项目 %s,运行 %s。" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "点击 %s这里%s 以回到 %s 的软件包详情页面。" - -#: html/503.php msgid "Service Unavailable" -msgstr "服务不可用" +msgstr "" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." -msgstr "别慌!本站正在维护中,不久后将恢复。" +msgstr "" -#: html/account.php msgid "Account" -msgstr "账户" +msgstr "帐户" -#: html/account.php template/header.php msgid "Accounts" -msgstr "账户" +msgstr "帐户" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "您无权访问此区域。" -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "无法获取指定用户的信息。" -#: html/account.php msgid "You do not have permission to edit this account." -msgstr "您没有权限编辑此账户。" +msgstr "您没有权限编辑此帐户。" -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "密码无效。" - -#: html/account.php msgid "Use this form to search existing accounts." -msgstr "使用此表单查找存在的账户。" +msgstr "使用此表单查找存在的帐户。" -#: html/account.php msgid "You must log in to view user information." -msgstr "您需要登录后才能查看用户信息。" +msgstr "您需要登录后才能察看用户信息。" + +msgid "Use this form to create an account." +msgstr "使用此表单创建帐号。" -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "添加提议" -#: html/addvote.php msgid "Invalid token for user action." msgstr "用户操作使用了无效的令牌。" -#: html/addvote.php msgid "Username does not exist." msgstr "此用户不存在。" -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s 已经有了关于他们的提议。" -#: html/addvote.php msgid "Invalid type." msgstr "无效的类别。" -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "提议不能为空。" -#: html/addvote.php msgid "New proposal submitted." msgstr "新提议已被提交。" -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "提交一个提议用于投票。" -#: html/addvote.php msgid "Applicant/TU" msgstr "申请人/信任用户(TU)" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(如果不符合可以留空)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "类别" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "" +msgid "Addition of a TU" +msgstr "添加受信用户" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "" +msgid "Removal of a TU" +msgstr "移除受信用户" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "移除受信用户(无故不活跃)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "修订章程" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "提议" -#: html/addvote.php msgid "Submit" msgstr "提交" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" -msgstr "管理共同维护者" +msgstr "" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "编辑评论" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "仪表面板" - -#: html/home.php template/header.php msgid "Home" msgstr "首页" -#: html/home.php -msgid "My Flagged Packages" -msgstr "被标记的软件包" - -#: html/home.php -msgid "My Requests" -msgstr "我的请求" - -#: html/home.php -msgid "My Packages" -msgstr "我的软件包" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "搜索我维护的软件包" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "共同维护的软件包" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "搜索共同维护的软件包" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." msgstr "" +"欢迎来到 AUR!想了解更多信息,请阅读 %sAUR 用户指南%s和 %sAUR 受信用户指" +"南%s。" -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "提交的 PKGBUILD %s必须%s 遵守 %sArch 软件包规范%s,否则它们将被删除!" +msgstr "提交的 PKGBUILD %s必须%s遵守 %sArch 软件包规范%s,否则它们将被删除!" -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "记得为您喜欢的软件包投票!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "部分软件包将在 [extra] 仓库以二进制包的形式提供。" +msgid "Some packages may be provided as binaries in [community]." +msgstr "部分软件包将在 [community] 仓库以二进制包的形式提供。" -#: html/home.php msgid "DISCLAIMER" msgstr "免责声明" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "AUR 包是用户创作的内容。使用它们造成的后果自负。" +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "位于 unsupported 的软件包为用户产生的内容。使用它们造成的后果自负。" -#: html/home.php -msgid "Learn more..." -msgstr "了解更多..." - -#: html/home.php msgid "Support" -msgstr "帮助" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "软件包请求" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "在软件包详情页面上有三种可以在 %s软件包操作%s 框中提交的请求:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "弃置请求" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "请求弃置一个软件包,比如当维护者不活跃且软件包已过期很久时。" - -#: html/home.php -msgid "Deletion Request" -msgstr "删除请求" - -#: html/home.php -msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." msgstr "" -#: html/home.php -msgid "Merge Request" -msgstr "合并请求" +msgid "Deletion Request" +msgstr "" + +msgid "" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" + +msgid "Merge Request" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "请求一个软件包被合并到另一个中。在一个包需要被重命名或者被分离成多个包的情况下使用。" +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "如果您想讨论请求,可以使用 %saur-requests%s 邮件列表。但请不要用它发送请求。" +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "提交软件包" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "现在请使用 Git over SSH 来向 AUR 提交软件包。如果想知道更多,请查看 Arch Wiki 上的 Arch User Repository (简体中文) 页面中 %s提交软件包%s 章节。" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "AUR 使用以下 SSH 指纹:" - -#: html/home.php msgid "Discussion" msgstr "邮件列表" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "Bug 报告" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." msgstr "" -#: html/home.php msgid "Package Search" msgstr "软件包搜索" -#: html/index.php msgid "Adopt" msgstr "接管" -#: html/index.php msgid "Vote" msgstr "投票" -#: html/index.php msgid "UnVote" msgstr "取消投票" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "通知" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "取消通知" -#: html/index.php +msgid "Flag" +msgstr "标记" + msgid "UnFlag" msgstr "取消标记" -#: html/login.php template/header.php msgid "Login" msgstr "登录" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "登录为: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "退出" -#: html/login.php msgid "Enter login credentials" msgstr "输入账户信息" -#: html/login.php -msgid "User name or primary email address" -msgstr "用户名或主邮件地址" +msgid "Username" +msgstr "用户名" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "密码" -#: html/login.php msgid "Remember me" msgstr "记住我" -#: html/login.php msgid "Forgot Password" msgstr "找回密码" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." -msgstr "HTTP 登录已被禁用,想登录请 %s切换到HTTPS%s。" +msgstr "HTTP 登陆已被禁用,请使用%s切换到HTTPS%s。" -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "搜索标准" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "软件包" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "尝试重新获取软件包详情时发生错误。" -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "缺少必填项。" -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "密码字段不匹配。" -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "密码至少要 %s 个字符。" -#: html/passreset.php msgid "Invalid e-mail." -msgstr "邮箱无效。" +msgstr "电子邮箱不正确。" + +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" -#: html/passreset.php msgid "Password Reset" msgstr "密码重置" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." -msgstr "请进入您的邮箱查看确认链接。" +msgstr "请进入您的邮箱查看确认邮件。" -#: html/passreset.php msgid "Your password has been reset successfully." -msgstr "您的密码已经成功重置。" +msgstr "密码已经成功重置。" -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "确认用户名或主邮件地址:" +msgid "Confirm your e-mail address:" +msgstr "确认邮箱地址:" -#: html/passreset.php msgid "Enter your new password:" msgstr "输入新密码:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "确认新密码:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "继续" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "如果您忘记了注册账号时使用的用户名和邮件地址,请向 %saur-general%s 邮件列表寻求帮助。" +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"如果您忘记了注册账号时使用的邮件地址,请向 %saur-general%s 邮件列表寻求帮助。" -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "请输入用户名或主邮箱:" +msgid "Enter your e-mail address:" +msgstr "输入您的邮箱地址:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "包基础" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." -msgstr "选中的软件包未被弃置,请检查确认复选框。" +msgstr "" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "选中的软件包未被接管,请检查确认复选框。" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "找不到合并投票与评论的目标包。" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "无法将一个包基础合并到它自己。" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "选中的软件包未被删除,请检查确认复选框。" -#: html/pkgdel.php msgid "Package Deletion" msgstr "软件包删除" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "删除软件包" +#, php-format +msgid "Delete Package: %s" +msgstr "删除包:%s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " -msgstr "使用这个表单将包基础 %s%s%s 和以下包从 AUR 中移除: " +msgstr "使用这个表单将包基础 %s%s%s 和以下包从 AUR 中移除:" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " -msgstr "删除软件包是永久性的操作。 " +msgstr "删除软件包是一个永久性的操作" -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "选中复选框以确认操作。" -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "确认删除包" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "删除" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "只有受信用户和开发人员能删除软件包。" -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "弃置软件包" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " -msgstr "使用这个表格来弃置包基础 %s%s%s,其中包括下列软件包: " +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " +msgstr "" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "选中复选框以确认您不再是这个包的共同维护者。" - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." -msgstr "选中复选框以确认您想弃置这个包并将其所有权转移给 %s%s%s。" +msgstr "" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." -msgstr "选中复选框以确认您想弃置这个包。" +msgstr "" -#: html/pkgdisown.php msgid "Confirm to disown the package" -msgstr "确认弃置这个包" +msgstr "" -#: html/pkgdisown.php msgid "Disown" msgstr "弃置" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." +msgid "Only Trusted Users and Developers can disown packages." msgstr "" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "标记评论" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "将软件包标记为过期" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "这似乎是 VCS 软件包。请%s不要%s因为 AUR 中的软件包版本与最新的 commit 不匹配就将其标记为过期。仅当来源移动或由于最新上游更改需要更改 PKGBUILD 时才标记此软件包。" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "使用这个表单将包基础 %s%s%s 和以下包标记为已过期 : " - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "请 %s不%s 要用这个表单提交问题。请您使用包评论功能。" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "在下面输入为什么这个软件包过期了,最好写一下更新日志的链接或者新版软件压缩包的地址。" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "评论" - -#: html/pkgflag.php -msgid "Flag" -msgstr "标记" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "只有已注册的用户才能把软件标记为已过期。" - -#: html/pkgmerge.php msgid "Package Merging" msgstr "软件包合并" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "合并软件包" +#, php-format +msgid "Merge Package: %s" +msgstr "合并软件包: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " -msgstr "使用这个表单将包基础 %s%s%s 合并到另一个包。 " +msgstr "使用这个表单将包基础 %s%s%s 合并到另一个包。" -#: html/pkgmerge.php msgid "The following packages will be deleted: " -msgstr "下面这些软件包将被删除: " +msgstr "下面这些软件包将被删除:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " -msgstr "一旦包被合并,这个操作将是不可逆的。 " +msgstr "一旦包被合并,这个操作将是不可逆的。" -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " -msgstr "请输入合并的目标包名。 " +msgstr "请输入合并的目标包名。" -#: html/pkgmerge.php msgid "Merge into:" msgstr "合并到:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "确认合并包" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "合并" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "只有受信用户和开发人员才能删除软件包。" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" +msgid "File Request" msgstr "提交请求" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "关闭请求" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "第一页" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "上一页" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "下一页" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "末页" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "请求" -#: html/register.php template/header.php -msgid "Register" -msgstr "注册" +msgid "Trusted User" +msgstr "受信用户" -#: html/register.php -msgid "Use this form to create an account." -msgstr "使用此表单创建账户。" - -#: html/tos.php -msgid "Terms of Service" -msgstr "服务条款" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "以下文件已更新,请仔细审阅:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "版本 %d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "我接受以上条款与条件。" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "无法获取提议详情。" -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "该提议的投票已被关闭。" -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "" +msgid "Only Trusted Users are allowed to vote." +msgstr "只有受信用户可以投票。" -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "您不能在关于您的提议里投票。" -#: html/tu.php msgid "You've already voted for this proposal." msgstr "您已经在这个提议上投票了。" -#: html/tu.php msgid "Vote ID not valid." -msgstr "非法的投票标识。" +msgstr "非法的投票标识" -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "当前的投票" -#: html/tu.php msgid "Past Votes" msgstr "历史投票" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "投票" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "账户注册目前对您所使用的 IP 地址禁用,原因可能是持续的垃圾攻击。我们对因此引起的不便表示抱歉。" +msgstr "" +"账户注册目前对您所使用的 IP 地址禁用,原因可能是持续的垃圾攻击。我们对因此引" +"起的不便表示抱歉。" -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "缺少用户标识" -#: lib/acctfuncs.inc.php msgid "The username is invalid." -msgstr "用户名无效。" +msgstr "用户名需要符合以下条件:" -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "在 %s 到 %s 个字符之间" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "开头和结尾是数字/英文字母" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." -msgstr "最多包含一个“.”,“_”或“-”。" +msgstr "最多包含一个“.”,“_”,或“-”" -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "请确认新密码。" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." -msgstr "邮件地址无效" +msgstr "错误的 Email 地址。" -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "备用邮件地址无效。" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "主页无效,请指定完整的 HTTP(s) URL。" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "PGP 密钥指纹无效。" -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." -msgstr "SSH 公钥无效。" +msgstr "" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "不能提高账户权限。" -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "目前不支持此语言。" -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "目前不支持此时区。" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "用户名 %s%s%s 已被使用。" -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "该地址 %s%s%s 已被使用。" -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." -msgstr "SSH 公钥 %s%s%s 已被使用。" +msgstr "" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "验证码未输入。" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "验证码已过期,请重试。" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "输入的验证码无效。" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." -msgstr "尝试创建账户 %s%s%s 失败。" +msgstr "尝试创建帐户 %s%s%s 失败。" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." -msgstr "账户 %s%s%s 创建成功。" +msgstr "帐户 %s%s%s 创建成功。" -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "密码重置密钥已经发送到您的邮箱。" - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." -msgstr "点击上方的登录链接以使用您的账户。" +msgstr "点击上方的登陆链接以使用你的帐号。" + +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"欢迎来到 %s!想要为你的新账户设置初始密码,请点击下面的链接。如果链接不工作," +"请尝试复制它到你的浏览器中打开。" + +msgid "A password reset key has been sent to your e-mail address." +msgstr "一个密码重置密钥已经发送到你的电子邮箱。" -#: lib/acctfuncs.inc.php #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "账户 %s%s%s 没有被修改。" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." -msgstr "账户 %s%s%s 已被成功修改。" +msgstr "帐号 %s%s%s 已被成功修改。" -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "登录表单目前对您所使用的 IP 地址禁用,原因可能是持续的垃圾攻击。我们对因此引起的不便表示抱歉。" +msgstr "" +"登陆表单目前对您所使用的 IP 地址禁用,原因可能是持续的垃圾攻击。我们对因此引" +"起的不便表示抱歉。" -#: lib/acctfuncs.inc.php msgid "Account suspended" -msgstr "账户被停用" +msgstr "帐号被停用" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "您没有权限停用此账户。" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "您的密码已经成功重置。如果您刚刚创建了新账户,请使用确认邮件中的链接来设置初始密码。否则,请在 %s重置密码%s 页面申请重置密钥。" +msgstr "" +"你的密码已经成功被重置。如果你刚刚创建了一个新账户,请使用确认邮件中的链接来" +"设置一个初始密码。否则,请在 %s重置密码%s 页面申请一个重置密码密钥。" -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "用户名或密码错误。" -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "在创建用户会话的过程中出现了一个错误。" -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "邮箱和重置 key 不匹配。" -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "无" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "查看 %s 的账户信息" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "缺少软件包基础 ID 或软件包名。" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "您没有权限编辑这条评论。" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "评论不存在。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "评论不能为空。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "已经添加评论。" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "您需要登录后才能编辑软件包信息。" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "评论标识丢失。" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "不能同时锁定 5 条以上的评论。" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "您没有权限锁定这条评论。" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "您没有权限解锁这条评论。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "评论已锁定。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "评论已解锁。" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "获取软件包详情时发生错误。" -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "无法找到软件包的详细信息。" -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "错误的 Referer 消息头。" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "您没有选择要接受通知的软件包。" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "选中的软件包的通知已被启用。" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "您没有选择要移除通知的软件包。" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "所选中的软件包并没有启用通知。" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "选中的软件包的通知已被移除。" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "您需要登录后才能标记软件包。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "您没有选择要标记的软件包。" -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "选中的软件包已被标记,请输入评论。" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "选择的软件包已被标记为过期。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "您需要登录后才能移除软件包标记。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "您没有选择要取消标记的软件包。" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "选中的软件包的标记已被移除。" -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "您没有删除软件包的权限。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." msgstr "您没有选择要删除的软件包。" -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "选中的其中一个软件包不存在。" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." -msgstr "选中的软件包已被删除。" +msgstr "选中的软件包已经被删除。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." -msgstr "您需要登录后才能接管软件包。" +msgstr "登陆后才能接管软件包" -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "您不被允许接管选中的其中一个软件包。" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "您需要登录后才能弃置软件包。" -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "您不被允许弃置选中的其中一个软件包。" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "您没有选择要接管的软件包。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "您没有选择要弃置的软件包。" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "选择的软件包已经被接管。" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "选中的软件包已经被弃置。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "您需要登录后才能为软件包投票。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "您需要登录后才能为软件包取消投票。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "您没有选择要投票的软件包。" -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "您对所选软件包的投票已被取消。" -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "您对所选软件包的投票已被记录。" -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "无法将您添加到通知列表。" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "您已被成功添加到 %s 的评论通知列表。" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "您将不再收到 %s 的评论通知。" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "您没有权限恢复这条评论。" +msgid "You must be logged in before you can edit package information." +msgstr "您需要登录后才能编辑软件包信息。" -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "评论已恢复。" +msgid "Missing comment ID." +msgstr "评论标识丢失。" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "您没有权限删除此评论。" - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "评论已被删除。" -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "评论已编辑。" +msgid "You are not allowed to delete this comment." +msgstr "您没有权限删除此评论。" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "您没有权限编辑这个软件包基础的关键词。" +msgid "Missing category ID." +msgstr "缺少分类 ID。" -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "软件包基础的关键词已被更新。" +msgid "Invalid category ID." +msgstr "非法的类别标识" + +msgid "You are not allowed to change this package category." +msgstr "您无权修改此软件包的类别。" + +msgid "Package category changed." +msgstr "软件包分类已更改。" -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." -msgstr "您没有权限管理这个软件包基础的共同维护者。" +msgstr "" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" -msgstr "用户名无效:%s" +msgstr "" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." -msgstr "软件包基础的共同维护者已更新。" +msgstr "" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "查看软件包详细信息" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "需要 %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "登录之后才能提交软件包需求。" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." -msgstr "名称无效: 只允许小写字母。" +msgstr "无效的名称: 只允许小写字母。" -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "评论内容不能为空。" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." -msgstr "请求类型无效。" +msgstr "无效的请求类型。" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "请求提交成功。" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." -msgstr "理由无效。" +msgstr "无效的理由。" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "只有受信用户和开发者可以关闭请求。" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "请求关闭成功。" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." -msgstr "您可以使用这个表单永久删除 AUR 账号 %s。" +msgstr "你可以使用这个表单来彻底删除 AUR 帐号 %s。" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." -msgstr "%s警告%s:这个操作无法撤销。" +msgstr "%s警告%s:这个操作无法被撤销" -#: template/account_delete.php msgid "Confirm deletion" msgstr "确认删除" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "用户名" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" -msgstr "账户类别" +msgstr "帐户类别" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "用户" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "开发人员" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "" +msgid "Trusted User & Developer" +msgstr "受信用户 & 开发者" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "Email" -#: template/account_details.php -msgid "hidden" -msgstr "已隐藏" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "真实名字" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "首页" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC昵称" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "PGP 密钥指纹" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "状态" -#: template/account_details.php msgid "Inactive since" msgstr "不活跃自" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "激活" -#: template/account_details.php -msgid "Registration date:" -msgstr "注册日期:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "未知" - -#: template/account_details.php msgid "Last Login" -msgstr "最后登录" +msgstr "最后登陆" -#: template/account_details.php msgid "Never" msgstr "从不" -#: template/account_details.php msgid "View this user's packages" msgstr "查看这个用户提交的软件包" -#: template/account_details.php msgid "Edit this user's account" -msgstr "编辑此用户的账户" +msgstr "编辑此用户的帐号" -#: template/account_details.php -msgid "List this user's comments" -msgstr "显示此用户的评论" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." -msgstr "如果你想永久删除这个账户,请点击 %s这里%s。" +msgstr "如果你想要彻底删除这个帐号,请点击%s这里%s。" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "点击 %s这里%s 查看用户详情。" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "点击 %s这里%s 列出当前用户的所有评论。" - -#: template/account_edit_form.php msgid "required" msgstr "必填" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "您的用户名称将用于您的登录。这是公开的,即使您的账户不活跃。" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "普通用户" -#: template/account_edit_form.php template/search_accounts_form.php -msgid "Account Suspended" -msgstr "账户被停用" +msgid "Trusted user" +msgstr "受信用户" + +msgid "Account Suspended" +msgstr "帐户被暂停" -#: template/account_edit_form.php msgid "Inactive" msgstr "不活跃" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "请确认你正确地输入了你的 E-mail,否则你将会被锁定。" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "隐藏 E-mail" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "如果你不隐藏你的邮件地址,该地址将会对所有已注册的AUR用户可见。如果你隐藏你的邮件地址,该地址仅有Arch Linux工作人员可见。" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "备用邮件地址" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "选择性的提供的备用的邮件地址。该邮件地址将在你的主要邮件地址不可用时用于恢复你的账户。" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "密码重置链接会同时发送给你的主要邮件地址和备用邮件地址。" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "你的备用邮件地址将只对Arch Linux的工作人员可见。与%s设置无关。" - -#: template/account_edit_form.php -msgid "Language" -msgstr "语言" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "时区" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "如果您想修改密码,请输入新密码并再次输入以确认。" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "确认密码" -#: template/account_edit_form.php -msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." -msgstr "仅当你想向 AUR 提交软件包时才需要填写以下信息。" +msgid "Language" +msgstr "语言" -#: templates/partials/account_form.html msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "" -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "" - -#: template/account_edit_form.php msgid "SSH Public Key" -msgstr "SSH 公钥" +msgstr "" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "提醒设置" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "当有新评论的时候提醒我" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "软件包更新提醒" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "所有权更改提醒" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "请输入您当前的密码以确认更改:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "当前密码" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "为了防止AUR遭受自动注册手段的侵扰。请您提供以下命令的输出:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "回答" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "更新" -#: template/account_edit_form.php msgid "Create" msgstr "创建" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "重填" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "没有结果符合您的搜索条件。" -#: template/account_search_results.php msgid "Edit Account" -msgstr "编辑账户" +msgstr "编辑帐户" -#: template/account_search_results.php msgid "Suspended" msgstr "暂停" -#: template/account_search_results.php msgid "Edit" msgstr "编辑" -#: template/account_search_results.php msgid "Less" msgstr "更少" -#: template/account_search_results.php msgid "More" msgstr "更多" -#: template/account_search_results.php msgid "No more results to display." msgstr "没有更多的结果供显示。" -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" -msgstr "使用这个表单以添加 %s%s%s 的共同维护者(一个用户名一行):" +msgstr "" -#: template/comaintainers_form.php msgid "Users" -msgstr "用户" +msgstr "" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" -msgstr "保存" +msgstr "" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "已标记为过期的评论:%s" +msgid "My Packages" +msgstr "我的软件包" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s 标记了 %s%s%s 为过期,在 %s%s%s,因为以下原因:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s 未被标记为过期。" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "返回详情" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "版权所有 %s 2004-%d aurweb 开发组。" - -#: template/header.php msgid " My Account" -msgstr " 我的账户" +msgstr "我的帐户" + +msgid "Register" +msgstr "注册" + +msgid "unknown" +msgstr "未知" + +msgid "Package Base Details" +msgstr "包基础详情" -#: template/pkgbase_actions.php msgid "Package Actions" msgstr "软件包操作" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "查看 PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" -msgstr "查看更改" +msgstr "" -#: template/pkgbase_actions.php msgid "Download snapshot" -msgstr "下载快照" +msgstr "" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "搜索 Wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "已标记为过期 (%s)" +msgid "Flagged out-of-date" +msgstr "已标记为过期" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "将软件包标记为过期" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "取消标记软件包" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "移除投票" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "为这个软件包投票" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "禁用通知" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "启用通知" +msgid "Notify of new comments" +msgstr "当有新评论的时候提醒我" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" -msgstr "管理共同维护者" +msgstr "" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d 个未处理的请求" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "删除软件包" + +msgid "Merge Package" +msgstr "合并软件包" + msgid "Adopt Package" msgstr "接管软件包" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "包基础详情" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" -msgstr "Git Clone URL" +msgstr "" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "只读" +msgid "Category" +msgstr "类别" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "点击复制" +msgid "Change category" +msgstr "修改分类" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "关键字" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" -msgstr "提交者" +msgstr "提交人" + +#, php-format +msgid "View account information for %s" +msgstr "查看 %s 的账户信息" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Maintainer" msgstr "维护者" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" -msgstr "最后打包者" +msgstr "最近一次打包者" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "得票" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "受欢迎度" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "首次提交" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "最后更新" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "编辑 %s 的评论" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "添加评论" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "在AUR软件包仓库内,Git提交和识别符将会被自动转换为URL。" +msgid "Comment has been added." +msgstr "已经添加评论。" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "部分支持%sMarkdown语法%s" +msgid "View all comments" +msgstr "查看所有评论" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "已锁定评论" - -#: template/pkg_comments.php msgid "Latest Comments" -msgstr "最新评论" +msgstr "最新的评论" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "评论" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s 在 %s 发表了评论" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "在 %s 发表的匿名评论" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "在软件包%s的%s评论" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "在 %s 被 %s 删除" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "在 %s 被删除" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "在 %s 被 %s 编辑" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "在 %s 被编辑" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "恢复评论" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "删除评论" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "锁定评论" +#, php-format +msgid "Comment by %s" +msgstr "%s 的评论" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "解锁评论" +msgid "Anonymous comment" +msgstr "匿名评论" + +msgid "deleted" +msgstr "已删除" + +msgid "All comments" +msgstr "全部评论" -#: template/pkg_details.php msgid "Package Details" msgstr "软件包详情" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "包基础" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "描述" -#: template/pkg_details.php msgid "Upstream URL" msgstr "上游 URL" -#: template/pkg_details.php msgid "Visit the website for" msgstr "访问网站" -#: template/pkg_details.php msgid "Licenses" msgstr "许可协议" -#: template/pkg_details.php msgid "Groups" msgstr "组" -#: template/pkg_details.php msgid "Conflicts" msgstr "冲突" -#: template/pkg_details.php msgid "Provides" msgstr "提供" -#: template/pkg_details.php msgid "Replaces" msgstr "取代" -#: template/pkg_details.php msgid "Dependencies" -msgstr "依赖" +msgstr "依赖于:" -#: template/pkg_details.php msgid "Required by" -msgstr "被需要" +msgstr "被需要:" -#: template/pkg_details.php msgid "Sources" -msgstr "源代码" +msgstr "源代码:" + +#, php-format +msgid "Close Request: %s" +msgstr "关闭请求:%s" -#: template/pkgreq_close_form.php #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "使用这个表单来关闭对包基础 %s%s%s 的请求。" -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "提示" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." msgstr "评论可以留空。不过,当拒绝一个请求的时候,强烈推荐提供一条评论。" -#: template/pkgreq_close_form.php msgid "Reason" msgstr "原因" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "已接受" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "已拒绝" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "评论" + +#, php-format +msgid "File Request: %s" +msgstr "提交请求:%s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" msgstr "使用这个表格,提交一个针对包基础 %s%s%s 的请求,其中包括下列软件包:" -#: template/pkgreq_form.php msgid "Request type" msgstr "请求类型" -#: template/pkgreq_form.php msgid "Deletion" msgstr "删除" -#: template/pkgreq_form.php msgid "Orphan" msgstr "弃置" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "合并到" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "没有请求符合您的搜索条件。" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "找到了 %d 个软件包请求。" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "第 %d 页,共 %d 页。" -#: template/pkgreq_results.php msgid "Package" msgstr "软件包" -#: template/pkgreq_results.php msgid "Filed by" msgstr "提交者是" -#: template/pkgreq_results.php msgid "Date" msgstr "日期" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "剩余约 %d 天" +msgid "~%d days left" +msgstr "剩余~%d天" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" -msgstr[0] "剩余约 %d 小时" +msgstr[0] "剩余~%d小时" -#: template/pkgreq_results.php msgid "<1 hour left" -msgstr "剩余不到 1 小时" +msgstr "剩余<1小时" -#: template/pkgreq_results.php msgid "Accept" msgstr "接受" -#: template/pkgreq_results.php msgid "Locked" msgstr "已锁定" -#: template/pkgreq_results.php msgid "Close" msgstr "关闭" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "等待中" - -#: template/pkgreq_results.php msgid "Closed" msgstr "已关闭" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "名称和描述" -#: template/pkg_search_form.php msgid "Name Only" msgstr "名称" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "确切的名字" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "准确包基础" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "共同维护者" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "维护者,共同维护者" - -#: template/pkg_search_form.php msgid "All" msgstr "全部" -#: template/pkg_search_form.php msgid "Flagged" msgstr "已标记" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "未标记" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "名称" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "已投票" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "上次修改" +msgid "Age" +msgstr "时间" -#: template/pkg_search_form.php msgid "Ascending" msgstr "从小到大" -#: template/pkg_search_form.php msgid "Descending" msgstr "从大到小" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "输入搜索条件" -#: template/pkg_search_form.php +msgid "Any" +msgstr "所有" + msgid "Search by" msgstr "搜索" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "关键字" + msgid "Out of Date" msgstr "过期状态" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "排列依据" -#: template/pkg_search_form.php msgid "Sort order" msgstr "排列方式" -#: template/pkg_search_form.php msgid "Per page" msgstr "每页显示" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" msgstr "Go" -#: template/pkg_search_form.php msgid "Orphans" msgstr "孤儿包" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "无法获取包列表。" -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "没有相关的软件包符合您的搜索条件。" -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "找到了 %d 个软件包。" -#: template/pkg_search_results.php msgid "Version" msgstr "版本" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "受欢迎度通过将每次投票以系数为每天 %.2f 的权重加权求和计算。" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "是" -#: template/pkg_search_results.php msgid "orphan" msgstr "孤儿包" -#: template/pkg_search_results.php msgid "Actions" msgstr "操作" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "标记为过期" + msgid "Unflag Out-of-date" msgstr "移除过期标记" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "接管软件包" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "弃置软件包" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "删除软件包" -#: template/pkg_search_results.php msgid "Confirm" msgstr "确认" -#: template/search_accounts_form.php msgid "Any type" msgstr "所有类别" -#: template/search_accounts_form.php msgid "Search" msgstr "搜索" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "统计" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "无人维护的软件包" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "7天内新增的软件包" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "7天内更新的软件包" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "一年内更新的软件包" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "从未更新的软件包" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "注册用户" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "" +msgid "Trusted Users" +msgstr "受信用户" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "最新更新" -#: template/stats/updates_table.php -msgid "more" -msgstr "更多" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "我的统计" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "位于 unsupported 的软件包" + msgid "Proposal Details" msgstr "提议详情" -#: template/tu_details.php msgid "This vote is still running." msgstr "投票仍在继续。" -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "已提交 %s 由 %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "结束" -#: template/tu_details.php msgid "Result" msgstr "结果" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "否" -#: template/tu_details.php msgid "Abstain" msgstr "弃权" -#: template/tu_details.php msgid "Total" msgstr "总数" -#: template/tu_details.php msgid "Participation" msgstr "参与" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "受信用户的最后投票" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "最后投票" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "没有找到结果。" -#: template/tu_list.php msgid "Start" msgstr "开始" -#: template/tu_list.php msgid "Back" msgstr "返回" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "重置 AUR 密码" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "关联此邮件地址的用户 {user} 的重置密码请求已经提交。如果您想要重置密码,请点击以下链接 [1],否则忽略此消息。" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "欢迎来到 Arch 用户软件仓库" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "欢迎来到 Arch 用户软件仓库!想要为你的新账户设置初始密码,请点击下面的链接 [1]。如果链接不工作,请尝试复制它到你的浏览器中打开。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "AUR 软件包评论:{pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "用户 {user} [1] 在软件包 {pkgbase} [2] 下进行了如下评论:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "若您不愿再收到关于此软件包的通知,请到此软件包页面 [2] 并选择 \"{label}\"。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "AUR 软件包更新:{pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "用户 {user} [1] 在软件包 {pkgbase} [2] 上传了新的提交。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "AUR 软件包过期通知:{pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "您的软件包 {pkgbase} [1] 已被用户 {user} [2] 标记为过期:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "AUR 软件包所有权通知:{pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "软件包 {pkgbase} [1] 已被用户 {user} [2] 接管。" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "软件包 {pkgbase} [1] 已被用户 {user} [2] 弃置。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "AUR 软件包共同维护者通知:{pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "您已被添加到软件包 {pkgbase} [1] 的共同维护者列表。" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "您已被移出软件包 {pkgbase} [1] 的共同维护者列表。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "AUR 软件包删除:{pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "用户 {user} [1] 将原软件包 {old} [2] 并入新软件包 {new} [3]。\n\n--\n若您不愿再收到关于新软件包的通知,请到此软件包页面 [3] 并点击 \"{label}\"。" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "用户 {user} [1] 删除了软件包 {pkgbase} [2]。\n\n您将不再收到此软件包的评论通知。" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "请记得为提案 {id} [1] 投票,投票时段将于48小时内结束。" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "提供的账户类别无效。" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "您没有权限更改账户类别。" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "您没有权限将此用户的账户类别更改为%s。" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "没有为 %s 接受的现有孤立请求。" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "内部服务器错误" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "发生了严重的错误。" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "详细信息已被记录,并会交由 Postmaster 尽快调查。对您造成的不便,我们深感抱歉。" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "AUR 服务器错误" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "相关软件包请求关闭评论…" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "此操作将关闭任何有关的未处理的软件包请求。若省略%s评论%s,将会自动生成关闭评论。" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "" - -#: templates/requests.html -msgid "Package name" -msgstr "" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "" diff --git a/po/zh_TW.po b/po/zh_TW.po index 40521236..f1451354 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -1,2373 +1,1318 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the AURWEB package. -# +# This file is distributed under the same license as the PACKAGE package. +# # Translators: -# pan93412 , 2018 -# Cycatz , 2022 -# 黃柏諺 , 2014-2017 -# 黃柏諺 , 2020-2023 +# Jeff Huang , 2014-2015 msgid "" msgstr "" -"Project-Id-Version: aurweb\n" -"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/archlinux/aurweb/-/issues\n" -"POT-Creation-Date: 2020-01-31 09:29+0100\n" -"PO-Revision-Date: 2011-04-10 13:21+0000\n" -"Last-Translator: 黃柏諺 , 2020-2023\n" -"Language-Team: Chinese (Taiwan) (http://app.transifex.com/lfleischer/aurweb/language/zh_TW/)\n" +"Project-Id-Version: Arch User Repository (AUR)\n" +"Report-Msgid-Bugs-To: https://bugs.archlinux.org/index.php?project=2\n" +"POT-Creation-Date: 2015-06-11 23:45+0200\n" +"PO-Revision-Date: 2015-06-11 21:46+0000\n" +"Last-Translator: Lukas Fleischer \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/aur/" +"language/zh_TW/)\n" +"Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: html/404.php msgid "Page Not Found" msgstr "頁面找不到" -#: html/404.php msgid "Sorry, the page you've requested does not exist." msgstr "抱歉,您所請求的頁面不存在。" -#: html/404.php template/pkgreq_close_form.php -msgid "Note" -msgstr "注意" - -#: html/404.php -msgid "Git clone URLs are not meant to be opened in a browser." -msgstr "Git clone 的網址並不代表可以在瀏覽器中開啟。" - -#: html/404.php -#, php-format -msgid "To clone the Git repository of %s, run %s." -msgstr "要 clone %s 的 Git 倉庫,執行 %s。" - -#: html/404.php -#, php-format -msgid "Click %shere%s to return to the %s details page." -msgstr "點選 %s此處%s 以回到 %s 的詳細資訊頁面。" - -#: html/503.php msgid "Service Unavailable" msgstr "服務不可用" -#: html/503.php msgid "" "Don't panic! This site is down due to maintenance. We will be back soon." msgstr "別緊張!這個頁面因維護而暫時下線。我們很快就會回來。" -#: html/account.php msgid "Account" msgstr "帳號" -#: html/account.php template/header.php msgid "Accounts" msgstr "帳號" -#: html/account.php html/addvote.php msgid "You are not allowed to access this area." msgstr "您不被允許存取此區域。" -#: html/account.php msgid "Could not retrieve information for the specified user." msgstr "無法擷取指定使用者的資訊。" -#: html/account.php msgid "You do not have permission to edit this account." msgstr "您沒有權限編輯此帳號。" -#: html/account.php lib/acctfuncs.inc.php -msgid "Invalid password." -msgstr "無效的密碼。" - -#: html/account.php msgid "Use this form to search existing accounts." msgstr "使用此表單來搜尋已有的帳號。" -#: html/account.php msgid "You must log in to view user information." -msgstr "您必須登入才能檢視使用者資訊。" +msgstr "您必須登入以檢視使用者資訊。" + +msgid "Use this form to create an account." +msgstr "使用此表單來新建一個帳號。" -#: html/addvote.php template/tu_list.php msgid "Add Proposal" msgstr "添加建議" -#: html/addvote.php msgid "Invalid token for user action." msgstr "無效的使用者動作標誌。" -#: html/addvote.php msgid "Username does not exist." msgstr "使用者名稱不存在。" -#: html/addvote.php #, php-format msgid "%s already has proposal running for them." msgstr "%s 已經有了關於他們的建議。" -#: html/addvote.php msgid "Invalid type." msgstr "無效的類型。" -#: html/addvote.php msgid "Proposal cannot be empty." msgstr "建議不能為空。" -#: html/addvote.php msgid "New proposal submitted." msgstr "已提交新的建議。" -#: html/addvote.php msgid "Submit a proposal to vote on." msgstr "提交一個建議用於投票。" -#: html/addvote.php msgid "Applicant/TU" msgstr "申請人/受信使用者" -#: html/addvote.php msgid "(empty if not applicable)" msgstr "(如果不符合可以留空)" -#: html/addvote.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Type" msgstr "類型" -#: html/addvote.php -msgid "Addition of a Package Maintainer" -msgstr "新增軟體包維護者" +msgid "Addition of a TU" +msgstr "添加受信使用者" -#: html/addvote.php -msgid "Removal of a Package Maintainer" -msgstr "移除軟體包維護者" +msgid "Removal of a TU" +msgstr "移除受信使用者" -#: html/addvote.php -msgid "Removal of a Package Maintainer (undeclared inactivity)" -msgstr "移除軟體包維護者(無故不活躍)" +msgid "Removal of a TU (undeclared inactivity)" +msgstr "移除受信使用者(無故不活躍)" -#: html/addvote.php msgid "Amendment of Bylaws" msgstr "修定規則" -#: html/addvote.php template/tu_list.php msgid "Proposal" msgstr "建議" -#: html/addvote.php msgid "Submit" msgstr "提交" -#: html/comaintainers.php template/comaintainers_form.php msgid "Manage Co-maintainers" msgstr "管理共同維護者" -#: html/commentedit.php template/pkg_comments.php -msgid "Edit comment" -msgstr "編輯評論" - -#: html/home.php template/header.php -msgid "Dashboard" -msgstr "儀表板" - -#: html/home.php template/header.php msgid "Home" msgstr "首頁" -#: html/home.php -msgid "My Flagged Packages" -msgstr "我標記的套件" - -#: html/home.php -msgid "My Requests" -msgstr "我的請求" - -#: html/home.php -msgid "My Packages" -msgstr "我的套件" - -#: html/home.php -msgid "Search for packages I maintain" -msgstr "搜尋我維護的套件" - -#: html/home.php -msgid "Co-Maintained Packages" -msgstr "共同維護的套件" - -#: html/home.php -msgid "Search for packages I co-maintain" -msgstr "搜尋我共同維護的套件" - -#: html/home.php #, php-format msgid "" -"Welcome to the AUR! Please read the %sAUR User Guidelines%s for more " -"information and the %sAUR Submission Guidelines%s if you want to contribute " -"a PKGBUILD." -msgstr "歡迎使用 AUR!請閱讀 %sAUR 使用者指南%s以取得更多資訊,若您想要貢獻 PKGBUILD,也請閱讀 %sAUR 遞交指南%s。" +"Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU " +"Guidelines%s for more information." +msgstr "" +"歡迎來到 AUR!請閱讀 %sAUR 使用者指導方針%s 和 %sAUR 受信使用者指導方針%s 以" +"獲取更多的詳細資訊。" -#: html/home.php #, php-format msgid "" "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s " "otherwise they will be deleted!" -msgstr "所貢獻的 PKGBUILDs 和 PKGINFOs %s必須%s 符合 %sArch 打包標準%s 否則將被被刪除! " +msgstr "" +"所貢獻的 PKGBUILDs 和 PKGINFOs %s必須%s 符合 %sArch 打包標準%s 否則將被被刪" +"除! " -#: html/home.php msgid "Remember to vote for your favourite packages!" msgstr "記得投一票給您喜愛的套件!" -#: html/home.php -msgid "Some packages may be provided as binaries in [extra]." -msgstr "某些套件可能會在 [extra] 提供二進位檔案。" +msgid "Some packages may be provided as binaries in [community]." +msgstr "某些套件可能會在 [community] 提供二進位檔案。" -#: html/home.php msgid "DISCLAIMER" msgstr "免責聲明" -#: html/home.php template/footer.php msgid "" -"AUR packages are user produced content. Any use of the provided files is at " -"your own risk." -msgstr "AUR 上的檔案是使用者產生的內容。任何使用檔案造成的風險由您自行承擔。" +"Unsupported packages are user produced content. Any use of the provided " +"files is at your own risk." +msgstr "AUR 上的檔案是使用者產生的內容。任何使用檔案的風險由您自行承擔。" -#: html/home.php -msgid "Learn more..." -msgstr "了解更多..." - -#: html/home.php msgid "Support" -msgstr "支援" +msgstr "" -#: html/home.php msgid "Package Requests" -msgstr "套件請求" +msgstr "" -#: html/home.php #, php-format msgid "" -"There are three types of requests that can be filed in the %sPackage " -"Actions%s box on the package details page:" -msgstr "有三種您可以在套件細節頁面中的 %s套件動作%s 中使用的請求:" +"There are three types of requests that can be filed in the %sPackage Actions" +"%s box on the package details page:" +msgstr "" -#: html/home.php msgid "Orphan Request" -msgstr "棄置請求" +msgstr "" -#: html/home.php msgid "" "Request a package to be disowned, e.g. when the maintainer is inactive and " "the package has been flagged out-of-date for a long time." -msgstr "請求一個套件被解除擁有權,例如:當維護者不活躍且套件已經被標記為過期很長一段時間。" +msgstr "" -#: html/home.php msgid "Deletion Request" -msgstr "刪除請求" +msgstr "" -#: html/home.php msgid "" -"Request a package to be removed from the Arch User Repository. Please do not" -" use this if a package is broken and can be fixed easily. Instead, contact " -"the maintainer and file orphan request if necessary." -msgstr "請求軟體包從 Arch 使用者軟體庫中移除。如果軟體包損毀但可以很容易的被修復,請不要使用這個請求。您應該聯絡維護者,並在必要時提出棄置請求。" +"Request a package to be removed from the Arch User Repository. Please do not " +"use this if a package is broken and can be fixed easily. Instead, contact " +"the package maintainer and file orphan request if necessary." +msgstr "" -#: html/home.php msgid "Merge Request" -msgstr "合併請求" +msgstr "" -#: html/home.php msgid "" "Request a package to be merged into another one. Can be used when a package " "needs to be renamed or replaced by a split package." -msgstr "請求將一個套件合併到另一個。可以使用在需要重新命名或是由分裂的套件所取代的套件。" +msgstr "" -#: html/home.php #, php-format msgid "" "If you want to discuss a request, you can use the %saur-requests%s mailing " "list. However, please do not use that list to file requests." -msgstr "如果您想要討論某一個請求,您可以使用 %saur-requests%s 郵件列表。但請不要使用這個列表來提出請求。" +msgstr "" -#: html/home.php -msgid "Submitting Packages" -msgstr "遞交套件" - -#: html/home.php -#, php-format -msgid "" -"Git over SSH is now used to submit packages to the AUR. See the %sSubmitting" -" packages%s section of the Arch User Repository ArchWiki page for more " -"details." -msgstr "現在遞交套件到 AUR 上的方法是透過 SSH 的 Git。參見 ArchWiki 上的 Arch User Repository 頁面之 %s遞交套件%s 章節以取得更多資訊。" - -#: html/home.php -msgid "The following SSH fingerprints are used for the AUR:" -msgstr "AUR 使用下列 SSH 指紋:" - -#: html/home.php msgid "Discussion" msgstr "討論" -#: html/home.php #, php-format msgid "" -"General discussion regarding the Arch User Repository (AUR) and Package " -"Maintainer structure takes place on %saur-general%s. For discussion relating" -" to the development of the AUR web interface, use the %saur-dev%s mailing " -"list." -msgstr "與 Arch 使用者軟體庫 (AUR) 與軟體包維護者結構相關的一般性討論請見 %saur-general%s 。討論關於 AUR 網頁介面的開發,請使用 %saur-dev%s 郵件列表。" +"General discussion regarding the Arch User Repository (AUR) and Trusted User " +"structure takes place on %saur-general%s. For discussion relating to the " +"development of the AUR web interface, use the %saur-dev%s mailing list." +msgstr "" -#: html/home.php msgid "Bug Reporting" msgstr "臭蟲回報" -#: html/home.php #, php-format msgid "" "If you find a bug in the AUR web interface, please fill out a bug report on " -"our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface" -" %sonly%s. To report packaging bugs contact the maintainer or leave a " -"comment on the appropriate package page." -msgstr "如果您在 AUR 網頁介面中發現了臭蟲,請在我們的 %s臭蟲追蹤系統%s 中回報。請%s只%s回報 AUR 網頁介面本身的臭蟲。要回報打包臭蟲,請連絡維護者或是在對應的軟體包頁面中留下評論。" +"our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To " +"report packaging bugs contact the package maintainer or leave a comment on " +"the appropriate package page." +msgstr "" -#: html/home.php msgid "Package Search" msgstr "搜尋套件" -#: html/index.php msgid "Adopt" msgstr "接管" -#: html/index.php msgid "Vote" msgstr "投票" -#: html/index.php msgid "UnVote" msgstr "取消投票" -#: html/index.php template/pkg_search_form.php template/pkg_search_results.php msgid "Notify" msgstr "通知" -#: html/index.php template/pkg_search_results.php msgid "UnNotify" msgstr "取消通知" -#: html/index.php +msgid "Flag" +msgstr "標記" + msgid "UnFlag" msgstr "取消標記" -#: html/login.php template/header.php msgid "Login" msgstr "登入" -#: html/login.php html/tos.php #, php-format msgid "Logged-in as: %s" msgstr "已登入為: %s" -#: html/login.php template/header.php msgid "Logout" msgstr "登出" -#: html/login.php msgid "Enter login credentials" msgstr "輸入登入資訊" -#: html/login.php -msgid "User name or primary email address" -msgstr "使用者名稱或主要電子郵件地址" +msgid "Username" +msgstr "使用者名稱" -#: html/login.php template/account_delete.php template/account_edit_form.php msgid "Password" msgstr "密碼" -#: html/login.php msgid "Remember me" msgstr "記住我" -#: html/login.php msgid "Forgot Password" msgstr "忘記密碼" -#: html/login.php #, php-format msgid "" "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." msgstr "HTTP 登入已被停用。如果您想要登入的話,請 %s切換至HTTPs%s 。" -#: html/packages.php template/pkg_search_form.php msgid "Search Criteria" msgstr "搜尋條件" -#: html/packages.php template/header.php template/pkgbase_details.php -#: template/stats/general_stats_table.php template/stats/user_table.php msgid "Packages" msgstr "套件" -#: html/packages.php msgid "Error trying to retrieve package details." msgstr "嘗試擷取套件細節時發生錯誤。" -#: html/passreset.php lib/acctfuncs.inc.php msgid "Missing a required field." msgstr "缺少必填項目。" -#: html/passreset.php lib/acctfuncs.inc.php msgid "Password fields do not match." msgstr "密碼不符合。" -#: html/passreset.php lib/acctfuncs.inc.php #, php-format msgid "Your password must be at least %s characters." msgstr "您的密碼必須至少 %s 個字節。" -#: html/passreset.php msgid "Invalid e-mail." msgstr "無效的電子郵件。" -#: html/passreset.php +#, php-format +msgid "" +"A password reset request was submitted for the account %s associated with " +"your e-mail address. If you wish to reset your password follow the link " +"below, otherwise ignore this message and nothing will happen." +msgstr "" +"一個關聯到您的電子郵件地址的帳號 %s 已遞交了密碼重置請求。如果您想要重置您的" +"密碼,請使用以下的連結,否則您可以忽略這則訊息,且不會發生任何事情。" + msgid "Password Reset" msgstr "密碼重置" -#: html/passreset.php msgid "Check your e-mail for the confirmation link." msgstr "請檢查您的電子郵件信箱裡是否有確認連結。" -#: html/passreset.php msgid "Your password has been reset successfully." msgstr "您的密碼已成功重置。" -#: html/passreset.php -msgid "Confirm your user name or primary e-mail address:" -msgstr "確認您的使用者名稱或主要電子郵件地址:" +msgid "Confirm your e-mail address:" +msgstr "確認您的電子郵件位置:" -#: html/passreset.php msgid "Enter your new password:" msgstr "輸入您的新密碼:" -#: html/passreset.php msgid "Confirm your new password:" msgstr "確認您的新密碼:" -#: html/passreset.php html/tos.php msgid "Continue" msgstr "繼續" -#: html/passreset.php #, php-format msgid "" -"If you have forgotten the user name and the primary e-mail address you used " -"to register, please send a message to the %saur-general%s mailing list." -msgstr "如果您忘記了使用者名稱與您用於註冊的主要電子郵件地址,請傳送訊息到 %saur-general%s 郵件清單。" +"If you have forgotten the e-mail address you used to register, please send a " +"message to the %saur-general%s mailing list." +msgstr "" +"如果您忘了您用來註冊的電子郵件地址,請寄一封訊息到 %saur-general%s 郵件列表" +"中。" -#: html/passreset.php -msgid "Enter your user name or your primary e-mail address:" -msgstr "輸入您的使用者名稱或您的主要電子郵件地址:" +msgid "Enter your e-mail address:" +msgstr "輸入您的電子郵件地址:" -#: html/pkgbase.php -msgid "Package Bases" -msgstr "套件基礎" - -#: html/pkgbase.php msgid "" "The selected packages have not been disowned, check the confirmation " "checkbox." msgstr "選取的套件未被棄置,請檢查確認的核取方塊。" -#: aurweb/routers/packages.py -msgid "" -"The selected packages have not been adopted, check the confirmation " -"checkbox." -msgstr "選定的軟體包尚未被認領,請勾選確認核取方塊。" - -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot find package to merge votes and comments into." msgstr "找不到合併投票與評論的目標套件。" -#: html/pkgbase.php lib/pkgreqfuncs.inc.php msgid "Cannot merge a package base with itself." msgstr "無法將一個套件基礎與它自己合併。" -#: html/pkgbase.php msgid "" -"The selected packages have not been deleted, check the confirmation " -"checkbox." +"The selected packages have not been deleted, check the confirmation checkbox." msgstr "選取的套件未被刪除,請檢查確認的核取方塊。" -#: html/pkgdel.php msgid "Package Deletion" msgstr "套件刪除" -#: html/pkgdel.php template/pkgbase_actions.php -msgid "Delete Package" -msgstr "刪除套件" +#, php-format +msgid "Delete Package: %s" +msgstr "刪除套件: %s" -#: html/pkgdel.php #, php-format msgid "" "Use this form to delete the package base %s%s%s and the following packages " "from the AUR: " msgstr "使用這個表單以從 AUR 刪除套件基礎 %s%s%s 以及以下的套件。" -#: html/pkgdel.php msgid "Deletion of a package is permanent. " msgstr "套件刪除是永久性的操作。" -#: html/pkgdel.php html/pkgmerge.php msgid "Select the checkbox to confirm action." msgstr "選取核取方塊以確認動作。" -#: html/pkgdel.php msgid "Confirm package deletion" msgstr "確認套件刪除" -#: html/pkgdel.php template/account_delete.php msgid "Delete" msgstr "刪除" -#: html/pkgdel.php -msgid "Only Package Maintainers and Developers can delete packages." -msgstr "僅軟體包維護者與開發者可以刪除軟體包。" +msgid "Only Trusted Users and Developers can delete packages." +msgstr "只有受信使用者和開發者可以刪除套件。" -#: html/pkgdisown.php template/pkgbase_actions.php msgid "Disown Package" msgstr "棄置套件" -#: html/pkgdisown.php +#, php-format +msgid "Disown Package: %s" +msgstr "棄置套件:%s" + #, php-format msgid "" -"Use this form to disown the package base %s%s%s which includes the following" -" packages: " +"Use this form to disown the package base %s%s%s which includes the following " +"packages: " msgstr "使用這個表單以棄置一個包含以下套件的套件基礎 %s%s%s :" -#: html/pkgdisown.php -msgid "" -"By selecting the checkbox, you confirm that you want to no longer be a " -"package co-maintainer." -msgstr "一核取此核取框,意味著你不想要再成為軟體包的共同維護者。" - -#: html/pkgdisown.php #, php-format msgid "" "By selecting the checkbox, you confirm that you want to disown the package " "and transfer ownership to %s%s%s." msgstr "透過選取核取方塊,您就會確認您想要棄置此套件並轉移所有權給 %s%s%s。" -#: html/pkgdisown.php msgid "" "By selecting the checkbox, you confirm that you want to disown the package." msgstr "透過選取核取方塊,您就會確認您想要棄置此套件。" -#: html/pkgdisown.php msgid "Confirm to disown the package" msgstr "確認棄置此套件" -#: html/pkgdisown.php msgid "Disown" msgstr "棄置" -#: html/pkgdisown.php -msgid "Only Package Maintainers and Developers can disown packages." -msgstr "僅軟體包維護者與開發者可以棄置軟體包。" +msgid "Only Trusted Users and Developers can disown packages." +msgstr "只有受信使用者和開發者可以棄置套件。" -#: html/pkgflagcomment.php -msgid "Flag Comment" -msgstr "標記評論" - -#: html/pkgflag.php -msgid "Flag Package Out-Of-Date" -msgstr "將套件標記為過期" - -#: templates/packages/flag.html -msgid "" -"This seems to be a VCS package. Please do %snot%s flag it out-of-date if the" -" package version in the AUR does not match the most recent commit. Flagging " -"this package should only be done if the sources moved or changes in the " -"PKGBUILD are required because of recent upstream changes." -msgstr "這似乎是 VCS 軟體包。請%s不要%s因為 AUR 中的軟體包版本與最新的 commit 不相符就將其標記為過期。僅當來源移動或是因為最新的上游變更而需要變更 PKGBUILD 時才標記此軟體包。" - -#: html/pkgflag.php -#, php-format -msgid "" -"Use this form to flag the package base %s%s%s and the following packages " -"out-of-date: " -msgstr "使用這個表單來標記套件基礎 %s%s%s 以及以下的套件已過期:" - -#: html/pkgflag.php -#, php-format -msgid "" -"Please do %snot%s use this form to report bugs. Use the package comments " -"instead." -msgstr "請 %s不要%s 使用此表單來回報臭蟲。打包臭蟲應使用套件頁面的評論功能回報。" - -#: html/pkgflag.php -msgid "" -"Enter details on why the package is out-of-date below, preferably including " -"links to the release announcement or the new release tarball." -msgstr "在下面輸入要將套件標記為過期的詳細原因,最好包括釋出公告或是新版 tarball 的連結。" - -#: html/pkgflag.php template/pkgreq_close_form.php template/pkgreq_form.php -#: template/pkgreq_results.php -msgid "Comments" -msgstr "評論" - -#: html/pkgflag.php -msgid "Flag" -msgstr "標記" - -#: html/pkgflag.php -msgid "Only registered users can flag packages out-of-date." -msgstr "只有已註冊的使用者可以標記套件為過期。" - -#: html/pkgmerge.php msgid "Package Merging" msgstr "套件合併" -#: html/pkgmerge.php template/pkgbase_actions.php -msgid "Merge Package" -msgstr "合併套件" +#, php-format +msgid "Merge Package: %s" +msgstr "合併套件:: %s" -#: html/pkgmerge.php #, php-format msgid "Use this form to merge the package base %s%s%s into another package. " msgstr "使用這個表單以合併套件基礎 %s%s%s 以及其他套件。" -#: html/pkgmerge.php msgid "The following packages will be deleted: " msgstr "以下套件將會被刪除:" -#: html/pkgmerge.php msgid "Once the package has been merged it cannot be reversed. " msgstr "套件一經合併即無法回復。" -#: html/pkgmerge.php msgid "Enter the package name you wish to merge the package into. " msgstr "請輸入您想要合併到該套件的套件名稱。" -#: html/pkgmerge.php msgid "Merge into:" msgstr "合併到:" -#: html/pkgmerge.php msgid "Confirm package merge" msgstr "確認套件合併" -#: html/pkgmerge.php template/pkgreq_form.php msgid "Merge" msgstr "合併" -#: html/pkgmerge.php -msgid "Only Package Maintainers and Developers can merge packages." -msgstr "僅軟體包維護者與開發者可以合併軟體包。" +msgid "Only Trusted Users and Developers can merge packages." +msgstr "只有受信使用者和開發者可以合併套件。" -#: html/pkgreq.php template/pkgbase_actions.php template/pkgreq_form.php -msgid "Submit Request" -msgstr "遞交請求" +msgid "File Request" +msgstr "提交請求" -#: html/pkgreq.php template/pkgreq_close_form.php msgid "Close Request" msgstr "關閉請求" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "First" msgstr "第一頁" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Previous" msgstr "上一頁" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php template/tu_list.php msgid "Next" msgstr "下一頁" -#: html/pkgreq.php lib/aur.inc.php lib/pkgfuncs.inc.php msgid "Last" msgstr "最後一頁" -#: html/pkgreq.php template/header.php msgid "Requests" msgstr "請求" -#: html/register.php template/header.php -msgid "Register" -msgstr "註冊" +msgid "Trusted User" +msgstr "受信使用者" -#: html/register.php -msgid "Use this form to create an account." -msgstr "使用此表單來新建一個帳號。" - -#: html/tos.php -msgid "Terms of Service" -msgstr "服務條款" - -#: html/tos.php -msgid "" -"The following documents have been updated. Please review them carefully:" -msgstr "以下的文件已更新。請小心審閱它們:" - -#: html/tos.php -#, php-format -msgid "revision %d" -msgstr "修訂版本:%d" - -#: html/tos.php -msgid "I accept the terms and conditions above." -msgstr "我接受上述條款與條件。" - -#: html/tu.php template/account_details.php template/header.php -msgid "Package Maintainer" -msgstr "軟體包維護者" - -#: html/tu.php msgid "Could not retrieve proposal details." msgstr "無法取得建議的細節。" -#: html/tu.php msgid "Voting is closed for this proposal." msgstr "這個建議的投票已被關閉。" -#: html/tu.php -msgid "Only Package Maintainers are allowed to vote." -msgstr "僅軟體包維護者可以投票。" +msgid "Only Trusted Users are allowed to vote." +msgstr "只有受信使用者可以投票。" -#: html/tu.php msgid "You cannot vote in an proposal about you." msgstr "您不能在關於您的建議中投票。" -#: html/tu.php msgid "You've already voted for this proposal." msgstr "您已經在此建議上投過票了。" -#: html/tu.php msgid "Vote ID not valid." msgstr "投票的 ID 無效。" -#: html/tu.php template/tu_list.php msgid "Current Votes" msgstr "目前的投票" -#: html/tu.php msgid "Past Votes" msgstr "過去投票" -#: html/voters.php template/tu_details.php msgid "Voters" msgstr "投票者" -#: lib/acctfuncs.inc.php msgid "" "Account registration has been disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "帳號註冊在您目前所使用的 IP 位址被停用,可能是因為一些持續性的垃圾攻擊。我們為您的不便致歉。" +msgstr "" +"帳號註冊在您目前所使用的 IP 位址被停用,可能是因為一些持續性的垃圾攻擊。我們" +"為您的不便致歉。" -#: lib/acctfuncs.inc.php msgid "Missing User ID" msgstr "遺失使用者 ID" -#: lib/acctfuncs.inc.php msgid "The username is invalid." msgstr "使用者名稱無效。" -#: lib/acctfuncs.inc.php #, php-format msgid "It must be between %s and %s characters long" msgstr "使用者名稱的長度必須在 %s 到 %s 個字節間。" -#: lib/acctfuncs.inc.php msgid "Start and end with a letter or number" msgstr "以字母或數字當做開頭或結尾" -#: lib/acctfuncs.inc.php msgid "Can contain only one period, underscore or hyphen." msgstr "最多包含一個「.」、「_」或「-」。" -#: lib/acctfuncs.inc.php -msgid "Please confirm your new password." -msgstr "請確認您的新密碼。" - -#: lib/acctfuncs.inc.php msgid "The email address is invalid." msgstr "電子郵件地址無效。" -#: lib/acctfuncs.inc.php -msgid "The backup email address is invalid." -msgstr "備份電子郵件地址無效。" - -#: lib/acctfuncs.inc.php -msgid "The home page is invalid, please specify the full HTTP(s) URL." -msgstr "首頁無效,請指定完整的 HTTP(s) URL。" - -#: lib/acctfuncs.inc.php msgid "The PGP key fingerprint is invalid." msgstr "PGP 密鑰指紋無效。" -#: lib/acctfuncs.inc.php msgid "The SSH public key is invalid." msgstr "SSH 公開金鑰無效。" -#: lib/acctfuncs.inc.php msgid "Cannot increase account permissions." msgstr "無法提升帳號權限。" -#: lib/acctfuncs.inc.php msgid "Language is not currently supported." msgstr "目前不支援此語言。" -#: lib/acctfuncs.inc.php -msgid "Timezone is not currently supported." -msgstr "目前不支援時區。" - -#: lib/acctfuncs.inc.php #, php-format msgid "The username, %s%s%s, is already in use." msgstr "使用者名稱 %s%s%s 已被使用。" -#: lib/acctfuncs.inc.php #, php-format msgid "The address, %s%s%s, is already in use." msgstr "該位址 %s%s%s 已被使用。" -#: lib/acctfuncs.inc.php #, php-format msgid "The SSH public key, %s%s%s, is already in use." msgstr "SSH 公開金鑰,%s%s%s,已在使用中。" -#: lib/acctfuncs.inc.php -msgid "The CAPTCHA is missing." -msgstr "驗證碼遺失。" - -#: lib/acctfuncs.inc.php -msgid "This CAPTCHA has expired. Please try again." -msgstr "驗證碼已過期。請再試一次。" - -#: lib/acctfuncs.inc.php -msgid "The entered CAPTCHA answer is invalid." -msgstr "輸入的驗證碼答案無效。" - -#: lib/acctfuncs.inc.php #, php-format msgid "Error trying to create account, %s%s%s." msgstr "嘗試建立帳號 %s%s%s 時發生錯誤。" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully created." msgstr "帳號 %s%s%s 已成功建立。" -#: lib/acctfuncs.inc.php -msgid "A password reset key has been sent to your e-mail address." -msgstr "一個密碼重置密鑰已寄到您的電子郵件信箱中。" - -#: lib/acctfuncs.inc.php msgid "Click on the Login link above to use your account." msgstr "點擊上面的登入連結以使用您的帳號。" -#: lib/acctfuncs.inc.php +#, php-format +msgid "" +"Welcome to %s! In order to set an initial password for your new account, " +"please click the link below. If the link does not work try copying and " +"pasting it into your browser." +msgstr "" +"歡迎來到 %s !為了幫您的新帳號設定一個初始密碼,請點擊下面的連結。如果該連結" +"無法運作,請嘗試複置它並將其貼到您瀏覽器的網址列中。" + +msgid "A password reset key has been sent to your e-mail address." +msgstr "一個密碼重置密鑰已寄到您的電子郵件信箱中。" + #, php-format msgid "No changes were made to the account, %s%s%s." msgstr "帳號 %s%s%s 沒有被修改。" -#: lib/acctfuncs.inc.php #, php-format msgid "The account, %s%s%s, has been successfully modified." msgstr "帳號 %s%s%s 已成功修改。" -#: lib/acctfuncs.inc.php msgid "" "The login form is currently disabled for your IP address, probably due to " "sustained spam attacks. Sorry for the inconvenience." -msgstr "登入表單在您目前所使用的 IP 位址被停用,可能是因為一些持續性的垃圾攻擊。我們為您的不便致歉。" +msgstr "" +"登入表單在您目前所使用的 IP 位址被停用,可能是因為一些持續性的垃圾攻擊。我們" +"為您的不便致歉。" -#: lib/acctfuncs.inc.php msgid "Account suspended" msgstr "帳號被暫停" -#: aurweb/routers/accounts.py -msgid "You do not have permission to suspend accounts." -msgstr "您無權暫停帳號。" - -#: lib/acctfuncs.inc.php #, php-format msgid "" "Your password has been reset. If you just created a new account, please use " "the link from the confirmation email to set an initial password. Otherwise, " "please request a reset key on the %sPassword Reset%s page." -msgstr "您的密碼已成功重置。如果您剛建立了一個新帳號,請使用確認郵件中的連結來設定一個初始密碼。否則,請在 %s密碼重置%s 頁面上請求一個重置密鑰。" +msgstr "" +"您的密碼已成功重置。如果您剛建立了一個新帳號,請使用確認郵件中的連結來設定一" +"個初始密碼。否則,請在 %s密碼重置%s 頁面上請求一個重置密鑰。" -#: lib/acctfuncs.inc.php msgid "Bad username or password." msgstr "使用者名稱或密碼錯誤。" -#: lib/acctfuncs.inc.php msgid "An error occurred trying to generate a user session." msgstr "嘗試生成使用者工作階段時發生錯誤。" -#: lib/acctfuncs.inc.php msgid "Invalid e-mail and reset key combination." msgstr "無效的電子郵件與密鑰組合。" -#: lib/aur.inc.php template/pkg_details.php msgid "None" msgstr "無" -#: lib/aur.inc.php template/pkgreq_results.php template/pkg_search_results.php -#, php-format -msgid "View account information for %s" -msgstr "檢視 %s 的帳號資訊" - -#: lib/aurjson.class.php -msgid "Package base ID or package base name missing." -msgstr "套件基礎的 ID 或套件基礎的名稱遺失。" - -#: lib/aurjson.class.php lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit this comment." -msgstr "您不被允許編輯此評論。" - -#: lib/aurjson.class.php -msgid "Comment does not exist." -msgstr "評論不存在。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment cannot be empty." -msgstr "評論不能為空。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been added." -msgstr "評論已新增。" - -#: lib/pkgbasefuncs.inc.php -msgid "You must be logged in before you can edit package information." -msgstr "您必須先登入才能編輯套件資訊。" - -#: lib/pkgbasefuncs.inc.php -msgid "Missing comment ID." -msgstr "遺失評論 ID。" - -#: lib/pkgbasefuncs.inc.php -msgid "No more than 5 comments can be pinned." -msgstr "只能釘選不超過 5 個評論。" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to pin this comment." -msgstr "您不被允許釘選這個評論。" - -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to unpin this comment." -msgstr "您不被允許解除釘選這個評論。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been pinned." -msgstr "評論已釘選。" - -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been unpinned." -msgstr "評論已解除釘選。" - -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Error retrieving package details." msgstr "擷取套件細節時發生錯誤。" -#: lib/pkgbasefuncs.inc.php lib/pkgfuncs.inc.php msgid "Package details could not be found." msgstr "找不到套件的詳細資訊。" -#: aurweb/routers/auth.py -msgid "Bad Referer header." -msgstr "錯誤的 Referer 標頭。" - -#: aurweb/routers/packages.py -msgid "You did not select any packages to be notified about." -msgstr "您沒有選取任何要被通知的軟體包。" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been enabled." -msgstr "選定的軟體包通知已啟用。" - -#: aurweb/routers/packages.py -msgid "You did not select any packages for notification removal." -msgstr "您沒有選取任何要刪除通知的軟體包。" - -#: aurweb/routers/packages.py -msgid "A package you selected does not have notifications enabled." -msgstr "您選取的軟體包並未啟用通知。" - -#: aurweb/routers/packages.py -msgid "The selected packages' notifications have been removed." -msgstr "選定的軟體包通知已移除。" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can flag packages." msgstr "您必須先登入才能標記套件。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to flag." msgstr "您沒有選擇任何要標記的套件。" -#: lib/pkgbasefuncs.inc.php -msgid "The selected packages have not been flagged, please enter a comment." -msgstr "選定的套件尚未被標記,請輸入評論。" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been flagged out-of-date." msgstr "選定的套件已被標記為過期。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can unflag packages." msgstr "您必須先登入才能取消標記套件。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to unflag." msgstr "您沒有選擇任何要取消標記的套件。" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been unflagged." msgstr "選定的套件已被取消標記。" -#: lib/pkgbasefuncs.inc.php msgid "You do not have permission to delete packages." msgstr "您沒有權限刪除套件。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to delete." -msgstr "您沒有選取任何要刪除的套件。" +msgstr "您無法選取任何套件刪除。" -#: aurweb/routers/packages.py -msgid "One of the packages you selected does not exist." -msgstr "您選定的其中一個軟體包不存在。" - -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been deleted." msgstr "選取的套件已刪除。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can adopt packages." msgstr "您必須先登入才能接管套件。" -#: aurweb/routers/package.py -msgid "You are not allowed to adopt one of the packages you selected." -msgstr "您不得認領您選取的其中一個軟體包。" - -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can disown packages." msgstr "您必須先登入才能棄置套件。" -#: aurweb/routers/packages.py -msgid "You are not allowed to disown one of the packages you selected." -msgstr "您不能取消擁有您選定的其中一個軟體包。" - -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to adopt." msgstr "您沒有選擇任何要接管的套件。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to disown." msgstr "您沒有選擇任何要棄置的套件。" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been adopted." msgstr "選定的套件已接管。" -#: lib/pkgbasefuncs.inc.php msgid "The selected packages have been disowned." msgstr "選定的套件已棄置。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can vote for packages." msgstr "您必須先登入才能對套件投票。" -#: lib/pkgbasefuncs.inc.php msgid "You must be logged in before you can un-vote for packages." msgstr "您必須先登入才能對套件取消投票。" -#: lib/pkgbasefuncs.inc.php msgid "You did not select any packages to vote for." msgstr "您沒有選擇任何要投票的套件。" -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been removed from the selected packages." msgstr "您的投票已從選定的套件中被移除。" -#: lib/pkgbasefuncs.inc.php msgid "Your votes have been cast for the selected packages." msgstr "您的投票已加入選定的套件中。" -#: lib/pkgbasefuncs.inc.php msgid "Couldn't add to notification list." msgstr "無法加入到通知清單中。" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been added to the comment notification list for %s." msgstr "您已經成功加入到 %s 的評論通知列表。" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "You have been removed from the comment notification list for %s." msgstr "您已經成功從 %s 的評論通知列表移除。" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to undelete this comment." -msgstr "您不被允許反刪除此則評論。" +msgid "You must be logged in before you can edit package information." +msgstr "您必須先登入才能編輯套件資訊。" -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been undeleted." -msgstr "評論已被反刪除。" +msgid "Missing comment ID." +msgstr "遺失評論 ID。" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to delete this comment." -msgstr "您不被允許刪除此則評論。" - -#: lib/pkgbasefuncs.inc.php msgid "Comment has been deleted." msgstr "評論已被刪除。" -#: lib/pkgbasefuncs.inc.php -msgid "Comment has been edited." -msgstr "評論已被編輯。" +msgid "You are not allowed to delete this comment." +msgstr "您不被允許刪除此則評論。" -#: lib/pkgbasefuncs.inc.php -msgid "You are not allowed to edit the keywords of this package base." -msgstr "您不被允許編輯此套件基礎的關鍵字。" +msgid "Missing category ID." +msgstr "遺失分類 ID。" -#: lib/pkgbasefuncs.inc.php -msgid "The package base keywords have been updated." -msgstr "套件基礎關鍵字已更新。" +msgid "Invalid category ID." +msgstr "無效的分類 ID。" + +msgid "You are not allowed to change this package category." +msgstr "您不被允許改變此套件的分類。" + +msgid "Package category changed." +msgstr "套件分類已變更。" -#: lib/pkgbasefuncs.inc.php msgid "You are not allowed to manage co-maintainers of this package base." msgstr "您不被允許管理此套件基礎的共同維護者。" -#: lib/pkgbasefuncs.inc.php #, php-format msgid "Invalid user name: %s" msgstr "無效的使用者名稱:%s" -#: lib/pkgbasefuncs.inc.php msgid "The package base co-maintainers have been updated." msgstr "套件基礎共同維護者已更新。" -#: lib/pkgfuncs.inc.php template/pkgbase_details.php msgid "View packages details for" msgstr "檢視套件的詳細資訊" -#: lib/pkgfuncs.inc.php -#, php-format -msgid "requires %s" -msgstr "需要 %s" - -#: lib/pkgreqfuncs.inc.php msgid "You must be logged in to file package requests." msgstr "您必須先登入才能匯報套件請求。" -#: lib/pkgreqfuncs.inc.php msgid "Invalid name: only lowercase letters are allowed." msgstr "無效的名稱:只允許小寫字母。" -#: lib/pkgreqfuncs.inc.php msgid "The comment field must not be empty." msgstr "評論區域不能為空。" -#: lib/pkgreqfuncs.inc.php msgid "Invalid request type." msgstr "無效的請求類型。" -#: lib/pkgreqfuncs.inc.php msgid "Added request successfully." msgstr "成功加入請求。" -#: lib/pkgreqfuncs.inc.php msgid "Invalid reason." msgstr "無效的理由。" -#: lib/pkgreqfuncs.inc.php msgid "Only TUs and developers can close requests." msgstr "只有受信使用者和開發者可以關閉請求。" -#: lib/pkgreqfuncs.inc.php msgid "Request closed successfully." msgstr "請求關閉成功。" -#: template/account_delete.php #, php-format msgid "You can use this form to permanently delete the AUR account %s." msgstr "您可以使用這個表單來永久刪除 AUR 帳號 %s 。" -#: template/account_delete.php #, php-format msgid "%sWARNING%s: This action cannot be undone." msgstr "%s警告%s :此動作無法回復。" -#: template/account_delete.php msgid "Confirm deletion" msgstr "確認刪除" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php -msgid "Username" -msgstr "使用者名稱" - -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Account Type" msgstr "帳號類型" -#: template/account_details.php template/tu_details.php -#: template/tu_last_votes_list.php template/tu_list.php msgid "User" msgstr "使用者" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Developer" msgstr "開發者" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php -msgid "Package Maintainer & Developer" -msgstr "軟體包維護者與開發者" +msgid "Trusted User & Developer" +msgstr "受信使用者 & 開發者" -#: template/account_details.php template/account_edit_form.php -#: template/search_accounts_form.php msgid "Email Address" msgstr "電子郵件地址" -#: template/account_details.php -msgid "hidden" -msgstr "已隱藏" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "Real Name" msgstr "真實名稱" -#: template/account_details.php template/account_edit_form.php -msgid "Homepage" -msgstr "首頁" - -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php template/search_accounts_form.php msgid "IRC Nick" msgstr "IRC 暱稱" -#: template/account_details.php template/account_edit_form.php -#: template/account_search_results.php msgid "PGP Key Fingerprint" msgstr "PGP 密鑰指紋" -#: template/account_details.php template/account_search_results.php -#: template/pkgreq_results.php msgid "Status" msgstr "狀態" -#: template/account_details.php msgid "Inactive since" msgstr "不活躍自" -#: template/account_details.php template/account_search_results.php msgid "Active" msgstr "活躍" -#: template/account_details.php -msgid "Registration date:" -msgstr "註冊日期:" - -#: template/account_details.php template/pkgbase_details.php -#: template/pkg_details.php template/pkgreq_results.php -#: template/tu_details.php -msgid "unknown" -msgstr "未知" - -#: template/account_details.php msgid "Last Login" msgstr "最後登入" -#: template/account_details.php msgid "Never" msgstr "從未" -#: template/account_details.php msgid "View this user's packages" msgstr "檢視此使用者的套件" -#: template/account_details.php msgid "Edit this user's account" msgstr "編輯此使用者的帳號" -#: template/account_details.php -msgid "List this user's comments" -msgstr "列出此使用者的留言" - -#: template/account_edit_form.php #, php-format msgid "Click %shere%s if you want to permanently delete this account." msgstr "如果您想要永久刪除此帳號,請點擊 %s這裡%s 。" -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s for user details." -msgstr "點選 %s此處%s 來取得使用者的詳細資訊。" - -#: template/account_edit_form.php -#, php-format -msgid "Click %shere%s to list the comments made by this account." -msgstr "點擊%s此處%s以列出此帳號的留言。" - -#: template/account_edit_form.php msgid "required" msgstr "必填" -#: template/account_edit_form.php -msgid "" -"Your user name is the name you will use to login. It is visible to the " -"general public, even if your account is inactive." -msgstr "您的使用者名稱是您要用於登入的名稱。它是公開的,即使您的帳號已停用。" - -#: template/account_edit_form.php template/search_accounts_form.php msgid "Normal user" msgstr "一般使用者" -#: template/account_edit_form.php template/search_accounts_form.php +msgid "Trusted user" +msgstr "受信使用者" + msgid "Account Suspended" msgstr "帳號被暫停" -#: template/account_edit_form.php msgid "Inactive" msgstr "不活躍" -#: template/account_edit_form.php -msgid "" -"Please ensure you correctly entered your email address, otherwise you will " -"be locked out." -msgstr "請確保您正確的輸入了您的電子郵件地址,否則您將會被鎖定。" - -#: template/account_edit_form.php -msgid "Hide Email Address" -msgstr "隱藏電子郵件地址" - -#: template/account_edit_form.php -msgid "" -"If you do not hide your email address, it is visible to all registered AUR " -"users. If you hide your email address, it is visible to members of the Arch " -"Linux staff only." -msgstr "如果您不隱藏您的電子郵件地址,它就是對所有已註冊的 AUR 使用者可見。如果您隱藏您的電子郵件地址,它就只對 Arch Linux 工作人員可見。" - -#: template/account_edit_form.php -msgid "Backup Email Address" -msgstr "備援電子郵件地址" - -#: template/account_edit_form.php -msgid "" -"Optionally provide a secondary email address that can be used to restore " -"your account in case you lose access to your primary email address." -msgstr "選擇性提供次要的電子郵件地址,讓您在您失去對主要電子郵件地址的存取權時,仍可復原您的帳號。" - -#: template/account_edit_form.php -msgid "" -"Password reset links are always sent to both your primary and your backup " -"email address." -msgstr "密碼重設連結一直都會同時寄往您的主要與備援電子郵件地址。" - -#: template/account_edit_form.php -#, php-format -msgid "" -"Your backup email address is always only visible to members of the Arch " -"Linux staff, independent of the %s setting." -msgstr "您的備援電子郵件地址只對 Arch Linux 工作人員可見,與 %s 設定無關。" - -#: template/account_edit_form.php -msgid "Language" -msgstr "語言" - -#: template/account_edit_form.php -msgid "Timezone" -msgstr "時區" - -#: template/account_edit_form.php -msgid "" -"If you want to change the password, enter a new password and confirm the new" -" password by entering it again." -msgstr "如果您想要變更密碼,輸入新密碼並再輸入一次以確認新密碼。" - -#: template/account_edit_form.php msgid "Re-type password" msgstr "重新輸入密碼" -#: template/account_edit_form.php +msgid "Language" +msgstr "語言" + msgid "" -"The following information is only required if you want to submit packages to" -" the Arch User Repository." +"The following information is only required if you want to submit packages to " +"the Arch User Repository." msgstr "以下的資訊僅在您想要遞交套件到 Arch 使用者套件庫時是必須的。" -#: templates/partials/account_form.html -msgid "" -"Specify multiple SSH Keys separated by new line, empty lines are ignored." -msgstr "指定多個 SSH 金鑰,以換行符號分隔,將會忽略空行。" - -#: templates/partials/account_form.html -msgid "Hide deleted comments" -msgstr "隱藏已刪除的評論" - -#: template/account_edit_form.php msgid "SSH Public Key" msgstr "SSH 公開金鑰" -#: template/account_edit_form.php -msgid "Notification settings" -msgstr "通知設定" - -#: template/account_edit_form.php -msgid "Notify of new comments" -msgstr "接收新評論通知" - -#: template/account_edit_form.php -msgid "Notify of package updates" -msgstr "通知套件更新" - -#: template/account_edit_form.php -msgid "Notify of ownership changes" -msgstr "擁有者變更通知" - -#: template/account_edit_form.php -msgid "To confirm the profile changes, please enter your current password:" -msgstr "要確認個人檔案變更,請輸入您目前的密碼:" - -#: template/account_edit_form.php -msgid "Your current password" -msgstr "您目前的密碼" - -#: template/account_edit_form.php -msgid "" -"To protect the AUR against automated account creation, we kindly ask you to " -"provide the output of the following command:" -msgstr "為了保護 AUR 不受自動建立帳號的侵擾,我們請您提供以下指令的輸出:" - -#: template/account_edit_form.php -msgid "Answer" -msgstr "回答" - -#: template/account_edit_form.php template/pkgbase_details.php -#: template/pkg_details.php msgid "Update" msgstr "更新" -#: template/account_edit_form.php msgid "Create" msgstr "建立" -#: template/account_edit_form.php template/search_accounts_form.php msgid "Reset" msgstr "重置" -#: template/account_search_results.php msgid "No results matched your search criteria." msgstr "沒有符合您搜尋條件的搜尋結果。" -#: template/account_search_results.php msgid "Edit Account" msgstr "編輯帳號" -#: template/account_search_results.php msgid "Suspended" msgstr "暫停" -#: template/account_search_results.php msgid "Edit" msgstr "編輯" -#: template/account_search_results.php msgid "Less" msgstr "更少" -#: template/account_search_results.php msgid "More" msgstr "更多" -#: template/account_search_results.php msgid "No more results to display." msgstr "無更多結果可顯示。" -#: template/comaintainers_form.php +#, php-format +msgid "Manage Co-maintainers: %s" +msgstr "管理共同維護者:%s" + #, php-format msgid "" "Use this form to add co-maintainers for %s%s%s (one user name per line):" msgstr "使用此表單來加入 %s%s%s 的共同維護者(每個使用者名稱一行):" -#: template/comaintainers_form.php msgid "Users" msgstr "使用者" -#: template/comaintainers_form.php template/pkg_comment_form.php msgid "Save" msgstr "儲存" -#: template/flag_comment.php -#, php-format -msgid "Flagged Out-of-Date Comment: %s" -msgstr "標記過期評論:%s" +msgid "My Packages" +msgstr "我的套件" -#: template/flag_comment.php -#, php-format -msgid "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the following reason:" -msgstr "%s%s%s 標記了 %s%s%s 過期在 %s%s%s 上並提供了下列理由:" - -#: template/flag_comment.php -#, php-format -msgid "%s%s%s is not flagged out-of-date." -msgstr "%s%s%s 並未被標記為過期。" - -#: template/flag_comment.php -msgid "Return to Details" -msgstr "回到詳情" - -#: template/footer.php -#, php-format -msgid "Copyright %s 2004-%d aurweb Development Team." -msgstr "Copyright %s 2004-%d aurweb 開發團隊。" - -#: template/header.php msgid " My Account" msgstr "我的帳號" -#: template/pkgbase_actions.php +msgid "Register" +msgstr "註冊" + +msgid "unknown" +msgstr "未知" + +msgid "Package Base Details" +msgstr "套件基礎詳細資訊" + msgid "Package Actions" msgstr "套件動作" -#: template/pkgbase_actions.php msgid "View PKGBUILD" msgstr "檢視 PKGBUILD" -#: template/pkgbase_actions.php msgid "View Changes" msgstr "檢視變更" -#: template/pkgbase_actions.php msgid "Download snapshot" msgstr "下載快照" -#: template/pkgbase_actions.php msgid "Search wiki" msgstr "搜尋 wiki" -#: template/pkgbase_actions.php -#, php-format -msgid "Flagged out-of-date (%s)" -msgstr "標記為過期 (%s)" +msgid "Flagged out-of-date" +msgstr "已標記為過期" -#: template/pkgbase_actions.php msgid "Flag package out-of-date" msgstr "將套件標記為過期" -#: template/pkgbase_actions.php msgid "Unflag package" msgstr "取消標記套件" -#: template/pkgbase_actions.php msgid "Remove vote" msgstr "移除投票" -#: template/pkgbase_actions.php msgid "Vote for this package" msgstr "為此套件投票" -#: template/pkgbase_actions.php scripts/notify.py msgid "Disable notifications" msgstr "停用通知" -#: template/pkgbase_actions.php template/pkg_comment_form.php -msgid "Enable notifications" -msgstr "啟用通知" +msgid "Notify of new comments" +msgstr "新評論通知" -#: template/pkgbase_actions.php msgid "Manage Co-Maintainers" msgstr "管理共同維護者" -#: template/pkgbase_actions.php #, php-format msgid "%d pending request" msgid_plural "%d pending requests" msgstr[0] "%d 個擱置的請求" -#: template/pkgbase_actions.php +msgid "Delete Package" +msgstr "刪除套件" + +msgid "Merge Package" +msgstr "合併套件" + msgid "Adopt Package" msgstr "接管套件" -#: template/pkgbase_details.php -msgid "Package Base Details" -msgstr "套件基礎詳細資訊" - -#: template/pkgbase_details.php template/pkg_details.php msgid "Git Clone URL" msgstr "Git Clone URL" -#: template/pkgbase_details.php template/pkg_details.php -msgid "read-only" -msgstr "唯讀" +msgid "Category" +msgstr "分類" -#: template/pkgbase_details.php template/pkg_details.php -msgid "click to copy" -msgstr "點擊以複製" +msgid "Change category" +msgstr "變更分類" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php -msgid "Keywords" -msgstr "關鍵字" - -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php msgid "Submitter" msgstr "提交人" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php +#, php-format +msgid "View account information for %s" +msgstr "檢視 %s 的帳號資訊" + msgid "Maintainer" msgstr "維護者" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Packager" msgstr "最近一次打包者" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Votes" msgstr "得票" -#: template/pkgbase_details.php template/pkg_details.php -#: template/pkg_search_form.php template/pkg_search_results.php -msgid "Popularity" -msgstr "人氣" - -#: template/pkgbase_details.php template/pkg_details.php msgid "First Submitted" msgstr "首次提交" -#: template/pkgbase_details.php template/pkg_details.php msgid "Last Updated" msgstr "最後更新" -#: template/pkg_comment_box.php -#, php-format -msgid "Edit comment for: %s" -msgstr "編輯評論:%s" - -#: template/pkg_comment_box.php template/pkg_comment_form.php msgid "Add Comment" msgstr "新增評論" -#: template/pkg_comment_form.php -msgid "" -"Git commit identifiers referencing commits in the AUR package repository and" -" URLs are converted to links automatically." -msgstr "引用 AUR 軟體庫的 Git 遞交識別符,URL 會自動轉換為連結。" +msgid "Comment has been added." +msgstr "評論已新增。" -#: template/pkg_comment_form.php -#, php-format -msgid "%sMarkdown syntax%s is partially supported." -msgstr "部份支援 %sMarkdown 語法%s" +msgid "View all comments" +msgstr "檢視所有評論" -#: template/pkg_comments.php -msgid "Pinned Comments" -msgstr "已釘選評論" - -#: template/pkg_comments.php msgid "Latest Comments" msgstr "最新的評論" -#: template/pkg_comments.php -msgid "Comments for" -msgstr "評論" - -#: template/pkg_comments.php -#, php-format -msgid "%s commented on %s" -msgstr "%s 在 %s 上評論" - -#: template/pkg_comments.php -#, php-format -msgid "Anonymous comment on %s" -msgstr "在 %s 上的匿名評論" - -#: template/pkg_comments.php -#, php-format -msgid "Commented on package %s on %s" -msgstr "在軟體包 %s 的 %s 評論" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s by %s" -msgstr "在 %s 由 %s 刪除" - -#: template/pkg_comments.php -#, php-format -msgid "deleted on %s" -msgstr "已在 %s 上刪除" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s by %s" -msgstr "在 %s 上由 %s 編輯" - -#: template/pkg_comments.php -#, php-format -msgid "edited on %s" -msgstr "在 %s 上編輯" - -#: template/pkg_comments.php -msgid "Undelete comment" -msgstr "反刪除評論" - -#: template/pkg_comments.php msgid "Delete comment" msgstr "刪除評論" -#: template/pkg_comments.php -msgid "Pin comment" -msgstr "釘選評論" +#, php-format +msgid "Comment by %s" +msgstr "%s 的評論" -#: template/pkg_comments.php -msgid "Unpin comment" -msgstr "解除釘選評論" +msgid "Anonymous comment" +msgstr "匿名評論" + +msgid "deleted" +msgstr "已刪除" + +msgid "All comments" +msgstr "所有評論" -#: template/pkg_details.php msgid "Package Details" msgstr "套件詳細資訊" -#: template/pkg_details.php template/pkg_search_form.php msgid "Package Base" msgstr "套件基礎" -#: template/pkg_details.php template/pkg_search_results.php msgid "Description" msgstr "描述" -#: template/pkg_details.php msgid "Upstream URL" msgstr "上游 URL" -#: template/pkg_details.php msgid "Visit the website for" msgstr "參觀網頁" -#: template/pkg_details.php msgid "Licenses" msgstr "授權條款" -#: template/pkg_details.php msgid "Groups" msgstr "軟體群組" -#: template/pkg_details.php msgid "Conflicts" msgstr "衝突" -#: template/pkg_details.php msgid "Provides" msgstr "它提供" -#: template/pkg_details.php msgid "Replaces" msgstr "它會取代" -#: template/pkg_details.php msgid "Dependencies" msgstr "它依賴" -#: template/pkg_details.php msgid "Required by" msgstr "需要它" -#: template/pkg_details.php msgid "Sources" msgstr "來源" -#: template/pkgreq_close_form.php +#, php-format +msgid "Close Request: %s" +msgstr "關閉請求: %s" + #, php-format msgid "Use this form to close the request for package base %s%s%s." msgstr "使用這個表單以關閉請求套件基礎 %s%s%s 。" -#: template/pkgreq_close_form.php +msgid "Note" +msgstr "注意" + msgid "" "The comments field can be left empty. However, it is highly recommended to " "add a comment when rejecting a request." msgstr "評論區域可以留空。但強烈建議在拒絕一個請求時加入一些評論。" -#: template/pkgreq_close_form.php msgid "Reason" msgstr "理由" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Accepted" msgstr "已接受" -#: template/pkgreq_close_form.php template/pkgreq_results.php -#: template/tu_details.php msgid "Rejected" msgstr "已拒絕" -#: template/pkgreq_form.php +msgid "Comments" +msgstr "評論" + +#, php-format +msgid "File Request: %s" +msgstr "檔案請求: %s" + #, php-format msgid "" "Use this form to file a request against package base %s%s%s which includes " "the following packages:" -msgstr "使用這個表單以提交針對套件基礎 %s%s%s 的請求。它包含以下套件:" +msgstr "使用這個表單以提交一個針對包含以下套件的套件基礎 %s%s%s :" -#: template/pkgreq_form.php msgid "Request type" msgstr "請求類型" -#: template/pkgreq_form.php msgid "Deletion" msgstr "刪除" -#: template/pkgreq_form.php msgid "Orphan" msgstr "棄置" -#: template/pkgreq_form.php template/pkg_search_results.php msgid "Merge into" msgstr "合併到" -#: template/pkgreq_form.php -msgid "" -"By submitting a deletion request, you ask a Package Maintainer to delete the" -" package base. This type of request should be used for duplicates, software " -"abandoned by upstream, as well as illegal and irreparably broken packages." -msgstr "透過遞交刪除請求,您會請求軟體包維護者刪除套件基礎。這個類型的請求應該用於重複、被上游放棄的軟體,以及違法與無法修復的損壞軟體包。" - -#: template/pkgreq_form.php -msgid "" -"By submitting a merge request, you ask a Package Maintainer to delete the " -"package base and transfer its votes and comments to another package base. " -"Merging a package does not affect the corresponding Git repositories. Make " -"sure you update the Git history of the target package yourself." -msgstr "透過遞交合併請求,您會請求軟體包維護者刪除軟體包基礎並轉移其投票數到其他的軟體包基礎。合併一個軟體包不會影響相對應的 Git 倉庫。確保您可以自己更新目標軟體包的 Git 歷史。" - -#: template/pkgreq_form.php -msgid "" -"By submitting an orphan request, you ask a Package Maintainer to disown the " -"package base. Please only do this if the package needs maintainer action, " -"the maintainer is MIA and you already tried to contact the maintainer " -"previously." -msgstr "透過遞交棄置請求,您會請求軟體包維護者棄置軟體包基礎。請僅在該軟體包需要有維護者動作、維護者突然消失且您先前已經連絡過維護者時做此動作。" - -#: template/pkgreq_results.php -msgid "No requests matched your search criteria." -msgstr "沒有符合您搜尋條件的搜尋結果。" - -#: template/pkgreq_results.php #, php-format msgid "%d package request found." msgid_plural "%d package requests found." msgstr[0] "找到了 %d 個套件請求。" -#: template/pkgreq_results.php template/pkg_search_results.php #, php-format msgid "Page %d of %d." msgstr "第 %d 頁,共 %d 頁。" -#: template/pkgreq_results.php msgid "Package" msgstr "套件" -#: template/pkgreq_results.php msgid "Filed by" msgstr "提交人為" -#: template/pkgreq_results.php msgid "Date" msgstr "日期" -#: template/pkgreq_results.php #, php-format -msgid "~%d day left" -msgid_plural "~%d days left" -msgstr[0] "剩餘 ~%d 天" +msgid "~%d days left" +msgstr "剩餘 ~%d 天" -#: template/pkgreq_results.php #, php-format msgid "~%d hour left" msgid_plural "~%d hours left" msgstr[0] "剩餘 ~%d 小時" -#: template/pkgreq_results.php msgid "<1 hour left" msgstr "剩餘 <1 小時" -#: template/pkgreq_results.php msgid "Accept" msgstr "接受" -#: template/pkgreq_results.php msgid "Locked" msgstr "已鎖定" -#: template/pkgreq_results.php msgid "Close" msgstr "關閉" -#: template/pkgreq_results.php -msgid "Pending" -msgstr "擱置中" - -#: template/pkgreq_results.php msgid "Closed" msgstr "已關閉" -#: template/pkg_search_form.php msgid "Name, Description" msgstr "名稱,描述" -#: template/pkg_search_form.php msgid "Name Only" msgstr "只有名稱" -#: template/pkg_search_form.php msgid "Exact Name" msgstr "確切的名稱" -#: template/pkg_search_form.php msgid "Exact Package Base" msgstr "確切的套件基礎" -#: template/pkg_search_form.php -msgid "Co-maintainer" -msgstr "共同維護者" - -#: template/pkg_search_form.php -msgid "Maintainer, Co-maintainer" -msgstr "維護者、共同維護者" - -#: template/pkg_search_form.php msgid "All" msgstr "全部" -#: template/pkg_search_form.php msgid "Flagged" msgstr "已標記" -#: template/pkg_search_form.php msgid "Not Flagged" msgstr "未標記" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Name" msgstr "名稱" -#: template/pkg_search_form.php template/pkg_search_results.php -#: template/tu_details.php template/tu_list.php +msgid "Popularity" +msgstr "" + msgid "Voted" msgstr "已投票" -#: template/pkg_search_form.php -msgid "Last modified" -msgstr "最後修改" +msgid "Age" +msgstr "時間" -#: template/pkg_search_form.php msgid "Ascending" msgstr "遞增" -#: template/pkg_search_form.php msgid "Descending" msgstr "遞減" -#: template/pkg_search_form.php msgid "Enter search criteria" msgstr "輸入搜尋條件" -#: template/pkg_search_form.php +msgid "Any" +msgstr "任意" + msgid "Search by" msgstr "以何種方式搜尋" -#: template/pkg_search_form.php template/stats/user_table.php +msgid "Keywords" +msgstr "關鍵字" + msgid "Out of Date" msgstr "過期狀態" -#: template/pkg_search_form.php template/search_accounts_form.php msgid "Sort by" msgstr "排列依據" -#: template/pkg_search_form.php msgid "Sort order" msgstr "排列方式" -#: template/pkg_search_form.php msgid "Per page" msgstr "每頁顯示" -#: template/pkg_search_form.php template/pkg_search_results.php msgid "Go" -msgstr "搜尋" +msgstr "到" -#: template/pkg_search_form.php msgid "Orphans" msgstr "被棄置的套件" -#: template/pkg_search_results.php msgid "Error retrieving package list." msgstr "擷取套件列表時發生錯誤。" -#: template/pkg_search_results.php msgid "No packages matched your search criteria." msgstr "沒有套件符合您的搜尋條件。" -#: template/pkg_search_results.php #, php-format msgid "%d package found." msgid_plural "%d packages found." msgstr[0] "找到 %d 個套件。" -#: template/pkg_search_results.php msgid "Version" msgstr "版本" -#: template/pkg_search_results.php -#, php-format -msgid "" -"Popularity is calculated as the sum of all votes with each vote being " -"weighted with a factor of %.2f per day since its creation." -msgstr "人氣的計算方式為,將所有票數加總,且每一票自建立以來每天乘上 %.2f。" - -#: template/pkg_search_results.php template/tu_details.php -#: template/tu_list.php msgid "Yes" msgstr "是" -#: template/pkg_search_results.php msgid "orphan" msgstr "被棄置的套件" -#: template/pkg_search_results.php msgid "Actions" msgstr "動作" -#: template/pkg_search_results.php +msgid "Flag Out-of-date" +msgstr "標記為過期" + msgid "Unflag Out-of-date" msgstr "取消過期標誌" -#: template/pkg_search_results.php msgid "Adopt Packages" msgstr "接管套件" -#: template/pkg_search_results.php msgid "Disown Packages" msgstr "棄置套件" -#: template/pkg_search_results.php msgid "Delete Packages" msgstr "刪除套件" -#: template/pkg_search_results.php msgid "Confirm" msgstr "確認" -#: template/search_accounts_form.php msgid "Any type" msgstr "任何類型" -#: template/search_accounts_form.php msgid "Search" msgstr "搜尋" -#: template/stats/general_stats_table.php msgid "Statistics" msgstr "統計" -#: template/stats/general_stats_table.php msgid "Orphan Packages" msgstr "棄置套件" -#: template/stats/general_stats_table.php msgid "Packages added in the past 7 days" msgstr "過去 7 天內加入的套件" -#: template/stats/general_stats_table.php msgid "Packages updated in the past 7 days" msgstr "過去 7 天內更新的套件" -#: template/stats/general_stats_table.php msgid "Packages updated in the past year" msgstr "過去一年內更新的套件" -#: template/stats/general_stats_table.php msgid "Packages never updated" msgstr "從未更新過的套件" -#: template/stats/general_stats_table.php msgid "Registered Users" msgstr "已註冊的使用者" -#: template/stats/general_stats_table.php -msgid "Package Maintainers" -msgstr "軟體包維護者" +msgid "Trusted Users" +msgstr "受信使用者" -#: template/stats/updates_table.php msgid "Recent Updates" msgstr "最近更新" -#: template/stats/updates_table.php -msgid "more" -msgstr "更多" - -#: template/stats/user_table.php msgid "My Statistics" msgstr "我的統計" -#: template/tu_details.php +msgid "Packages in unsupported" +msgstr "不支援的套件" + msgid "Proposal Details" msgstr "建議詳情" -#: template/tu_details.php msgid "This vote is still running." msgstr "此投票仍在繼續。" -#: template/tu_details.php #, php-format msgid "Submitted: %s by %s" msgstr "已提交 %s 由 %s" -#: template/tu_details.php template/tu_list.php msgid "End" msgstr "結束" -#: template/tu_details.php msgid "Result" msgstr "結果" -#: template/tu_details.php template/tu_list.php msgid "No" msgstr "否" -#: template/tu_details.php msgid "Abstain" msgstr "棄權" -#: template/tu_details.php msgid "Total" msgstr "總數" -#: template/tu_details.php msgid "Participation" msgstr "參與" -#: template/tu_last_votes_list.php msgid "Last Votes by TU" msgstr "受信使用者的最後投票" -#: template/tu_last_votes_list.php msgid "Last vote" msgstr "最後投票" -#: template/tu_last_votes_list.php template/tu_list.php msgid "No results found." msgstr "沒有找到結果。" -#: template/tu_list.php msgid "Start" msgstr "開始" -#: template/tu_list.php msgid "Back" msgstr "返回" - -#: scripts/notify.py -msgid "AUR Password Reset" -msgstr "AUR 密碼重設" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"A password reset request was submitted for the account {user} associated " -"with your email address. If you wish to reset your password follow the link " -"[1] below, otherwise ignore this message and nothing will happen." -msgstr "有一個關於您帳號 {user} 對應到電子信箱的密碼重設請求。若您想要重設您的密碼,請前往以下的網址 [1],否則忽略這訊息就沒事了。" - -#: scripts/notify.py -msgid "Welcome to the Arch User Repository" -msgstr "歡迎來到 Arch 使用者軟體庫" - -#: scripts/notify.py -msgid "" -"Welcome to the Arch User Repository! In order to set an initial password for" -" your new account, please click the link [1] below. If the link does not " -"work, try copying and pasting it into your browser." -msgstr "歡迎來到 Arch 使用者軟體庫!為了要設定您新帳號的初始密碼,請點擊以下的連結 [1]。若連結沒辦法點擊,請嘗試複製並貼上連結到您的瀏覽器中。 " - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Comment for {pkgbase}" -msgstr "{pkgbase} 的 AUR 評論" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] added the following comment to {pkgbase} [2]:" -msgstr "{user} [1] 加入以下留言到 {pkgbase} [2]:" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"If you no longer wish to receive notifications about this package, please go" -" to the package page [2] and select \"{label}\"." -msgstr "若您不再想收到此軟體包的通知,請前往軟體包頁面 [2] 並選擇「{label}」。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package Update: {pkgbase}" -msgstr "AUR 軟體包更新:{pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "{user} [1] pushed a new commit to {pkgbase} [2]." -msgstr "{user} [1] 推送了新的提交到 {pkgbase} [2]。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Out-of-date Notification for {pkgbase}" -msgstr "{pkgbase} 的 AUR 過期通知" - -#: scripts/notify.py -#, python-brace-format -msgid "Your package {pkgbase} [1] has been flagged out-of-date by {user} [2]:" -msgstr "您的軟體包 {pkgbase} [1] 已經被 {user} [2] 使用者標記為過期:" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Ownership Notification for {pkgbase}" -msgstr "{pkgbase} 的 AUR 所有權通知" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was adopted by {user} [2]." -msgstr "軟體包 {pkgbase} [1] 已經被 {user} [2] 使用者採用。" - -#: scripts/notify.py -#, python-brace-format -msgid "The package {pkgbase} [1] was disowned by {user} [2]." -msgstr "軟體包 {pkgbase} [1] 已經被 {user} [2] 使用者拋棄。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Co-Maintainer Notification for {pkgbase}" -msgstr "{pkgbase} 的 AUR 共同維護者通知" - -#: scripts/notify.py -#, python-brace-format -msgid "You were added to the co-maintainer list of {pkgbase} [1]." -msgstr "您已經加入到 {pkgbase} [1] 的共同維護者列表中。" - -#: scripts/notify.py -#, python-brace-format -msgid "You were removed from the co-maintainer list of {pkgbase} [1]." -msgstr "您已經從 {pkgbase} [1] 的共同維護者列表中移除了。" - -#: scripts/notify.py -#, python-brace-format -msgid "AUR Package deleted: {pkgbase}" -msgstr "已刪除 AUR 軟體包:{pkgbase}" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] merged {old} [2] into {new} [3].\n" -"\n" -"-- \n" -"If you no longer wish receive notifications about the new package, please go to [3] and click \"{label}\"." -msgstr "{user} [1] 已合併 {old} [2] 到 {new} [3].\n\n-- \n如果您不想要再收到關於新軟體包的通知,請到 [3] 然後點擊「{label}」。" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"{user} [1] deleted {pkgbase} [2].\n" -"\n" -"You will no longer receive notifications about this package." -msgstr "{user} [1] 已經刪除 {pkgbase} [2]。\n\n您將再也不會收到此軟體包的通知。" - -#: scripts/notify.py -#, python-brace-format -msgid "Package Maintainer Vote Reminder: Proposal {id}" -msgstr "軟體包維護者投票提醒:編號為 {id} 的建議" - -#: scripts/notify.py -#, python-brace-format -msgid "" -"Please remember to cast your vote on proposal {id} [1]. The voting period " -"ends in less than 48 hours." -msgstr "請記得在第 {id} [1] 號建議投下你的投票,投票期限即將在 48 個小時內結束。" - -#: aurweb/routers/accounts.py -msgid "Invalid account type provided." -msgstr "提供了無效的帳號類型。" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change account types." -msgstr "您無權變更帳號類型。" - -#: aurweb/routers/accounts.py -msgid "You do not have permission to change this user's account type to %s." -msgstr "您無權變更此使用者的帳號類型至 %s。" - -#: aurweb/packages/requests.py -msgid "No due existing orphan requests to accept for %s." -msgstr "沒有要接受的 %s 到期既有孤立請求。" - -#: aurweb/asgi.py -msgid "Internal Server Error" -msgstr "內部伺服器錯誤" - -#: templates/errors/500.html -msgid "A fatal error has occurred." -msgstr "發生了嚴重錯誤。" - -#: templates/errors/500.html -msgid "" -"Details have been logged and will be reviewed by the postmaster posthaste. " -"We apologize for any inconvenience this may have caused." -msgstr "已記錄詳細資訊,並將會由 postmaster posthaste 審閱。我們對造成如此不便深感抱歉。" - -#: aurweb/scripts/notify.py -msgid "AUR Server Error" -msgstr "AUR 伺服器錯誤" - -#: templates/pkgbase/merge.html templates/packages/delete.html -#: templates/packages/disown.html -msgid "Related package request closure comments..." -msgstr "相關軟體包請求關閉留言……" - -#: templates/pkgbase/merge.html templates/packages/delete.html -msgid "" -"This action will close any pending package requests related to it. If " -"%sComments%s are omitted, a closure comment will be autogenerated." -msgstr "此動作將會關閉任何關於此的擱置中軟體包請求。若省略%s留言%s,將會自動產生關閉留言。" - -#: templates/partials/tu/proposal/details.html -msgid "assigned" -msgstr "分配" - -#: templaets/partials/packages/package_metadata.html -msgid "Show %d more" -msgstr "再顯示 %d 個" - -#: templates/partials/packages/package_metadata.html -msgid "dependencies" -msgstr "依賴關係" - -#: aurweb/routers/accounts.py -msgid "The account has not been deleted, check the confirmation checkbox." -msgstr "帳號未被刪除,請檢查確認的核取方塊。" - -#: templates/partials/packages/comment_form.html -msgid "Cancel" -msgstr "取消" - -#: templates/requests.html -msgid "Package name" -msgstr "軟體包名稱" - -#: templates/partials/account_form.html -msgid "" -"Note that if you hide your email address, it'll end up on the BCC list for " -"any request notifications. In case someone replies to these notifications, " -"you won't receive an email. However, replies are typically sent to the " -"mailing-list and would then be visible in the archive." -msgstr "請注意,如果您隱藏您的電子郵件地址,它最終會出現在任何要求通知的密件副本清單中。如果有人回覆這些通知,您將不會收到電子郵件。但是,回覆通常會傳送到郵遞論壇,然後在存檔中可見。" diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 72638b4e..00000000 --- a/poetry.lock +++ /dev/null @@ -1,2469 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. - -[[package]] -name = "aiofiles" -version = "24.1.0" -description = "File support for asyncio." -optional = false -python-versions = ">=3.8" -files = [ - {file = "aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5"}, - {file = "aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c"}, -] - -[[package]] -name = "alembic" -version = "1.13.2" -description = "A database migration tool for SQLAlchemy." -optional = false -python-versions = ">=3.8" -files = [ - {file = "alembic-1.13.2-py3-none-any.whl", hash = "sha256:6b8733129a6224a9a711e17c99b08462dbf7cc9670ba8f2e2ae9af860ceb1953"}, - {file = "alembic-1.13.2.tar.gz", hash = "sha256:1ff0ae32975f4fd96028c39ed9bb3c867fe3af956bd7bb37343b54c9fe7445ef"}, -] - -[package.dependencies] -Mako = "*" -SQLAlchemy = ">=1.3.0" -typing-extensions = ">=4" - -[package.extras] -tz = ["backports.zoneinfo"] - -[[package]] -name = "annotated-types" -version = "0.7.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.8" -files = [ - {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, - {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, -] - -[[package]] -name = "anyio" -version = "4.4.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.8" -files = [ - {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, - {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, -] - -[package.dependencies] -exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} - -[package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] - -[[package]] -name = "asgiref" -version = "3.8.1" -description = "ASGI specs, helper code, and adapters" -optional = false -python-versions = ">=3.8" -files = [ - {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, - {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} - -[package.extras] -tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] - -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, -] - -[[package]] -name = "authlib" -version = "1.3.1" -description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." -optional = false -python-versions = ">=3.8" -files = [ - {file = "Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377"}, - {file = "authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917"}, -] - -[package.dependencies] -cryptography = "*" - -[[package]] -name = "bcrypt" -version = "4.2.0" -description = "Modern password hashing for your software and your servers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "bcrypt-4.2.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:096a15d26ed6ce37a14c1ac1e48119660f21b24cba457f160a4b830f3fe6b5cb"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c02d944ca89d9b1922ceb8a46460dd17df1ba37ab66feac4870f6862a1533c00"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d84cf6d877918620b687b8fd1bf7781d11e8a0998f576c7aa939776b512b98d"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1bb429fedbe0249465cdd85a58e8376f31bb315e484f16e68ca4c786dcc04291"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:655ea221910bcac76ea08aaa76df427ef8625f92e55a8ee44fbf7753dbabb328"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:1ee38e858bf5d0287c39b7a1fc59eec64bbf880c7d504d3a06a96c16e14058e7"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0da52759f7f30e83f1e30a888d9163a81353ef224d82dc58eb5bb52efcabc399"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3698393a1b1f1fd5714524193849d0c6d524d33523acca37cd28f02899285060"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:762a2c5fb35f89606a9fde5e51392dad0cd1ab7ae64149a8b935fe8d79dd5ed7"}, - {file = "bcrypt-4.2.0-cp37-abi3-win32.whl", hash = "sha256:5a1e8aa9b28ae28020a3ac4b053117fb51c57a010b9f969603ed885f23841458"}, - {file = "bcrypt-4.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:8f6ede91359e5df88d1f5c1ef47428a4420136f3ce97763e31b86dd8280fbdf5"}, - {file = "bcrypt-4.2.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:c52aac18ea1f4a4f65963ea4f9530c306b56ccd0c6f8c8da0c06976e34a6e841"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3bbbfb2734f0e4f37c5136130405332640a1e46e6b23e000eeff2ba8d005da68"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3413bd60460f76097ee2e0a493ccebe4a7601918219c02f503984f0a7ee0aebe"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8d7bb9c42801035e61c109c345a28ed7e84426ae4865511eb82e913df18f58c2"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3d3a6d28cb2305b43feac298774b997e372e56c7c7afd90a12b3dc49b189151c"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9c1c4ad86351339c5f320ca372dfba6cb6beb25e8efc659bedd918d921956bae"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:27fe0f57bb5573104b5a6de5e4153c60814c711b29364c10a75a54bb6d7ff48d"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8ac68872c82f1add6a20bd489870c71b00ebacd2e9134a8aa3f98a0052ab4b0e"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cb2a8ec2bc07d3553ccebf0746bbf3d19426d1c6d1adbd4fa48925f66af7b9e8"}, - {file = "bcrypt-4.2.0-cp39-abi3-win32.whl", hash = "sha256:77800b7147c9dc905db1cba26abe31e504d8247ac73580b4aa179f98e6608f34"}, - {file = "bcrypt-4.2.0-cp39-abi3-win_amd64.whl", hash = "sha256:61ed14326ee023917ecd093ee6ef422a72f3aec6f07e21ea5f10622b735538a9"}, - {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:39e1d30c7233cfc54f5c3f2c825156fe044efdd3e0b9d309512cc514a263ec2a"}, - {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f4f4acf526fcd1c34e7ce851147deedd4e26e6402369304220250598b26448db"}, - {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:1ff39b78a52cf03fdf902635e4c81e544714861ba3f0efc56558979dd4f09170"}, - {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:373db9abe198e8e2c70d12b479464e0d5092cc122b20ec504097b5f2297ed184"}, - {file = "bcrypt-4.2.0.tar.gz", hash = "sha256:cf69eaf5185fd58f268f805b505ce31f9b9fc2d64b376642164e9244540c1221"}, -] - -[package.extras] -tests = ["pytest (>=3.2.1,!=3.3.0)"] -typecheck = ["mypy"] - -[[package]] -name = "bleach" -version = "6.1.0" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.8" -files = [ - {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, - {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, -] - -[package.dependencies] -six = ">=1.9.0" -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.3)"] - -[[package]] -name = "certifi" -version = "2024.7.4" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, -] - -[[package]] -name = "cffi" -version = "1.17.0" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, - {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, - {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, - {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, - {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, - {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, - {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, - {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, - {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, - {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, - {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, - {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, - {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, - {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, - {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, - {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, - {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, - {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, - {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, - {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, - {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, - {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, - {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, - {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, - {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, - {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, - {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, - {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coverage" -version = "7.6.1" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, - {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, - {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, - {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, - {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, - {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, - {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, - {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, - {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, - {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, - {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, - {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, - {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, - {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, - {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, - {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, - {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, - {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "cryptography" -version = "43.0.0" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = false -python-versions = ">=3.7" -files = [ - {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, - {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, - {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, - {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, - {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, - {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, - {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, - {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, - {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, - {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:232ce02943a579095a339ac4b390fbbe97f5b5d5d107f8a08260ea2768be8cc2"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5bcb8a5620008a8034d39bce21dc3e23735dfdb6a33a06974739bfa04f853947"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:08a24a7070b2b6804c1940ff0f910ff728932a9d0e80e7814234269f9d46d069"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9c5266c432a1e23738d178e51c2c7a5e2ddf790f248be939448c0ba2021f9d1"}, - {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, -] - -[package.dependencies] -cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] -nox = ["nox"] -pep8test = ["check-sdist", "click", "mypy", "ruff"] -sdist = ["build"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "cryptography-vectors (==43.0.0)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] -test-randomorder = ["pytest-randomly"] - -[[package]] -name = "deprecated" -version = "1.2.14" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, -] - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] - -[[package]] -name = "dnspython" -version = "2.6.1" -description = "DNS toolkit" -optional = false -python-versions = ">=3.8" -files = [ - {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, - {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, -] - -[package.extras] -dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "sphinx (>=7.2.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] -dnssec = ["cryptography (>=41)"] -doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] -doq = ["aioquic (>=0.9.25)"] -idna = ["idna (>=3.6)"] -trio = ["trio (>=0.23)"] -wmi = ["wmi (>=1.5.1)"] - -[[package]] -name = "email-validator" -version = "2.2.0" -description = "A robust email address syntax and deliverability validation library." -optional = false -python-versions = ">=3.8" -files = [ - {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, - {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, -] - -[package.dependencies] -dnspython = ">=2.0.0" -idna = ">=2.0.0" - -[[package]] -name = "exceptiongroup" -version = "1.2.2" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "execnet" -version = "2.1.1" -description = "execnet: rapid multi-Python deployment" -optional = false -python-versions = ">=3.8" -files = [ - {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, - {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, -] - -[package.extras] -testing = ["hatch", "pre-commit", "pytest", "tox"] - -[[package]] -name = "fakeredis" -version = "2.23.5" -description = "Python implementation of redis API, can be used for testing purposes." -optional = false -python-versions = "<4.0,>=3.7" -files = [ - {file = "fakeredis-2.23.5-py3-none-any.whl", hash = "sha256:4d85b1b6b3a80cbbb3a8967f8686f7bf6ddf5bd7cd5ac7ac90b3561d8c3a7ddb"}, - {file = "fakeredis-2.23.5.tar.gz", hash = "sha256:edffc79fdce0f1d83cbb20b52694a9cba4a5fe5beb627c11722a42aa0fa44f52"}, -] - -[package.dependencies] -redis = ">=4" -sortedcontainers = ">=2,<3" -typing_extensions = {version = ">=4.7,<5.0", markers = "python_version < \"3.11\""} - -[package.extras] -bf = ["pyprobables (>=0.6,<0.7)"] -cf = ["pyprobables (>=0.6,<0.7)"] -json = ["jsonpath-ng (>=1.6,<2.0)"] -lua = ["lupa (>=2.1,<3.0)"] -probabilistic = ["pyprobables (>=0.6,<0.7)"] - -[[package]] -name = "fastapi" -version = "0.112.1" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fastapi-0.112.1-py3-none-any.whl", hash = "sha256:bcbd45817fc2a1cd5da09af66815b84ec0d3d634eb173d1ab468ae3103e183e4"}, - {file = "fastapi-0.112.1.tar.gz", hash = "sha256:b2537146f8c23389a7faa8b03d0bd38d4986e6983874557d95eed2acc46448ef"}, -] - -[package.dependencies] -pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.37.2,<0.39.0" -typing-extensions = ">=4.8.0" - -[package.extras] -all = ["email_validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] -standard = ["email_validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] - -[[package]] -name = "feedgen" -version = "1.0.0" -description = "Feed Generator (ATOM, RSS, Podcasts)" -optional = false -python-versions = "*" -files = [ - {file = "feedgen-1.0.0.tar.gz", hash = "sha256:d9bd51c3b5e956a2a52998c3708c4d2c729f2fcc311188e1e5d3b9726393546a"}, -] - -[package.dependencies] -lxml = "*" -python-dateutil = "*" - -[[package]] -name = "filelock" -version = "3.15.4" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.8" -files = [ - {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, - {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] -typing = ["typing-extensions (>=4.8)"] - -[[package]] -name = "googleapis-common-protos" -version = "1.63.2" -description = "Common protobufs used in Google APIs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "googleapis-common-protos-1.63.2.tar.gz", hash = "sha256:27c5abdffc4911f28101e635de1533fb4cfd2c37fbaa9174587c799fac90aa87"}, - {file = "googleapis_common_protos-1.63.2-py2.py3-none-any.whl", hash = "sha256:27a2499c7e8aff199665b22741997e485eccc8645aa9176c7c988e6fae507945"}, -] - -[package.dependencies] -protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0" - -[package.extras] -grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] - -[[package]] -name = "greenlet" -version = "3.1.1" -description = "Lightweight in-process concurrent programming" -optional = false -python-versions = ">=3.7" -files = [ - {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617"}, - {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7"}, - {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6"}, - {file = "greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80"}, - {file = "greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a"}, - {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511"}, - {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395"}, - {file = "greenlet-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39"}, - {file = "greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9"}, - {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0"}, - {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942"}, - {file = "greenlet-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01"}, - {file = "greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e"}, - {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1"}, - {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c"}, - {file = "greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822"}, - {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01"}, - {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de"}, - {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa"}, - {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af"}, - {file = "greenlet-3.1.1-cp37-cp37m-win32.whl", hash = "sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798"}, - {file = "greenlet-3.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef"}, - {file = "greenlet-3.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1"}, - {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd"}, - {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7"}, - {file = "greenlet-3.1.1-cp38-cp38-win32.whl", hash = "sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef"}, - {file = "greenlet-3.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d"}, - {file = "greenlet-3.1.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c"}, - {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e"}, - {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e"}, - {file = "greenlet-3.1.1-cp39-cp39-win32.whl", hash = "sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c"}, - {file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"}, - {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, -] - -[package.extras] -docs = ["Sphinx", "furo"] -test = ["objgraph", "psutil"] - -[[package]] -name = "gunicorn" -version = "22.0.0" -description = "WSGI HTTP Server for UNIX" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gunicorn-22.0.0-py3-none-any.whl", hash = "sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9"}, - {file = "gunicorn-22.0.0.tar.gz", hash = "sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63"}, -] - -[package.dependencies] -packaging = "*" - -[package.extras] -eventlet = ["eventlet (>=0.24.1,!=0.36.0)"] -gevent = ["gevent (>=1.4.0)"] -setproctitle = ["setproctitle"] -testing = ["coverage", "eventlet", "gevent", "pytest", "pytest-cov"] -tornado = ["tornado (>=0.2)"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "h2" -version = "4.1.0" -description = "HTTP/2 State-Machine based protocol implementation" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, - {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, -] - -[package.dependencies] -hpack = ">=4.0,<5" -hyperframe = ">=6.0,<7" - -[[package]] -name = "hpack" -version = "4.0.0" -description = "Pure-Python HPACK header compression" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, - {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, -] - -[[package]] -name = "httpcore" -version = "1.0.5" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, - {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, -] - -[package.dependencies] -certifi = "*" -h11 = ">=0.13,<0.15" - -[package.extras] -asyncio = ["anyio (>=4.0,<5.0)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.26.0)"] - -[[package]] -name = "httpx" -version = "0.27.0" -description = "The next generation HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, - {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, -] - -[package.dependencies] -anyio = "*" -certifi = "*" -httpcore = "==1.*" -idna = "*" -sniffio = "*" - -[package.extras] -brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] - -[[package]] -name = "hypercorn" -version = "0.17.3" -description = "A ASGI Server based on Hyper libraries and inspired by Gunicorn" -optional = false -python-versions = ">=3.8" -files = [ - {file = "hypercorn-0.17.3-py3-none-any.whl", hash = "sha256:059215dec34537f9d40a69258d323f56344805efb462959e727152b0aa504547"}, - {file = "hypercorn-0.17.3.tar.gz", hash = "sha256:1b37802ee3ac52d2d85270700d565787ab16cf19e1462ccfa9f089ca17574165"}, -] - -[package.dependencies] -exceptiongroup = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -h11 = "*" -h2 = ">=3.1.0" -priority = "*" -taskgroup = {version = "*", markers = "python_version < \"3.11\""} -tomli = {version = "*", markers = "python_version < \"3.11\""} -typing_extensions = {version = "*", markers = "python_version < \"3.11\""} -wsproto = ">=0.14.0" - -[package.extras] -docs = ["pydata_sphinx_theme", "sphinxcontrib_mermaid"] -h3 = ["aioquic (>=0.9.0,<1.0)"] -trio = ["trio (>=0.22.0)"] -uvloop = ["uvloop (>=0.18)"] - -[[package]] -name = "hyperframe" -version = "6.0.1" -description = "HTTP/2 framing layer for Python" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, - {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, -] - -[[package]] -name = "idna" -version = "3.7" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, -] - -[[package]] -name = "importlib-metadata" -version = "8.0.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_metadata-8.0.0-py3-none-any.whl", hash = "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f"}, - {file = "importlib_metadata-8.0.0.tar.gz", hash = "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "itsdangerous" -version = "2.2.0" -description = "Safely pass data to untrusted environments and back." -optional = false -python-versions = ">=3.8" -files = [ - {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, - {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, -] - -[[package]] -name = "jinja2" -version = "3.1.4" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "lxml" -version = "5.3.0" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=3.6" -files = [ - {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, - {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"}, - {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"}, - {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"}, - {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"}, - {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"}, - {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"}, - {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"}, - {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"}, - {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"}, - {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"}, - {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"}, - {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"}, - {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"}, - {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"}, - {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"}, - {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"}, - {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"}, - {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"}, - {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"}, - {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"}, - {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"}, - {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"}, - {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"}, - {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"}, - {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"}, - {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"}, - {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"}, - {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"}, - {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"}, - {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"}, - {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"}, - {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"}, - {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"}, - {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html-clean = ["lxml-html-clean"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.11)"] - -[[package]] -name = "mako" -version = "1.3.5" -description = "A super-fast templating language that borrows the best ideas from the existing templating languages." -optional = false -python-versions = ">=3.8" -files = [ - {file = "Mako-1.3.5-py3-none-any.whl", hash = "sha256:260f1dbc3a519453a9c856dedfe4beb4e50bd5a26d96386cb6c80856556bb91a"}, - {file = "Mako-1.3.5.tar.gz", hash = "sha256:48dbc20568c1d276a2698b36d968fa76161bf127194907ea6fc594fa81f943bc"}, -] - -[package.dependencies] -MarkupSafe = ">=0.9.2" - -[package.extras] -babel = ["Babel"] -lingua = ["lingua"] -testing = ["pytest"] - -[[package]] -name = "markdown" -version = "3.7" -description = "Python implementation of John Gruber's Markdown." -optional = false -python-versions = ">=3.8" -files = [ - {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, - {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, -] - -[package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] -testing = ["coverage", "pyyaml"] - -[[package]] -name = "markupsafe" -version = "2.1.5" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, -] - -[[package]] -name = "mysqlclient" -version = "2.2.4" -description = "Python interface to MySQL" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mysqlclient-2.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:ac44777eab0a66c14cb0d38965572f762e193ec2e5c0723bcd11319cc5b693c5"}, - {file = "mysqlclient-2.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:329e4eec086a2336fe3541f1ce095d87a6f169d1cc8ba7b04ac68bcb234c9711"}, - {file = "mysqlclient-2.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:e1ebe3f41d152d7cb7c265349fdb7f1eca86ccb0ca24a90036cde48e00ceb2ab"}, - {file = "mysqlclient-2.2.4-cp38-cp38-win_amd64.whl", hash = "sha256:3c318755e06df599338dad7625f884b8a71fcf322a9939ef78c9b3db93e1de7a"}, - {file = "mysqlclient-2.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:9d4c015480c4a6b2b1602eccd9846103fc70606244788d04aa14b31c4bd1f0e2"}, - {file = "mysqlclient-2.2.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d43987bb9626096a302ca6ddcdd81feaeca65ced1d5fe892a6a66b808326aa54"}, - {file = "mysqlclient-2.2.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4e80dcad884dd6e14949ac6daf769123223a52a6805345608bf49cdaf7bc8b3a"}, - {file = "mysqlclient-2.2.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9d3310295cb682232cadc28abd172f406c718b9ada41d2371259098ae37779d3"}, - {file = "mysqlclient-2.2.4.tar.gz", hash = "sha256:33bc9fb3464e7d7c10b1eaf7336c5ff8f2a3d3b88bab432116ad2490beb3bf41"}, -] - -[[package]] -name = "opentelemetry-api" -version = "1.26.0" -description = "OpenTelemetry Python API" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_api-1.26.0-py3-none-any.whl", hash = "sha256:7d7ea33adf2ceda2dd680b18b1677e4152000b37ca76e679da71ff103b943064"}, - {file = "opentelemetry_api-1.26.0.tar.gz", hash = "sha256:2bd639e4bed5b18486fef0b5a520aaffde5a18fc225e808a1ac4df363f43a1ce"}, -] - -[package.dependencies] -deprecated = ">=1.2.6" -importlib-metadata = ">=6.0,<=8.0.0" - -[[package]] -name = "opentelemetry-exporter-otlp-proto-common" -version = "1.26.0" -description = "OpenTelemetry Protobuf encoding" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_exporter_otlp_proto_common-1.26.0-py3-none-any.whl", hash = "sha256:ee4d8f8891a1b9c372abf8d109409e5b81947cf66423fd998e56880057afbc71"}, - {file = "opentelemetry_exporter_otlp_proto_common-1.26.0.tar.gz", hash = "sha256:bdbe50e2e22a1c71acaa0c8ba6efaadd58882e5a5978737a44a4c4b10d304c92"}, -] - -[package.dependencies] -opentelemetry-proto = "1.26.0" - -[[package]] -name = "opentelemetry-exporter-otlp-proto-http" -version = "1.26.0" -description = "OpenTelemetry Collector Protobuf over HTTP Exporter" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_exporter_otlp_proto_http-1.26.0-py3-none-any.whl", hash = "sha256:ee72a87c48ec977421b02f16c52ea8d884122470e0be573905237b540f4ee562"}, - {file = "opentelemetry_exporter_otlp_proto_http-1.26.0.tar.gz", hash = "sha256:5801ebbcf7b527377883e6cbbdda35ee712dc55114fff1e93dfee210be56c908"}, -] - -[package.dependencies] -deprecated = ">=1.2.6" -googleapis-common-protos = ">=1.52,<2.0" -opentelemetry-api = ">=1.15,<2.0" -opentelemetry-exporter-otlp-proto-common = "1.26.0" -opentelemetry-proto = "1.26.0" -opentelemetry-sdk = ">=1.26.0,<1.27.0" -requests = ">=2.7,<3.0" - -[[package]] -name = "opentelemetry-instrumentation" -version = "0.47b0" -description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_instrumentation-0.47b0-py3-none-any.whl", hash = "sha256:88974ee52b1db08fc298334b51c19d47e53099c33740e48c4f084bd1afd052d5"}, - {file = "opentelemetry_instrumentation-0.47b0.tar.gz", hash = "sha256:96f9885e450c35e3f16a4f33145f2ebf620aea910c9fd74a392bbc0f807a350f"}, -] - -[package.dependencies] -opentelemetry-api = ">=1.4,<2.0" -setuptools = ">=16.0" -wrapt = ">=1.0.0,<2.0.0" - -[[package]] -name = "opentelemetry-instrumentation-asgi" -version = "0.47b0" -description = "ASGI instrumentation for OpenTelemetry" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_instrumentation_asgi-0.47b0-py3-none-any.whl", hash = "sha256:b798dc4957b3edc9dfecb47a4c05809036a4b762234c5071212fda39ead80ade"}, - {file = "opentelemetry_instrumentation_asgi-0.47b0.tar.gz", hash = "sha256:e78b7822c1bca0511e5e9610ec484b8994a81670375e570c76f06f69af7c506a"}, -] - -[package.dependencies] -asgiref = ">=3.0,<4.0" -opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.47b0" -opentelemetry-semantic-conventions = "0.47b0" -opentelemetry-util-http = "0.47b0" - -[package.extras] -instruments = ["asgiref (>=3.0,<4.0)"] - -[[package]] -name = "opentelemetry-instrumentation-fastapi" -version = "0.47b0" -description = "OpenTelemetry FastAPI Instrumentation" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_instrumentation_fastapi-0.47b0-py3-none-any.whl", hash = "sha256:5ac28dd401160b02e4f544a85a9e4f61a8cbe5b077ea0379d411615376a2bd21"}, - {file = "opentelemetry_instrumentation_fastapi-0.47b0.tar.gz", hash = "sha256:0c7c10b5d971e99a420678ffd16c5b1ea4f0db3b31b62faf305fbb03b4ebee36"}, -] - -[package.dependencies] -opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.47b0" -opentelemetry-instrumentation-asgi = "0.47b0" -opentelemetry-semantic-conventions = "0.47b0" -opentelemetry-util-http = "0.47b0" - -[package.extras] -instruments = ["fastapi (>=0.58,<1.0)", "fastapi-slim (>=0.111.0,<0.112.0)"] - -[[package]] -name = "opentelemetry-instrumentation-redis" -version = "0.47b0" -description = "OpenTelemetry Redis instrumentation" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_instrumentation_redis-0.47b0-py3-none-any.whl", hash = "sha256:169de5154cc37ccf402dd43ac06a47f7f883abba7c0a8f99b2731164ec4f1132"}, - {file = "opentelemetry_instrumentation_redis-0.47b0.tar.gz", hash = "sha256:15886c725c7e3b6f706964bd72dbfcbefeeeaa1254e98f662516cfed453aaebe"}, -] - -[package.dependencies] -opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.47b0" -opentelemetry-semantic-conventions = "0.47b0" -wrapt = ">=1.12.1" - -[package.extras] -instruments = ["redis (>=2.6)"] - -[[package]] -name = "opentelemetry-instrumentation-sqlalchemy" -version = "0.47b0" -description = "OpenTelemetry SQLAlchemy instrumentation" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_instrumentation_sqlalchemy-0.47b0-py3-none-any.whl", hash = "sha256:997b2c4a624ebcba45b9bda27882622d0ab3028d66a5fb50cdcf3581af04b3d1"}, - {file = "opentelemetry_instrumentation_sqlalchemy-0.47b0.tar.gz", hash = "sha256:bbeab06fc421ddae16bb69ca287abb81a131d3dff97de60b02c092887794103d"}, -] - -[package.dependencies] -opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.47b0" -opentelemetry-semantic-conventions = "0.47b0" -packaging = ">=21.0" -wrapt = ">=1.11.2" - -[package.extras] -instruments = ["sqlalchemy"] - -[[package]] -name = "opentelemetry-proto" -version = "1.26.0" -description = "OpenTelemetry Python Proto" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_proto-1.26.0-py3-none-any.whl", hash = "sha256:6c4d7b4d4d9c88543bcf8c28ae3f8f0448a753dc291c18c5390444c90b76a725"}, - {file = "opentelemetry_proto-1.26.0.tar.gz", hash = "sha256:c5c18796c0cab3751fc3b98dee53855835e90c0422924b484432ac852d93dc1e"}, -] - -[package.dependencies] -protobuf = ">=3.19,<5.0" - -[[package]] -name = "opentelemetry-sdk" -version = "1.26.0" -description = "OpenTelemetry Python SDK" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_sdk-1.26.0-py3-none-any.whl", hash = "sha256:feb5056a84a88670c041ea0ded9921fca559efec03905dddeb3885525e0af897"}, - {file = "opentelemetry_sdk-1.26.0.tar.gz", hash = "sha256:c90d2868f8805619535c05562d699e2f4fb1f00dbd55a86dcefca4da6fa02f85"}, -] - -[package.dependencies] -opentelemetry-api = "1.26.0" -opentelemetry-semantic-conventions = "0.47b0" -typing-extensions = ">=3.7.4" - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.47b0" -description = "OpenTelemetry Semantic Conventions" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_semantic_conventions-0.47b0-py3-none-any.whl", hash = "sha256:4ff9d595b85a59c1c1413f02bba320ce7ea6bf9e2ead2b0913c4395c7bbc1063"}, - {file = "opentelemetry_semantic_conventions-0.47b0.tar.gz", hash = "sha256:a8d57999bbe3495ffd4d510de26a97dadc1dace53e0275001b2c1b2f67992a7e"}, -] - -[package.dependencies] -deprecated = ">=1.2.6" -opentelemetry-api = "1.26.0" - -[[package]] -name = "opentelemetry-util-http" -version = "0.47b0" -description = "Web util for OpenTelemetry" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_util_http-0.47b0-py3-none-any.whl", hash = "sha256:3d3215e09c4a723b12da6d0233a31395aeb2bb33a64d7b15a1500690ba250f19"}, - {file = "opentelemetry_util_http-0.47b0.tar.gz", hash = "sha256:352a07664c18eef827eb8ddcbd64c64a7284a39dd1655e2f16f577eb046ccb32"}, -] - -[[package]] -name = "orjson" -version = "3.10.7" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -optional = false -python-versions = ">=3.8" -files = [ - {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, - {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, - {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, - {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, - {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, - {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, - {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, - {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, - {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, - {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, - {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, - {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, - {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, - {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, - {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, - {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, - {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, - {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, - {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, - {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, - {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, - {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, - {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, - {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, - {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, - {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, - {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, - {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, - {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, - {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, - {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, - {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, -] - -[[package]] -name = "packaging" -version = "24.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, -] - -[[package]] -name = "paginate" -version = "0.5.6" -description = "Divides large result sets into pages for easier browsing" -optional = false -python-versions = "*" -files = [ - {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"}, -] - -[[package]] -name = "parse" -version = "1.20.2" -description = "parse() is the opposite of format()" -optional = false -python-versions = "*" -files = [ - {file = "parse-1.20.2-py2.py3-none-any.whl", hash = "sha256:967095588cb802add9177d0c0b6133b5ba33b1ea9007ca800e526f42a85af558"}, - {file = "parse-1.20.2.tar.gz", hash = "sha256:b41d604d16503c79d81af5165155c0b20f6c8d6c559efa66b4b695c3e5a0a0ce"}, -] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "posix-ipc" -version = "1.1.1" -description = "POSIX IPC primitives (semaphores, shared memory and message queues) for Python" -optional = false -python-versions = "*" -files = [ - {file = "posix_ipc-1.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0c2019e462c5e556568ec7947a0dd66abcd516a6f4939aed545daedc5c7b0b78"}, - {file = "posix_ipc-1.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:516259a7f1b1ba49a16ebe06ae23e9246162cb26e3eb825e6535c487e67478d2"}, - {file = "posix_ipc-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:edfd47a68b0022c14e511ca4d600ff1f2e44457695002a56accfa3535be046b1"}, - {file = "posix_ipc-1.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:3c21f6f459b399badc12dec9de73274d42aa8708e8a56146d79faca27e362480"}, - {file = "posix_ipc-1.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5b9a38467f11c040a2e15e5cc7236494dc4ba7dfb4151bffef493a1f88fbb2c1"}, - {file = "posix_ipc-1.1.1.tar.gz", hash = "sha256:e2456ba0cfb2ee5ba14121450e8d825b3c4a1461fca0761220aab66d4111cbb7"}, -] - -[[package]] -name = "priority" -version = "2.0.0" -description = "A pure-Python implementation of the HTTP/2 priority tree" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "priority-2.0.0-py3-none-any.whl", hash = "sha256:6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa"}, - {file = "priority-2.0.0.tar.gz", hash = "sha256:c965d54f1b8d0d0b19479db3924c7c36cf672dbf2aec92d43fbdaf4492ba18c0"}, -] - -[[package]] -name = "prometheus-client" -version = "0.20.0" -description = "Python client for the Prometheus monitoring system." -optional = false -python-versions = ">=3.8" -files = [ - {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, - {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, -] - -[package.extras] -twisted = ["twisted"] - -[[package]] -name = "prometheus-fastapi-instrumentator" -version = "7.0.0" -description = "Instrument your FastAPI with Prometheus metrics." -optional = false -python-versions = ">=3.8.1,<4.0.0" -files = [ - {file = "prometheus_fastapi_instrumentator-7.0.0-py3-none-any.whl", hash = "sha256:96030c43c776ee938a3dae58485ec24caed7e05bfc60fe067161e0d5b5757052"}, - {file = "prometheus_fastapi_instrumentator-7.0.0.tar.gz", hash = "sha256:5ba67c9212719f244ad7942d75ded80693b26331ee5dfc1e7571e4794a9ccbed"}, -] - -[package.dependencies] -prometheus-client = ">=0.8.0,<1.0.0" -starlette = ">=0.30.0,<1.0.0" - -[[package]] -name = "protobuf" -version = "4.25.4" -description = "" -optional = false -python-versions = ">=3.8" -files = [ - {file = "protobuf-4.25.4-cp310-abi3-win32.whl", hash = "sha256:db9fd45183e1a67722cafa5c1da3e85c6492a5383f127c86c4c4aa4845867dc4"}, - {file = "protobuf-4.25.4-cp310-abi3-win_amd64.whl", hash = "sha256:ba3d8504116a921af46499471c63a85260c1a5fc23333154a427a310e015d26d"}, - {file = "protobuf-4.25.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:eecd41bfc0e4b1bd3fa7909ed93dd14dd5567b98c941d6c1ad08fdcab3d6884b"}, - {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:4c8a70fdcb995dcf6c8966cfa3a29101916f7225e9afe3ced4395359955d3835"}, - {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:3319e073562e2515c6ddc643eb92ce20809f5d8f10fead3332f71c63be6a7040"}, - {file = "protobuf-4.25.4-cp38-cp38-win32.whl", hash = "sha256:7e372cbbda66a63ebca18f8ffaa6948455dfecc4e9c1029312f6c2edcd86c4e1"}, - {file = "protobuf-4.25.4-cp38-cp38-win_amd64.whl", hash = "sha256:051e97ce9fa6067a4546e75cb14f90cf0232dcb3e3d508c448b8d0e4265b61c1"}, - {file = "protobuf-4.25.4-cp39-cp39-win32.whl", hash = "sha256:90bf6fd378494eb698805bbbe7afe6c5d12c8e17fca817a646cd6a1818c696ca"}, - {file = "protobuf-4.25.4-cp39-cp39-win_amd64.whl", hash = "sha256:ac79a48d6b99dfed2729ccccee547b34a1d3d63289c71cef056653a846a2240f"}, - {file = "protobuf-4.25.4-py3-none-any.whl", hash = "sha256:bfbebc1c8e4793cfd58589acfb8a1026be0003e852b9da7db5a4285bde996978"}, - {file = "protobuf-4.25.4.tar.gz", hash = "sha256:0dc4a62cc4052a036ee2204d26fe4d835c62827c855c8a03f29fe6da146b380d"}, -] - -[[package]] -name = "pyalpm" -version = "0.10.6" -description = "libalpm bindings for Python 3" -optional = false -python-versions = "*" -files = [ - {file = "pyalpm-0.10.6.tar.gz", hash = "sha256:99e6ec73b8c46bb12466013f228f831ee0d18e8ab664b91a01c2a3c40de07c7f"}, -] - -[[package]] -name = "pycparser" -version = "2.22" -description = "C parser in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, - {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, -] - -[[package]] -name = "pydantic" -version = "2.8.2" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, - {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, -] - -[package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.20.1" -typing-extensions = [ - {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, - {version = ">=4.6.1", markers = "python_version < \"3.13\""}, -] - -[package.extras] -email = ["email-validator (>=2.0.0)"] - -[[package]] -name = "pydantic-core" -version = "2.20.1" -description = "Core functionality for Pydantic validation and serialization" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, - {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, - {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, - {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, - {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, - {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, - {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, - {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, - {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, - {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, - {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, - {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, - {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, - {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, - {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, - {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, - {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, - {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, - {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, - {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, - {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, - {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, - {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, - {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, - {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, - {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, - {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, - {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, - {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, - {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, - {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, - {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, - {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, - {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, - {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, -] - -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - -[[package]] -name = "pygit2" -version = "1.17.0" -description = "Python bindings for libgit2." -optional = false -python-versions = ">=3.10" -files = [ - {file = "pygit2-1.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cbe1a3354a3eff0f4e842abcff73b24455ba7205ac959f146d7cb8dcd63cfa45"}, - {file = "pygit2-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:578d78fc97d5c16b1ad44c1e2fda093628c3f29793b42be68b93a46ce7a662a0"}, - {file = "pygit2-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e59de6138787aa3a5365557fb1ad427d3e877868917e0910257fb11f71f3c736"}, - {file = "pygit2-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66431dba77977b9010fac580eaefcc7567ea0955b030d8e8472fdce0f1a7c5f0"}, - {file = "pygit2-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:877ce82239de45301fa9953d50b41c46a5300cf7b3993db86bde64e08521a506"}, - {file = "pygit2-1.17.0-cp310-cp310-win32.whl", hash = "sha256:8b7921016cbec166083206daca20d00f2358b18178122e1b0d1932b410296de1"}, - {file = "pygit2-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:5724683b3d239cc1457b9800d9d7988a00cd0cb1797d5caa6f46d16f3f74f1ca"}, - {file = "pygit2-1.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:39e7087e2affdba2530d1fe1ec04c27fa85db405be84e1cd4759891045324a31"}, - {file = "pygit2-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ef5c3634317295268ef84b99e8acae37cb2f8b17d966b318c79e5211bf78d3"}, - {file = "pygit2-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ad964b2eea81e0c99d05c6ec0ec8b5715d3d0c99b3b6e09abcdb57c57701592"}, - {file = "pygit2-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cce8db6aa40361270b14e1adb3a8e7d4606b9b53088e27321472c9a92f922648"}, - {file = "pygit2-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:136b1ea44107fb6a3a58e7b1322227e83101bff50a929816d8653a38e0ed0e07"}, - {file = "pygit2-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5ffce0772167e5c436be57ee3ef0fb421c864657911aeb1a97618e1dd9f8b574"}, - {file = "pygit2-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:0809029cf804f343abdc9eaeaf9d915f9dbf320d79078c20138a3bf642583365"}, - {file = "pygit2-1.17.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f7224d89a7dda7290e458393941e500c8682f375f41e6d80ee423958a5d4013d"}, - {file = "pygit2-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ae1967b0c8a2438b3b0e4a63307b5c22c80024a2f09b28d14dfde0001fed8dc"}, - {file = "pygit2-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:507343fa142a82028c8448c2626317dc19885985aba8ea27d381777ac484eefb"}, - {file = "pygit2-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc04917a680591c6e801df912d7fb722c253b5ac68178ff37b5666dafd06999"}, - {file = "pygit2-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7bb1b623cbd16962c3a1ec7f8e1012fa224c9e9642758c65e8e656ecc7ff1574"}, - {file = "pygit2-1.17.0-cp312-cp312-win32.whl", hash = "sha256:3029331ddf56a6908547278ab4c354b2d6932eb6a53be81e0093adc98a0ae540"}, - {file = "pygit2-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:1011236bab7317b82e6cbc3dff4be8467923b1dcf2ffe28bf2e64805dcb37749"}, - {file = "pygit2-1.17.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ce938e7a4fdfc816ffceb62babad65fb62e1a5ad261e880b9a072e8da144ccca"}, - {file = "pygit2-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ff2c8b0fc96fdf45a7a5239cc262b0293a5171f68d67eea239a42c3b2226cb"}, - {file = "pygit2-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8101aa723c292892ba46303b19487a9fb0de50d9e30f4c1c2a76e3383b6e4b6d"}, - {file = "pygit2-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36e3e9225e3f01bb6a2d4589c126900bbc571cd0876ca9c01372a6e3d3693c0e"}, - {file = "pygit2-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:614cfddbf048900da19b016787f153d44ea9fd7ef80f9e03a77024aa1555d5f4"}, - {file = "pygit2-1.17.0-cp313-cp313-win32.whl", hash = "sha256:1391762153af9715ed1d0586e3f207c518f03f5874e1f5b8e398697d006a0a82"}, - {file = "pygit2-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:d677d6fb85c426c5f5f8409bdc5a2e391016c99f73b97779b284c4ad25aa75fa"}, - {file = "pygit2-1.17.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c491db4f71fd5d814023f2ad89ad7023c15738bcbe0807acc2313026600bf1b1"}, - {file = "pygit2-1.17.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89ff254387d23d107dd2b542907d248a3a988e3be8cda99bcc8af04f56e6e5cf"}, - {file = "pygit2-1.17.0.tar.gz", hash = "sha256:fa2bc050b2c2d3e73b54d6d541c792178561a344f07e409f532d5bb97ac7b894"}, -] - -[package.dependencies] -cffi = ">=1.17.0" - -[[package]] -name = "pytest" -version = "8.3.2" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, - {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=1.5,<2" -tomli = {version = ">=1", markers = "python_version < \"3.11\""} - -[package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-asyncio" -version = "0.23.8" -description = "Pytest support for asyncio" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest_asyncio-0.23.8-py3-none-any.whl", hash = "sha256:50265d892689a5faefb84df80819d1ecef566eb3549cf915dfb33569359d1ce2"}, - {file = "pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3"}, -] - -[package.dependencies] -pytest = ">=7.0.0,<9" - -[package.extras] -docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] -testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] - -[[package]] -name = "pytest-cov" -version = "5.0.0" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, - {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] - -[[package]] -name = "pytest-tap" -version = "3.4" -description = "Test Anything Protocol (TAP) reporting plugin for pytest" -optional = false -python-versions = "*" -files = [ - {file = "pytest-tap-3.4.tar.gz", hash = "sha256:a7c2a4a3e8b4bf18522e46d74208f8579a191dd972c59182104ad9a4967318fb"}, - {file = "pytest_tap-3.4-py3-none-any.whl", hash = "sha256:d97a2115c94415086f6faec395d243b3c18ea846ce1c1653a4b2588082be35d8"}, -] - -[package.dependencies] -pytest = ">=3.0" -"tap.py" = ">=3.0,<4.0" - -[[package]] -name = "pytest-xdist" -version = "3.6.1" -description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, - {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, -] - -[package.dependencies] -execnet = ">=2.1" -pytest = ">=7.0.0" - -[package.extras] -psutil = ["psutil (>=3.0)"] -setproctitle = ["setproctitle"] -testing = ["filelock"] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-multipart" -version = "0.0.19" -description = "A streaming multipart parser for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python_multipart-0.0.19-py3-none-any.whl", hash = "sha256:f8d5b0b9c618575bf9df01c684ded1d94a338839bdd8223838afacfb4bb2082d"}, - {file = "python_multipart-0.0.19.tar.gz", hash = "sha256:905502ef39050557b7a6af411f454bc19526529ca46ae6831508438890ce12cc"}, -] - -[[package]] -name = "redis" -version = "5.0.8" -description = "Python client for Redis database and key-value store" -optional = false -python-versions = ">=3.7" -files = [ - {file = "redis-5.0.8-py3-none-any.whl", hash = "sha256:56134ee08ea909106090934adc36f65c9bcbbaecea5b21ba704ba6fb561f8eb4"}, - {file = "redis-5.0.8.tar.gz", hash = "sha256:0c5b10d387568dfe0698c6fad6615750c24170e548ca2deac10c649d463e9870"}, -] - -[package.dependencies] -async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} - -[package.extras] -hiredis = ["hiredis (>1.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "setuptools" -version = "72.2.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-72.2.0-py3-none-any.whl", hash = "sha256:f11dd94b7bae3a156a95ec151f24e4637fb4fa19c878e4d191bfb8b2d82728c4"}, - {file = "setuptools-72.2.0.tar.gz", hash = "sha256:80aacbf633704e9c8bfa1d99fa5dd4dc59573efcf9e4042c13d3bcef91ac2ef9"}, -] - -[package.extras] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "ordered-set (>=3.1.1)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.11.*)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (<0.4)", "pytest-ruff (>=0.2.1)", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - -[[package]] -name = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -optional = false -python-versions = "*" -files = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, -] - -[[package]] -name = "sqlalchemy" -version = "1.4.53" -description = "Database Abstraction Library" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "SQLAlchemy-1.4.53-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b61ac5457d91b5629a3dea2b258deb4cdd35ac8f6fa2031d2b9b2fff5b3396da"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a96aa8d425047551676b0e178ddb0683421e78eda879ab55775128b2e612cae"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e10ac36f0b994235c13388b39598bf27219ec8bdea5be99bdac612b01cbe525"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:437592b341a3229dd0443c9c803b0bf0a466f8f539014fef6cdb9c06b7edb7f9"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:784272ceb5eb71421fea9568749bcbe8bd019261a0e2e710a7efa76057af2499"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-win32.whl", hash = "sha256:122d7b5722df1a24402c6748bbb04687ef981493bb559d0cc0beffe722e0e6ed"}, - {file = "SQLAlchemy-1.4.53-cp310-cp310-win_amd64.whl", hash = "sha256:4604d42b2abccba266d3f5bbe883684b5df93e74054024c70d3fbb5eea45e530"}, - {file = "SQLAlchemy-1.4.53-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fb8e15dfa47f5de11ab073e12aadd6b502cfb7ac4bafd18bd18cfd1c7d13dbbc"}, - {file = "SQLAlchemy-1.4.53-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8be4df55e8fde3006d9cb1f6b3df2ba26db613855dc4df2c0fcd5ec15cb3b7"}, - {file = "SQLAlchemy-1.4.53-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b11640251f9a9789fd96cd6e5d176b1c230230c70ad40299bcbcc568451b4c"}, - {file = "SQLAlchemy-1.4.53-cp311-cp311-win32.whl", hash = "sha256:cd534c716f86bdf95b7b984a34ee278c91d1b1d7d183e7e5ff878600b1696046"}, - {file = "SQLAlchemy-1.4.53-cp311-cp311-win_amd64.whl", hash = "sha256:6dd06572872ca13ef5a90306a3e5af787498ddaa17fb00109b1243642646cd69"}, - {file = "SQLAlchemy-1.4.53-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:2774c24c405136c3ef472e2352bdca7330659d481fbf2283f996c0ef9eb90f22"}, - {file = "SQLAlchemy-1.4.53-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68a614765197b3d13a730d631a78c3bb9b3b72ba58ed7ab295d58d517464e315"}, - {file = "SQLAlchemy-1.4.53-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d13d4dfbc6e52363886b47cf02cf68c5d2a37c468626694dc210d7e97d4ad330"}, - {file = "SQLAlchemy-1.4.53-cp312-cp312-win32.whl", hash = "sha256:197065b91456574d70b6459bfa62bc0b52a4960a29ef923c375ec427274a3e05"}, - {file = "SQLAlchemy-1.4.53-cp312-cp312-win_amd64.whl", hash = "sha256:421306c4b936b0271a3ce2dc074928d5ece4a36f9c482daa5770f44ecfc3a883"}, - {file = "SQLAlchemy-1.4.53-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:13fc34b35d8ddb3fbe3f8fcfdf6c2546e676187f0fb20f5774da362ddaf8fa2d"}, - {file = "SQLAlchemy-1.4.53-cp36-cp36m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626be971ff89541cfd3e70b54be00b57a7f8557204decb6223ce0428fec058f3"}, - {file = "SQLAlchemy-1.4.53-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:991e42fdfec561ebc6a4fae7161a86d129d6069fa14210b96b8dd752afa7059c"}, - {file = "SQLAlchemy-1.4.53-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:95123f3a1e0e8020848fd32ba751db889a01a44e4e4fef7e58c87ddd0b2fca59"}, - {file = "SQLAlchemy-1.4.53-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c58e011e9e6373b3a091d83f20601fb335a3b4bace80bfcb914ac168aad3b70d"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:670c7769bf5dcae9aff331247b5d82fe635c63731088a46ce68ba2ba519ef36e"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07ba54f09033d387ae9df8d62cbe211ed7304e0bfbece1f8c55e21db9fae5c11"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a38834b4c183c33daf58544281395aad2e985f0b47cca1e88ea5ada88344e63"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:616492f5315128a847f293a7c552f3561ac7e996d2aa5dc46bef4fb0d3781f1d"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0cf8c0af9563892c6632f7343bc393dfce6eeef8e4d10c5fadba9c0390520bd"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-win32.whl", hash = "sha256:c05fe05941424c2f3747a8952381b7725e24cba2ca00141380e54789d5b616b6"}, - {file = "SQLAlchemy-1.4.53-cp37-cp37m-win_amd64.whl", hash = "sha256:93e90aa3e3b2f8e8cbae4d5509f8e0cf82972378d323c740a8df1c1e9f484172"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:9d7368df54d3ed45a18955f6cec38ebe075290594ac0d5c87a8ddaff7e10de27"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89d8ac4158ef68eea8bb0f6dd0583127d9aa8720606964ba8eee20b254f9c83a"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16bb9fa4d00b4581b14d9f0e2224dc7745b854aa4687738279af0f48f7056c98"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fe5168d0249c23f537950b6d75935ff2709365a113e29938a979aec36668ecf"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8608d162d3bd29d807aab32c3fb6e2f8e225a43d1c54c917fed38513785380"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-win32.whl", hash = "sha256:a9d4d132198844bd6828047135ce7b887687c92925049a2468a605fc775c7a1a"}, - {file = "SQLAlchemy-1.4.53-cp38-cp38-win_amd64.whl", hash = "sha256:c15d1f1fcf1f9bec0499ae1d9132b950fcc7730f2d26d10484c8808b4e077816"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:edf094a20a386ff2ec73de65ef18014b250259cb860edc61741e240ca22d6981"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83a9c3514ff19d9d30d8a8d378b24cd1dfa5528d20891481cb5f196117db6a48"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaaeedbceb4dfd688fff2faf25a9a87a391f548811494f7bff7fa701b639abc3"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d021699b9007deb7aa715629078830c99a5fec2753d9bdd5ff33290d363ef755"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0465b8a68f8f4de754c1966c45b187ac784ad97bc9747736f913130f0e1adea0"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-win32.whl", hash = "sha256:5f67b9e9dcac3241781e96575468d55a42332157dee04bdbf781df573dff5f85"}, - {file = "SQLAlchemy-1.4.53-cp39-cp39-win_amd64.whl", hash = "sha256:a8c2f2a0b2c4e3b86eb58c9b6bb98548205eea2fba9dae4edfd29dc6aebbe95a"}, - {file = "SQLAlchemy-1.4.53.tar.gz", hash = "sha256:5e6ab710c4c064755fd92d1a417bef360228a19bdf0eee32b03aa0f5f8e9fe0d"}, -] - -[package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} - -[package.extras] -aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] -aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] -asyncio = ["greenlet (!=0.4.17)"] -asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"] -mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2)", "mariadb (>=1.0.1,!=1.1.2)"] -mssql = ["pyodbc"] -mssql-pymssql = ["pymssql", "pymssql"] -mssql-pyodbc = ["pyodbc", "pyodbc"] -mypy = ["mypy (>=0.910)", "sqlalchemy2-stubs"] -mysql = ["mysqlclient (>=1.4.0)", "mysqlclient (>=1.4.0,<2)"] -mysql-connector = ["mysql-connector-python", "mysql-connector-python"] -oracle = ["cx_oracle (>=7)", "cx_oracle (>=7,<8)"] -postgresql = ["psycopg2 (>=2.7)"] -postgresql-asyncpg = ["asyncpg", "asyncpg", "greenlet (!=0.4.17)", "greenlet (!=0.4.17)"] -postgresql-pg8000 = ["pg8000 (>=1.16.6,!=1.29.0)", "pg8000 (>=1.16.6,!=1.29.0)"] -postgresql-psycopg2binary = ["psycopg2-binary"] -postgresql-psycopg2cffi = ["psycopg2cffi"] -pymysql = ["pymysql", "pymysql (<1)"] -sqlcipher = ["sqlcipher3_binary"] - -[[package]] -name = "srcinfo" -version = "0.1.2" -description = "A small library to parse .SRCINFO files" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "srcinfo-0.1.2-py3-none-any.whl", hash = "sha256:f670a3473db3efa7392bd68add147650fb6c3e9b2ec54c1db252d80698c968da"}, - {file = "srcinfo-0.1.2.tar.gz", hash = "sha256:c8296c710015a6b25c1dc750a494841a8094a2cf4fdb33a375fbe9720ec976e6"}, -] - -[package.dependencies] -parse = ">=1.19.0,<2.0.0" - -[[package]] -name = "starlette" -version = "0.38.2" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.8" -files = [ - {file = "starlette-0.38.2-py3-none-any.whl", hash = "sha256:4ec6a59df6bbafdab5f567754481657f7ed90dc9d69b0c9ff017907dd54faeff"}, - {file = "starlette-0.38.2.tar.gz", hash = "sha256:c7c0441065252160993a1a37cf2a73bb64d271b17303e0b0c1eb7191cfb12d75"}, -] - -[package.dependencies] -anyio = ">=3.4.0,<5" - -[package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] - -[[package]] -name = "tap-py" -version = "3.1" -description = "Test Anything Protocol (TAP) tools" -optional = false -python-versions = "*" -files = [ - {file = "tap.py-3.1-py3-none-any.whl", hash = "sha256:928c852f3361707b796c93730cc5402c6378660b161114461066acf53d65bf5d"}, - {file = "tap.py-3.1.tar.gz", hash = "sha256:3c0cd45212ad5a25b35445964e2517efa000a118a1bfc3437dae828892eaf1e1"}, -] - -[package.extras] -yaml = ["PyYAML (>=5.1)", "more-itertools"] - -[[package]] -name = "taskgroup" -version = "0.0.0a4" -description = "backport of asyncio.TaskGroup, asyncio.Runner and asyncio.timeout" -optional = false -python-versions = "*" -files = [ - {file = "taskgroup-0.0.0a4-py2.py3-none-any.whl", hash = "sha256:5c1bd0e4c06114e7a4128583ab75c987597d5378a33948a3b74c662b90f61277"}, - {file = "taskgroup-0.0.0a4.tar.gz", hash = "sha256:eb08902d221e27661950f2a0320ddf3f939f579279996f81fe30779bca3a159c"}, -] - -[package.dependencies] -exceptiongroup = "*" - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tomlkit" -version = "0.13.2" -description = "Style preserving TOML library" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, - {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, -] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[[package]] -name = "urllib3" -version = "2.2.2" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "uvicorn" -version = "0.30.6" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.8" -files = [ - {file = "uvicorn-0.30.6-py3-none-any.whl", hash = "sha256:65fd46fe3fda5bdc1b03b94eb634923ff18cd35b2f084813ea79d1f103f711b5"}, - {file = "uvicorn-0.30.6.tar.gz", hash = "sha256:4b15decdda1e72be08209e860a1e10e92439ad5b97cf44cc945fcbee66fc5788"}, -] - -[package.dependencies] -click = ">=7.0" -h11 = ">=0.8" -typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "watchfiles" -version = "1.0.4" -description = "Simple, modern and high performance file watching and code reload in python." -optional = false -python-versions = ">=3.9" -files = [ - {file = "watchfiles-1.0.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ba5bb3073d9db37c64520681dd2650f8bd40902d991e7b4cfaeece3e32561d08"}, - {file = "watchfiles-1.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f25d0ba0fe2b6d2c921cf587b2bf4c451860086534f40c384329fb96e2044d1"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47eb32ef8c729dbc4f4273baece89398a4d4b5d21a1493efea77a17059f4df8a"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:076f293100db3b0b634514aa0d294b941daa85fc777f9c698adb1009e5aca0b1"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1eacd91daeb5158c598fe22d7ce66d60878b6294a86477a4715154990394c9b3"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13c2ce7b72026cfbca120d652f02c7750f33b4c9395d79c9790b27f014c8a5a2"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90192cdc15ab7254caa7765a98132a5a41471cf739513cc9bcf7d2ffcc0ec7b2"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278aaa395f405972e9f523bd786ed59dfb61e4b827856be46a42130605fd0899"}, - {file = "watchfiles-1.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a462490e75e466edbb9fc4cd679b62187153b3ba804868452ef0577ec958f5ff"}, - {file = "watchfiles-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8d0d0630930f5cd5af929040e0778cf676a46775753e442a3f60511f2409f48f"}, - {file = "watchfiles-1.0.4-cp310-cp310-win32.whl", hash = "sha256:cc27a65069bcabac4552f34fd2dce923ce3fcde0721a16e4fb1b466d63ec831f"}, - {file = "watchfiles-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:8b1f135238e75d075359cf506b27bf3f4ca12029c47d3e769d8593a2024ce161"}, - {file = "watchfiles-1.0.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2a9f93f8439639dc244c4d2902abe35b0279102bca7bbcf119af964f51d53c19"}, - {file = "watchfiles-1.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9eea33ad8c418847dd296e61eb683cae1c63329b6d854aefcd412e12d94ee235"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31f1a379c9dcbb3f09cf6be1b7e83b67c0e9faabed0471556d9438a4a4e14202"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab594e75644421ae0a2484554832ca5895f8cab5ab62de30a1a57db460ce06c6"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc2eb5d14a8e0d5df7b36288979176fbb39672d45184fc4b1c004d7c3ce29317"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f68d8e9d5a321163ddacebe97091000955a1b74cd43724e346056030b0bacee"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9ce064e81fe79faa925ff03b9f4c1a98b0bbb4a1b8c1b015afa93030cb21a49"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b77d5622ac5cc91d21ae9c2b284b5d5c51085a0bdb7b518dba263d0af006132c"}, - {file = "watchfiles-1.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1941b4e39de9b38b868a69b911df5e89dc43767feeda667b40ae032522b9b5f1"}, - {file = "watchfiles-1.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f8c4998506241dedf59613082d1c18b836e26ef2a4caecad0ec41e2a15e4226"}, - {file = "watchfiles-1.0.4-cp311-cp311-win32.whl", hash = "sha256:4ebbeca9360c830766b9f0df3640b791be569d988f4be6c06d6fae41f187f105"}, - {file = "watchfiles-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:05d341c71f3d7098920f8551d4df47f7b57ac5b8dad56558064c3431bdfc0b74"}, - {file = "watchfiles-1.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:32b026a6ab64245b584acf4931fe21842374da82372d5c039cba6bf99ef722f3"}, - {file = "watchfiles-1.0.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:229e6ec880eca20e0ba2f7e2249c85bae1999d330161f45c78d160832e026ee2"}, - {file = "watchfiles-1.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5717021b199e8353782dce03bd8a8f64438832b84e2885c4a645f9723bf656d9"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0799ae68dfa95136dde7c472525700bd48777875a4abb2ee454e3ab18e9fc712"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43b168bba889886b62edb0397cab5b6490ffb656ee2fcb22dec8bfeb371a9e12"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb2c46e275fbb9f0c92e7654b231543c7bbfa1df07cdc4b99fa73bedfde5c844"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:857f5fc3aa027ff5e57047da93f96e908a35fe602d24f5e5d8ce64bf1f2fc733"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55ccfd27c497b228581e2838d4386301227fc0cb47f5a12923ec2fe4f97b95af"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c11ea22304d17d4385067588123658e9f23159225a27b983f343fcffc3e796a"}, - {file = "watchfiles-1.0.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:74cb3ca19a740be4caa18f238298b9d472c850f7b2ed89f396c00a4c97e2d9ff"}, - {file = "watchfiles-1.0.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7cce76c138a91e720d1df54014a047e680b652336e1b73b8e3ff3158e05061e"}, - {file = "watchfiles-1.0.4-cp312-cp312-win32.whl", hash = "sha256:b045c800d55bc7e2cadd47f45a97c7b29f70f08a7c2fa13241905010a5493f94"}, - {file = "watchfiles-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:c2acfa49dd0ad0bf2a9c0bb9a985af02e89345a7189be1efc6baa085e0f72d7c"}, - {file = "watchfiles-1.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:22bb55a7c9e564e763ea06c7acea24fc5d2ee5dfc5dafc5cfbedfe58505e9f90"}, - {file = "watchfiles-1.0.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:8012bd820c380c3d3db8435e8cf7592260257b378b649154a7948a663b5f84e9"}, - {file = "watchfiles-1.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa216f87594f951c17511efe5912808dfcc4befa464ab17c98d387830ce07b60"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c9953cf85529c05b24705639ffa390f78c26449e15ec34d5339e8108c7c407"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cf684aa9bba4cd95ecb62c822a56de54e3ae0598c1a7f2065d51e24637a3c5d"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f44a39aee3cbb9b825285ff979ab887a25c5d336e5ec3574f1506a4671556a8d"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38320582736922be8c865d46520c043bff350956dfc9fbaee3b2df4e1740a4b"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39f4914548b818540ef21fd22447a63e7be6e24b43a70f7642d21f1e73371590"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f12969a3765909cf5dc1e50b2436eb2c0e676a3c75773ab8cc3aa6175c16e902"}, - {file = "watchfiles-1.0.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0986902677a1a5e6212d0c49b319aad9cc48da4bd967f86a11bde96ad9676ca1"}, - {file = "watchfiles-1.0.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:308ac265c56f936636e3b0e3f59e059a40003c655228c131e1ad439957592303"}, - {file = "watchfiles-1.0.4-cp313-cp313-win32.whl", hash = "sha256:aee397456a29b492c20fda2d8961e1ffb266223625346ace14e4b6d861ba9c80"}, - {file = "watchfiles-1.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:d6097538b0ae5c1b88c3b55afa245a66793a8fec7ada6755322e465fb1a0e8cc"}, - {file = "watchfiles-1.0.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:d3452c1ec703aa1c61e15dfe9d482543e4145e7c45a6b8566978fbb044265a21"}, - {file = "watchfiles-1.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7b75fee5a16826cf5c46fe1c63116e4a156924d668c38b013e6276f2582230f0"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e997802d78cdb02623b5941830ab06f8860038faf344f0d288d325cc9c5d2ff"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0611d244ce94d83f5b9aff441ad196c6e21b55f77f3c47608dcf651efe54c4a"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9745a4210b59e218ce64c91deb599ae8775c8a9da4e95fb2ee6fe745fc87d01a"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4810ea2ae622add560f4aa50c92fef975e475f7ac4900ce5ff5547b2434642d8"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:740d103cd01458f22462dedeb5a3382b7f2c57d07ff033fbc9465919e5e1d0f3"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbd912a61543a36aef85e34f212e5d2486e7c53ebfdb70d1e0b060cc50dd0bf"}, - {file = "watchfiles-1.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0bc80d91ddaf95f70258cf78c471246846c1986bcc5fd33ccc4a1a67fcb40f9a"}, - {file = "watchfiles-1.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab0311bb2ffcd9f74b6c9de2dda1612c13c84b996d032cd74799adb656af4e8b"}, - {file = "watchfiles-1.0.4-cp39-cp39-win32.whl", hash = "sha256:02a526ee5b5a09e8168314c905fc545c9bc46509896ed282aeb5a8ba9bd6ca27"}, - {file = "watchfiles-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:a5ae5706058b27c74bac987d615105da17724172d5aaacc6c362a40599b6de43"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdcc92daeae268de1acf5b7befcd6cfffd9a047098199056c72e4623f531de18"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8d3d9203705b5797f0af7e7e5baa17c8588030aaadb7f6a86107b7247303817"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdef5a1be32d0b07dcea3318a0be95d42c98ece24177820226b56276e06b63b0"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:342622287b5604ddf0ed2d085f3a589099c9ae8b7331df3ae9845571586c4f3d"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9fe37a2de80aa785d340f2980276b17ef697ab8db6019b07ee4fd28a8359d2f3"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9d1ef56b56ed7e8f312c934436dea93bfa3e7368adfcf3df4c0da6d4de959a1e"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b42cac65beae3a362629950c444077d1b44f1790ea2772beaea95451c086bb"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e0227b8ed9074c6172cf55d85b5670199c99ab11fd27d2c473aa30aec67ee42"}, - {file = "watchfiles-1.0.4.tar.gz", hash = "sha256:6ba473efd11062d73e4f00c2b730255f9c1bdd73cd5f9fe5b5da8dbd4a717205"}, -] - -[package.dependencies] -anyio = ">=3.0.0" - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "werkzeug" -version = "3.0.3" -description = "The comprehensive WSGI web application library." -optional = false -python-versions = ">=3.8" -files = [ - {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, - {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, -] - -[package.dependencies] -MarkupSafe = ">=2.1.1" - -[package.extras] -watchdog = ["watchdog (>=2.3)"] - -[[package]] -name = "wrapt" -version = "1.16.0" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = ">=3.6" -files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, -] - -[[package]] -name = "wsproto" -version = "1.2.0" -description = "WebSockets state-machine based protocol implementation" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, - {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, -] - -[package.dependencies] -h11 = ">=0.9.0,<1" - -[[package]] -name = "zipp" -version = "3.20.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.20.0-py3-none-any.whl", hash = "sha256:58da6168be89f0be59beb194da1250516fdaa062ccebd30127ac65d30045e10d"}, - {file = "zipp-3.20.0.tar.gz", hash = "sha256:0145e43d89664cfe1a2e533adc75adafed82fe2da404b4bbb6b026c0157bdb31"}, -] - -[package.extras] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] - -[metadata] -lock-version = "2.0" -python-versions = ">=3.10,<3.14" -content-hash = "3f61efa57153b51d06808462a7cc3f2dc9a0d9132d1f35d47886a8af75243123" diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index d2e82441..00000000 --- a/pyproject.toml +++ /dev/null @@ -1,131 +0,0 @@ -[tool.black] -line-length = 88 - -[tool.isort] -profile = "black" -combine_as_imports = true - - -# Poetry build configuration for the aurweb project. -# -# Dependencies: -# * python >= 3.9 -# * pip -# * poetry -# * poetry-dynamic-versioning -# -[tool.poetry] -name = "aurweb" -version = "v6.2.16" -license = "GPL-2.0-only" -description = "Source code for the Arch User Repository's website" -homepage = "https://aur.archlinux.org" -repository = "https://gitlab.archlinux.org/archlinux/aurweb" -documentation = "https://gitlab.archlinux.org/archlinux/aurweb/-/blob/master/README.md" -keywords = ["aurweb", "aur", "Arch", "Linux"] -authors = [ - "Lucas Fleischer ", - "Eli Schwartz ", - "Kevin Morris " -] -maintainers = [ - "Leonidas Spyropoulos ", - "Mario Oenning " -] -packages = [ - { include = "aurweb" } -] - -[tool.poetry-dynamic-versioning] -enable = true -vcs = "git" - -[build-system] -requires = ["poetry>=1.1.8", "poetry-dynamic-versioning"] -build-backend = "poetry.masonry.api" - -[tool.poetry.urls] -"Repository" = "https://gitlab.archlinux.org/archlinux/aurweb" -"Bug Tracker" = "https://gitlab.archlinux.org/archlinux/aurweb/-/issues" -"Development Mailing List" = "https://lists.archlinux.org/listinfo/aur-dev" -"General Mailing List" = "https://lists.archlinux.org/listinfo/aur-general" -"Request Mailing List" = "https://lists.archlinux.org/listinfo/aur-requests" - -[tool.poetry.dependencies] -python = ">=3.10,<3.14" - -# poetry-dynamic-versioning is used to produce tool.poetry.version -# based on git tags. - -# General -aiofiles = "^24.0.0" -asgiref = "^3.8.1" -bcrypt = "^4.1.2" -bleach = "^6.1.0" -email-validator = "^2.1.1" -fakeredis = "^2.21.3" -feedgen = "^1.0.0" -httpx = "^0.27.0" -itsdangerous = "^2.1.2" -lxml = "^5.2.1" -orjson = "^3.10.0" -pygit2 = "^1.17.0" -python-multipart = "0.0.19" -redis = "^5.0.3" -requests = "^2.31.0" -paginate = "^0.5.6" - -# SQL -alembic = "^1.13.1" -mysqlclient = "^2.2.3" -Authlib = "^1.3.0" -Jinja2 = "^3.1.3" -Markdown = "^3.6" -Werkzeug = "^3.0.2" -SQLAlchemy = "^1.4.52" -greenlet = "3.1.1" # Explicitly add greenlet (dependency of SQLAlchemy) for python 3.13 support - -# ASGI -uvicorn = "^0.30.0" -gunicorn = "^22.0.0" -Hypercorn = "^0.17.0" -pytest-xdist = "^3.5.0" -filelock = "^3.13.3" -posix-ipc = "^1.1.1" -pyalpm = "^0.10.6" -fastapi = "^0.112.0" -srcinfo = "^0.1.2" -tomlkit = "^0.13.0" - -# Tracing -prometheus-fastapi-instrumentator = "^7.0.0" -opentelemetry-api = "^1.26.0" -opentelemetry-sdk = "^1.26.0" -opentelemetry-exporter-otlp-proto-http = "^1.26.0" -opentelemetry-instrumentation-fastapi = "^0.47b0" -opentelemetry-instrumentation-redis = "^0.47b0" -opentelemetry-instrumentation-sqlalchemy = "^0.47b0" - -[tool.poetry.dev-dependencies] -coverage = "^7.4.4" -pytest = "^8.1.1" -pytest-asyncio = "^0.23.0" -pytest-cov = "^5.0.0" -pytest-tap = "^3.4" -watchfiles = "^1.0.4" - -[tool.poetry.scripts] -aurweb-git-auth = "aurweb.git.auth:main" -aurweb-git-serve = "aurweb.git.serve:main" -aurweb-git-update = "aurweb.git.update:main" -aurweb-aurblup = "aurweb.scripts.aurblup:main" -aurweb-mkpkglists = "aurweb.scripts.mkpkglists:main" -aurweb-notify = "aurweb.scripts.notify:main" -aurweb-pkgmaint = "aurweb.scripts.pkgmaint:main" -aurweb-popupdate = "aurweb.scripts.popupdate:main" -aurweb-rendercomment = "aurweb.scripts.rendercomment:main" -aurweb-votereminder = "aurweb.scripts.votereminder:main" -aurweb-usermaint = "aurweb.scripts.usermaint:main" -aurweb-config = "aurweb.scripts.config:main" -aurweb-adduser = "aurweb.scripts.adduser:main" -aurweb-git-archive = "aurweb.scripts.git_archive:main" diff --git a/pytest.ini b/pytest.ini deleted file mode 100644 index 62d1922a..00000000 --- a/pytest.ini +++ /dev/null @@ -1,11 +0,0 @@ -[pytest] -filterwarnings = - # This is coming from https://github.com/pytest-dev/pytest-xdist/issues/825 and it's caused from pytest-cov - # Remove once fixed: https://github.com/pytest-dev/pytest-cov/issues/557 - ignore:The --rsyncdir command line argument and rsyncdirs config variable are deprecated.:DeprecationWarning - -# Build in coverage and pytest-xdist multiproc testing. -addopts = --cov=aurweb --cov-append --dist load --dist loadfile -n auto - -# Our pytest units are located in the ./test/ directory. -testpaths = test diff --git a/renovate.json b/renovate.json deleted file mode 100644 index 6843bc00..00000000 --- a/renovate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:base", - "group:allNonMajor" - ], - "packageRules": [ - { - "groupName": "fastapi", - "matchPackageNames": ["fastapi"] - }, - { - "matchPackageNames": ["python"], - "enabled": false - } - ] -} diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql new file mode 100644 index 00000000..594a804d --- /dev/null +++ b/schema/aur-schema.sql @@ -0,0 +1,361 @@ +-- The MySQL database layout for the AUR. Certain data +-- is also included such as AccountTypes, etc. +-- +DROP DATABASE IF EXISTS AUR; +CREATE DATABASE AUR DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +USE AUR; + +-- Define the Account Types for the AUR. +-- +CREATE TABLE AccountTypes ( + ID TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, + AccountType VARCHAR(32) NOT NULL DEFAULT '', + PRIMARY KEY (ID) +) ENGINE = InnoDB; +INSERT INTO AccountTypes (ID, AccountType) VALUES (1, 'User'); +INSERT INTO AccountTypes (ID, AccountType) VALUES (2, 'Trusted User'); +INSERT INTO AccountTypes (ID, AccountType) VALUES (3, 'Developer'); +INSERT INTO AccountTypes (ID, AccountType) VALUES (4, 'Trusted User & Developer'); + + +-- User information for each user regardless of type. +-- +CREATE TABLE Users ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + AccountTypeID TINYINT UNSIGNED NOT NULL DEFAULT 1, + Suspended TINYINT UNSIGNED NOT NULL DEFAULT 0, + Username VARCHAR(32) NOT NULL, + Email VARCHAR(64) NOT NULL, + Passwd CHAR(32) NOT NULL, + Salt CHAR(32) NOT NULL DEFAULT '', + ResetKey CHAR(32) NOT NULL DEFAULT '', + RealName VARCHAR(64) NOT NULL DEFAULT '', + LangPreference VARCHAR(5) NOT NULL DEFAULT 'en', + IRCNick VARCHAR(32) NOT NULL DEFAULT '', + PGPKey VARCHAR(40) NULL DEFAULT NULL, + LastLogin BIGINT UNSIGNED NOT NULL DEFAULT 0, + LastLoginIPAddress INTEGER UNSIGNED NOT NULL DEFAULT 0, + InactivityTS BIGINT UNSIGNED NOT NULL DEFAULT 0, + RegistrationTS TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (ID), + UNIQUE (Username), + UNIQUE (Email), + INDEX (AccountTypeID), + FOREIGN KEY (AccountTypeID) REFERENCES AccountTypes(ID) ON DELETE NO ACTION +) ENGINE = InnoDB; +-- A default developer account for testing purposes +INSERT INTO Users (ID, AccountTypeID, Username, Email, Passwd) VALUES ( + 1, 3, 'dev', 'dev@localhost', MD5('dev')); +INSERT INTO Users (ID, AccountTypeID, Username, Email, Passwd) VALUES ( + 2, 2, 'tu', 'tu@localhost', MD5('tu')); +INSERT INTO Users (ID, AccountTypeID, Username, Email, Passwd) VALUES ( + 3, 1, 'user', 'user@localhost', MD5('user')); + + +-- SSH public keys used for the aurweb SSH/Git interface. +-- +CREATE TABLE SSHPubKeys ( + UserID INTEGER UNSIGNED NOT NULL, + Fingerprint VARCHAR(44) NOT NULL, + PubKey VARCHAR(4096) NOT NULL, + PRIMARY KEY (Fingerprint), + FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + + +-- Track Users logging in/out of AUR web site. +-- +CREATE TABLE Sessions ( + UsersID INTEGER UNSIGNED NOT NULL, + SessionID CHAR(32) NOT NULL, + LastUpdateTS BIGINT UNSIGNED NOT NULL, + FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE, + UNIQUE (SessionID) +) ENGINE = InnoDB; + + +-- Information on package bases +-- +CREATE TABLE PackageBases ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + Name VARCHAR(255) NOT NULL, + NumVotes INTEGER UNSIGNED NOT NULL DEFAULT 0, + Popularity DECIMAL(10,6) UNSIGNED NOT NULL DEFAULT 0, + OutOfDateTS BIGINT UNSIGNED NULL DEFAULT NULL, + SubmittedTS BIGINT UNSIGNED NOT NULL, + ModifiedTS BIGINT UNSIGNED NOT NULL, + SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL, -- who submitted it? + MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- User + PackagerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- Last packager + PRIMARY KEY (ID), + UNIQUE (Name), + INDEX (NumVotes), + INDEX (SubmitterUID), + INDEX (MaintainerUID), + INDEX (PackagerUID), + -- deleting a user will cause packages to be orphaned, not deleted + FOREIGN KEY (SubmitterUID) REFERENCES Users(ID) ON DELETE SET NULL, + FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE SET NULL, + FOREIGN KEY (PackagerUID) REFERENCES Users(ID) ON DELETE SET NULL +) ENGINE = InnoDB; + + +-- Keywords of package bases +-- +CREATE TABLE PackageKeywords ( + PackageBaseID INTEGER UNSIGNED NOT NULL, + Keyword VARCHAR(255) NOT NULL DEFAULT '', + PRIMARY KEY (PackageBaseID, Keyword), + FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + + +-- Information about the actual packages +-- +CREATE TABLE Packages ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + PackageBaseID INTEGER UNSIGNED NOT NULL, + Name VARCHAR(255) NOT NULL, + Version VARCHAR(255) NOT NULL DEFAULT '', + Description VARCHAR(255) NULL DEFAULT NULL, + URL VARCHAR(255) NULL DEFAULT NULL, + PRIMARY KEY (ID), + UNIQUE (Name), + FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + + +-- Information about licenses +-- +CREATE TABLE Licenses ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + Name VARCHAR(255) NOT NULL, + PRIMARY KEY (ID), + UNIQUE (Name) +) ENGINE = InnoDB; + + +-- Information about package-license-relations +-- +CREATE TABLE PackageLicenses ( + PackageID INTEGER UNSIGNED NOT NULL, + LicenseID INTEGER UNSIGNED NOT NULL, + PRIMARY KEY (PackageID, LicenseID), + FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE, + FOREIGN KEY (LicenseID) REFERENCES Licenses(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + + +-- Information about groups +-- +CREATE TABLE Groups ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + Name VARCHAR(255) NOT NULL, + PRIMARY KEY (ID), + UNIQUE (Name) +) ENGINE = InnoDB; + + +-- Information about package-group-relations +-- +CREATE TABLE PackageGroups ( + PackageID INTEGER UNSIGNED NOT NULL, + GroupID INTEGER UNSIGNED NOT NULL, + PRIMARY KEY (PackageID, GroupID), + FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE, + FOREIGN KEY (GroupID) REFERENCES Groups(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + + +-- Define the package dependency types +-- +CREATE TABLE DependencyTypes ( + ID TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, + Name VARCHAR(32) NOT NULL DEFAULT '', + PRIMARY KEY (ID) +) ENGINE = InnoDB; +INSERT INTO DependencyTypes VALUES (1, 'depends'); +INSERT INTO DependencyTypes VALUES (2, 'makedepends'); +INSERT INTO DependencyTypes VALUES (3, 'checkdepends'); +INSERT INTO DependencyTypes VALUES (4, 'optdepends'); + + +-- Track which dependencies a package has +-- +CREATE TABLE PackageDepends ( + PackageID INTEGER UNSIGNED NOT NULL, + DepTypeID TINYINT UNSIGNED NOT NULL, + DepName VARCHAR(255) NOT NULL, + DepCondition VARCHAR(255), + DepArch VARCHAR(255) NULL DEFAULT NULL, + INDEX (PackageID), + INDEX (DepName), + FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE, + FOREIGN KEY (DepTypeID) REFERENCES DependencyTypes(ID) ON DELETE NO ACTION +) ENGINE = InnoDB; + + +-- Define the package relation types +-- +CREATE TABLE RelationTypes ( + ID TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, + Name VARCHAR(32) NOT NULL DEFAULT '', + PRIMARY KEY (ID) +) ENGINE = InnoDB; +INSERT INTO RelationTypes VALUES (1, 'conflicts'); +INSERT INTO RelationTypes VALUES (2, 'provides'); +INSERT INTO RelationTypes VALUES (3, 'replaces'); + + +-- Track which conflicts, provides and replaces a package has +-- +CREATE TABLE PackageRelations ( + PackageID INTEGER UNSIGNED NOT NULL, + RelTypeID TINYINT UNSIGNED NOT NULL, + RelName VARCHAR(255) NOT NULL, + RelCondition VARCHAR(255), + RelArch VARCHAR(255) NULL DEFAULT NULL, + INDEX (PackageID), + INDEX (RelName), + FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE, + FOREIGN KEY (RelTypeID) REFERENCES RelationTypes(ID) ON DELETE NO ACTION +) ENGINE = InnoDB; + + +-- Track which sources a package has +-- +CREATE TABLE PackageSources ( + PackageID INTEGER UNSIGNED NOT NULL, + Source VARCHAR(255) NOT NULL DEFAULT "/dev/null", + SourceArch VARCHAR(255) NULL DEFAULT NULL, + INDEX (PackageID), + FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + + +-- Track votes for packages +-- +CREATE TABLE PackageVotes ( + UsersID INTEGER UNSIGNED NOT NULL, + PackageBaseID INTEGER UNSIGNED NOT NULL, + VoteTS BIGINT UNSIGNED NULL DEFAULT NULL, + INDEX (UsersID), + INDEX (PackageBaseID), + FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE, + FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE +) ENGINE = InnoDB; +CREATE UNIQUE INDEX VoteUsersIDPackageID ON PackageVotes (UsersID, PackageBaseID); + +-- Record comments for packages +-- +CREATE TABLE PackageComments ( + ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + PackageBaseID INTEGER UNSIGNED NOT NULL, + UsersID INTEGER UNSIGNED NULL DEFAULT NULL, + Comments TEXT NOT NULL DEFAULT '', + CommentTS BIGINT UNSIGNED NOT NULL DEFAULT 0, + DelUsersID INTEGER UNSIGNED NULL DEFAULT NULL, + PRIMARY KEY (ID), + INDEX (UsersID), + INDEX (PackageBaseID), + FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE SET NULL, + FOREIGN KEY (DelUsersID) REFERENCES Users(ID) ON DELETE CASCADE, + FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + +-- Package base co-maintainers +-- +CREATE TABLE PackageComaintainers ( + UsersID INTEGER UNSIGNED NOT NULL, + PackageBaseID INTEGER UNSIGNED NOT NULL, + Priority INTEGER UNSIGNED NOT NULL, + INDEX (UsersID), + INDEX (PackageBaseID), + FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE, + FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + +-- Comment addition notifications +-- +CREATE TABLE CommentNotify ( + PackageBaseID INTEGER UNSIGNED NOT NULL, + UserID INTEGER UNSIGNED NOT NULL, + FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE, + FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE +) ENGINE = InnoDB; +CREATE UNIQUE INDEX NotifyUserIDPkgID ON CommentNotify (UserID, PackageBaseID); + +-- Package name blacklist +-- +CREATE TABLE PackageBlacklist ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + Name VARCHAR(64) NOT NULL, + PRIMARY KEY (ID), + UNIQUE (Name) +) ENGINE = InnoDB; + +-- Define package request types +-- +CREATE TABLE RequestTypes ( + ID TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, + Name VARCHAR(32) NOT NULL DEFAULT '', + PRIMARY KEY (ID) +) ENGINE = InnoDB; +INSERT INTO RequestTypes VALUES (1, 'deletion'); +INSERT INTO RequestTypes VALUES (2, 'orphan'); +INSERT INTO RequestTypes VALUES (3, 'merge'); + +-- Package requests +-- +CREATE TABLE PackageRequests ( + ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + ReqTypeID TINYINT UNSIGNED NOT NULL, + PackageBaseID INTEGER UNSIGNED NULL, + PackageBaseName VARCHAR(255) NOT NULL, + MergeBaseName VARCHAR(255) NULL, + UsersID INTEGER UNSIGNED NULL DEFAULT NULL, + Comments TEXT NOT NULL DEFAULT '', + RequestTS BIGINT UNSIGNED NOT NULL DEFAULT 0, + Status TINYINT UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (ID), + INDEX (UsersID), + INDEX (PackageBaseID), + FOREIGN KEY (ReqTypeID) REFERENCES RequestTypes(ID) ON DELETE NO ACTION, + FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE SET NULL, + FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE SET NULL +) ENGINE = InnoDB; + +-- Vote information +-- +CREATE TABLE IF NOT EXISTS TU_VoteInfo ( + ID int(10) unsigned NOT NULL auto_increment, + Agenda text NOT NULL, + User VARCHAR(32) NOT NULL, + Submitted bigint(20) unsigned NOT NULL, + End bigint(20) unsigned NOT NULL, + Quorum decimal(2, 2) unsigned NOT NULL, + SubmitterID int(10) unsigned NOT NULL, + Yes tinyint(3) unsigned NOT NULL default '0', + No tinyint(3) unsigned NOT NULL default '0', + Abstain tinyint(3) unsigned NOT NULL default '0', + ActiveTUs tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (ID), + FOREIGN KEY (SubmitterID) REFERENCES Users(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + +-- Individual vote records +-- +CREATE TABLE IF NOT EXISTS TU_Votes ( + VoteID int(10) unsigned NOT NULL, + UserID int(10) unsigned NOT NULL, + FOREIGN KEY (VoteID) REFERENCES TU_VoteInfo(ID) ON DELETE CASCADE, + FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + +-- Malicious user banning +-- +CREATE TABLE Bans ( + IPAddress INTEGER UNSIGNED NOT NULL DEFAULT 0, + BanTS TIMESTAMP NOT NULL, + PRIMARY KEY (IPAddress) +) ENGINE = InnoDB; diff --git a/schema/gendummydata.py b/schema/gendummydata.py index a5c30170..9dd2f455 100755 --- a/schema/gendummydata.py +++ b/schema/gendummydata.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/python3 """ usage: gendummydata.py outputfilename.sql """ @@ -9,40 +9,37 @@ usage: gendummydata.py outputfilename.sql # package names. It generates the SQL statements to # insert these users/packages into the AUR database. # -import hashlib -import logging -import os import random -import sys import time -from datetime import UTC, datetime +import os +import sys +import io +import logging -import bcrypt - -LOG_LEVEL = logging.DEBUG # logging level. set to logging.INFO to reduce output +LOG_LEVEL = logging.DEBUG # logging level. set to logging.INFO to reduce output SEED_FILE = "/usr/share/dict/words" -USER_ID = 5 # Users.ID of first bogus user -PKG_ID = 1 # Packages.ID of first package -# how many users to 'register' -MAX_USERS = int(os.environ.get("MAX_USERS", 38000)) -MAX_DEVS = 0.1 # what percentage of MAX_USERS are Developers -MAX_PMS = 0.2 # what percentage of MAX_USERS are Package Maintainers -# how many packages to load -MAX_PKGS = int(os.environ.get("MAX_PKGS", 32000)) -PKG_DEPS = (1, 15) # min/max depends a package has -PKG_RELS = (1, 5) # min/max relations a package has -PKG_SRC = (1, 3) # min/max sources a package has -PKG_CMNTS = (1, 5) # min/max number of comments a package has +DB_HOST = os.getenv("DB_HOST", "localhost") +DB_NAME = os.getenv("DB_NAME", "AUR") +DB_USER = os.getenv("DB_USER", "aur") +DB_PASS = os.getenv("DB_PASS", "aur") +USER_ID = 5 # Users.ID of first bogus user +PKG_ID = 1 # Packages.ID of first package +MAX_USERS = 300 # how many users to 'register' +MAX_DEVS = .1 # what percentage of MAX_USERS are Developers +MAX_TUS = .2 # what percentage of MAX_USERS are Trusted Users +MAX_PKGS = 900 # how many packages to load +PKG_DEPS = (1, 15) # min/max depends a package has +PKG_RELS = (1, 5) # min/max relations a package has +PKG_SRC = (1, 3) # min/max sources a package has +PKG_CMNTS = (1, 5) # min/max number of comments a package has CATEGORIES_COUNT = 17 # the number of categories from aur-schema -VOTING = (0, 0.001) # percentage range for package voting -# number of open package maintainer proposals -OPEN_PROPOSALS = int(os.environ.get("OPEN_PROPOSALS", 15)) -# number of closed package maintainer proposals -CLOSE_PROPOSALS = int(os.environ.get("CLOSE_PROPOSALS", 50)) +VOTING = (0, .30) # percentage range for package voting +OPEN_PROPOSALS = 5 # number of open trusted user proposals +CLOSE_PROPOSALS = 15 # number of closed trusted user proposals RANDOM_TLDS = ("edu", "com", "org", "net", "tw", "ru", "pl", "de", "es") RANDOM_URL = ("http://www.", "ftp://ftp.", "http://", "ftp://") RANDOM_LOCS = ("pub", "release", "files", "downloads", "src") -FORTUNE_FILE = os.environ.get("FORTUNE_FILE", "/usr/share/fortune/cookie") +FORTUNE_FILE = "/usr/share/fortune/cookie" # setup logging logformat = "%(levelname)s: %(message)s" @@ -50,20 +47,20 @@ logging.basicConfig(format=logformat, level=LOG_LEVEL) log = logging.getLogger() if len(sys.argv) != 2: - log.error("Missing output filename argument") - raise SystemExit(1) + log.error("Missing output filename argument") + raise SystemExit # make sure the seed file exists # if not os.path.exists(SEED_FILE): - log.error("Please install the 'words' Arch package") - raise SystemExit(1) + log.error("Please install the 'words' Arch package") + raise SystemExit # make sure comments can be created # if not os.path.exists(FORTUNE_FILE): - log.error("Please install the 'fortune-mod' Arch package") - raise SystemExit(1) + log.error("Please install the 'fortune-mod' Arch package") + raise SystemExit # track what users/package names have been used # @@ -71,28 +68,21 @@ seen_users = {} seen_pkgs = {} user_keys = [] - # some functions to generate random data # def genVersion(): - ver = [] - ver.append("%d" % random.randrange(0, 10)) - ver.append("%d" % random.randrange(0, 20)) - if random.randrange(0, 2) == 0: - ver.append("%d" % random.randrange(0, 100)) - return ".".join(ver) + "-%d" % random.randrange(1, 11) - - + ver = [] + ver.append("%d" % random.randrange(0,10)) + ver.append("%d" % random.randrange(0,20)) + if random.randrange(0,2) == 0: + ver.append("%d" % random.randrange(0,100)) + return ".".join(ver) + "-%d" % random.randrange(1,11) def genCategory(): - return random.randrange(1, CATEGORIES_COUNT) - - + return random.randrange(1,CATEGORIES_COUNT) def genUID(): - return seen_users[user_keys[random.randrange(0, len(user_keys))]] - - + return seen_users[user_keys[random.randrange(0,len(user_keys))]] def genFortune(): - return fortunes[random.randrange(0, len(fortunes))].replace("'", "") + return fortunes[random.randrange(0,len(fortunes))].replace("'", "") # load the words, and make sure there are enough words for users/pkgs @@ -102,63 +92,54 @@ fp = open(SEED_FILE, "r", encoding="utf-8") contents = fp.readlines() fp.close() if MAX_USERS > len(contents): - MAX_USERS = len(contents) + MAX_USERS = len(contents) if MAX_PKGS > len(contents): - MAX_PKGS = len(contents) - -need_dupes = 0 -if not len(contents) - MAX_USERS > MAX_PKGS: - need_dupes = 1 - - -def normalize(unicode_data): - """We only accept ascii for usernames. Also use this to normalize - package names; our database utf8mb4 collations compare with Unicode - Equivalence.""" - return unicode_data.encode("ascii", "ignore").decode("ascii") - + MAX_PKGS = len(contents) +if len(contents) - MAX_USERS > MAX_PKGS: + need_dupes = 0 +else: + need_dupes = 1 # select random usernames # log.debug("Generating random user names...") user_id = USER_ID while len(seen_users) < MAX_USERS: - user = random.randrange(0, len(contents)) - word = contents[user].replace("'", "").replace(".", "").replace(" ", "_") - word = normalize(word.strip().lower()) - if word not in seen_users: - seen_users[word] = user_id - user_id += 1 + user = random.randrange(0, len(contents)) + word = contents[user].replace("'", "").replace(".","").replace(" ", "_") + word = word.strip().lower() + if word not in seen_users: + seen_users[word] = user_id + user_id += 1 user_keys = list(seen_users.keys()) - # select random package names # log.debug("Generating random package names...") num_pkgs = PKG_ID while len(seen_pkgs) < MAX_PKGS: - pkg = random.randrange(0, len(contents)) - word = contents[pkg].replace("'", "").replace(".", "").replace(" ", "_") - word = normalize(word.strip().lower()) - if not need_dupes: - if word not in seen_pkgs and word not in seen_users: - seen_pkgs[word] = num_pkgs - num_pkgs += 1 - else: - if word not in seen_pkgs: - seen_pkgs[word] = num_pkgs - num_pkgs += 1 + pkg = random.randrange(0, len(contents)) + word = contents[pkg].replace("'", "").replace(".","").replace(" ", "_") + word = word.strip().lower() + if not need_dupes: + if word not in seen_pkgs and word not in seen_users: + seen_pkgs[word] = num_pkgs + num_pkgs += 1 + else: + if word not in seen_pkgs: + seen_pkgs[word] = num_pkgs + num_pkgs += 1 # free up contents memory # contents = None -# developer/PM IDs +# developer/tu IDs # developers = [] -packagemaintainers = [] +trustedusers = [] has_devs = 0 -has_pms = 0 +has_tus = 0 # Just let python throw the errors if any happen # @@ -169,46 +150,34 @@ out.write("BEGIN;\n") # log.debug("Creating SQL statements for users.") for u in user_keys: - account_type = 1 # default to normal user - if not has_devs or not has_pms: - account_type = random.randrange(1, 4) - if account_type == 3 and not has_devs: - # this will be a dev account - # - developers.append(seen_users[u]) - if len(developers) >= MAX_DEVS * MAX_USERS: - has_devs = 1 - elif account_type == 2 and not has_pms: - # this will be a package maintainer account - # - packagemaintainers.append(seen_users[u]) - if len(packagemaintainers) >= MAX_PMS * MAX_USERS: - has_pms = 1 - else: - # a normal user account - # - pass + account_type = 1 # default to normal user + if not has_devs or not has_tus: + account_type = random.randrange(1, 4) + if account_type == 3 and not has_devs: + # this will be a dev account + # + developers.append(seen_users[u]) + if len(developers) >= MAX_DEVS * MAX_USERS: + has_devs = 1 + elif account_type == 2 and not has_tus: + # this will be a trusted user account + # + trustedusers.append(seen_users[u]) + if len(trustedusers) >= MAX_TUS * MAX_USERS: + has_tus = 1 + else: + # a normal user account + # + pass - # For dummy data, we just use 4 salt rounds. - salt = bcrypt.gensalt(rounds=4).decode() - - # "{salt}{username}" - to_hash = f"{salt}{u}" - - h = hashlib.new("md5") - h.update(to_hash.encode()) - s = ( - "INSERT INTO Users (ID, AccountTypeID, Username, Email, Passwd, Salt)" - " VALUES (%d, %d, '%s', '%s@example.com', '%s', '%s');\n" - ) - s = s % (seen_users[u], account_type, u, u, h.hexdigest(), salt) - out.write(s) + s = ("INSERT INTO Users (ID, AccountTypeID, Username, Email, Passwd)" + " VALUES (%d, %d, '%s', '%s@example.com', MD5('%s'));\n") + s = s % (seen_users[u], account_type, u, u, u) + out.write(s) log.debug("Number of developers: %d" % len(developers)) -log.debug("Number of package maintainers: %d" % len(packagemaintainers)) -log.debug( - "Number of users: %d" % (MAX_USERS - len(developers) - len(packagemaintainers)) -) +log.debug("Number of trusted users: %d" % len(trustedusers)) +log.debug("Number of users: %d" % (MAX_USERS-len(developers)-len(trustedusers))) log.debug("Number of packages: %d" % MAX_PKGS) log.debug("Gathering text from fortune file...") @@ -221,148 +190,123 @@ fp.close() log.debug("Creating SQL statements for packages.") count = 0 for p in list(seen_pkgs.keys()): - NOW = int(time.time()) - if count % 2 == 0: - muid = developers[random.randrange(0, len(developers))] - puid = developers[random.randrange(0, len(developers))] - else: - muid = packagemaintainers[random.randrange(0, len(packagemaintainers))] - puid = packagemaintainers[random.randrange(0, len(packagemaintainers))] - if count % 20 == 0: # every so often, there are orphans... - muid = "NULL" + NOW = int(time.time()) + if count % 2 == 0: + muid = developers[random.randrange(0,len(developers))] + puid = developers[random.randrange(0,len(developers))] + else: + muid = trustedusers[random.randrange(0,len(trustedusers))] + puid = trustedusers[random.randrange(0,len(trustedusers))] + if count % 20 == 0: # every so often, there are orphans... + muid = "NULL" - uuid = genUID() # the submitter/user + uuid = genUID() # the submitter/user - s = ( - "INSERT INTO PackageBases (ID, Name, FlaggerComment, SubmittedTS, ModifiedTS, " - "SubmitterUID, MaintainerUID, PackagerUID) VALUES " - "(%d, '%s', '', %d, %d, %d, %s, %s);\n" - ) - s = s % (seen_pkgs[p], p, NOW, NOW, uuid, muid, puid) - out.write(s) + s = ("INSERT INTO PackageBases (ID, Name, SubmittedTS, " + "SubmitterUID, MaintainerUID, PackagerUID) VALUES (%d, '%s', %d, %d, %s, %s);\n") + s = s % (seen_pkgs[p], p, NOW, uuid, muid, puid) + out.write(s) - s = ( - "INSERT INTO Packages (ID, PackageBaseID, Name, Version) VALUES " - "(%d, %d, '%s', '%s');\n" - ) - s = s % (seen_pkgs[p], seen_pkgs[p], p, genVersion()) - out.write(s) + s = ("INSERT INTO Packages (ID, PackageBaseID, Name, Version) VALUES " + "(%d, %d, '%s', '%s');\n") + s = s % (seen_pkgs[p], seen_pkgs[p], p, genVersion()) + out.write(s) - count += 1 + count += 1 - # create random comments for this package - # - num_comments = random.randrange(PKG_CMNTS[0], PKG_CMNTS[1]) - for i in range(0, num_comments): - now = NOW + random.randrange(400, 86400 * 3) - s = ( - "INSERT INTO PackageComments (PackageBaseID, UsersID," - " Comments, RenderedComment, CommentTS) VALUES (%d, %d, '%s', '', %d);\n" - ) - s = s % (seen_pkgs[p], genUID(), genFortune(), now) - out.write(s) + # create random comments for this package + # + num_comments = random.randrange(PKG_CMNTS[0], PKG_CMNTS[1]) + for i in range(0, num_comments): + now = NOW + random.randrange(400, 86400*3) + s = ("INSERT INTO PackageComments (PackageBaseID, UsersID," + " Comments, CommentTS) VALUES (%d, %d, '%s', %d);\n") + s = s % (seen_pkgs[p], genUID(), genFortune(), now) + out.write(s) # Cast votes -utcnow = int(datetime.now(UTC).timestamp()) - +# track_votes = {} log.debug("Casting votes for packages.") for u in user_keys: - num_votes = random.randrange( - int(len(seen_pkgs) * VOTING[0]), int(len(seen_pkgs) * VOTING[1]) - ) - pkgvote = {} - for v in range(num_votes): - pkg = random.randrange(1, len(seen_pkgs) + 1) - if pkg not in pkgvote: - s = ( - "INSERT INTO PackageVotes (UsersID, PackageBaseID, VoteTS)" - " VALUES (%d, %d, %d);\n" - ) - s = s % (seen_users[u], pkg, utcnow) - pkgvote[pkg] = 1 - if pkg not in track_votes: - track_votes[pkg] = 0 - track_votes[pkg] += 1 - out.write(s) + num_votes = random.randrange(int(len(seen_pkgs)*VOTING[0]), + int(len(seen_pkgs)*VOTING[1])) + pkgvote = {} + for v in range(num_votes): + pkg = random.randrange(1, len(seen_pkgs) + 1) + if pkg not in pkgvote: + s = ("INSERT INTO PackageVotes (UsersID, PackageBaseID)" + " VALUES (%d, %d);\n") + s = s % (seen_users[u], pkg) + pkgvote[pkg] = 1 + if pkg not in track_votes: + track_votes[pkg] = 0 + track_votes[pkg] += 1 + out.write(s) # Update statements for package votes # for p in list(track_votes.keys()): - s = "UPDATE PackageBases SET NumVotes = %d WHERE ID = %d;\n" - s = s % (track_votes[p], p) - out.write(s) + s = "UPDATE PackageBases SET NumVotes = %d WHERE ID = %d;\n" + s = s % (track_votes[p], p) + out.write(s) # Create package dependencies and sources # log.debug("Creating statements for package depends/sources.") -# the keys of seen_pkgs are accessed many times by random.choice, -# so the list has to be created outside the loops to keep it efficient -seen_pkgs_keys = list(seen_pkgs.keys()) -for p in seen_pkgs_keys: - num_deps = random.randrange(PKG_DEPS[0], PKG_DEPS[1]) - for i in range(0, num_deps): - dep = random.choice(seen_pkgs_keys) - deptype = random.randrange(1, 5) - if deptype == 4: - dep += ": for " + random.choice(seen_pkgs_keys) - s = ( - "INSERT INTO PackageDepends(PackageID, DepTypeID, DepName) " - "VALUES (%d, %d, '%s');\n" - ) - s = s % (seen_pkgs[p], deptype, dep) - out.write(s) +for p in list(seen_pkgs.keys()): + num_deps = random.randrange(PKG_DEPS[0], PKG_DEPS[1]) + for i in range(0, num_deps): + dep = random.choice([k for k in seen_pkgs]) + deptype = random.randrange(1, 5) + if deptype == 4: + dep += ": for " + random.choice([k for k in seen_pkgs]) + s = "INSERT INTO PackageDepends(PackageID, DepTypeID, DepName) VALUES (%d, %d, '%s');\n" + s = s % (seen_pkgs[p], deptype, dep) + out.write(s) - num_rels = random.randrange(PKG_RELS[0], PKG_RELS[1]) - for i in range(0, num_deps): - rel = random.choice(seen_pkgs_keys) - reltype = random.randrange(1, 4) - s = ( - "INSERT INTO PackageRelations(PackageID, RelTypeID, RelName) " - "VALUES (%d, %d, '%s');\n" - ) - s = s % (seen_pkgs[p], reltype, rel) - out.write(s) + num_rels = random.randrange(PKG_RELS[0], PKG_RELS[1]) + for i in range(0, num_deps): + rel = random.choice([k for k in seen_pkgs]) + reltype = random.randrange(1, 4) + s = "INSERT INTO PackageRelations(PackageID, RelTypeID, RelName) VALUES (%d, %d, '%s');\n" + s = s % (seen_pkgs[p], reltype, rel) + out.write(s) - num_sources = random.randrange(PKG_SRC[0], PKG_SRC[1]) - for i in range(num_sources): - src_file = user_keys[random.randrange(0, len(user_keys))] - src = "%s%s.%s/%s/%s-%s.tar.gz" % ( - RANDOM_URL[random.randrange(0, len(RANDOM_URL))], - p, - RANDOM_TLDS[random.randrange(0, len(RANDOM_TLDS))], - RANDOM_LOCS[random.randrange(0, len(RANDOM_LOCS))], - src_file, - genVersion(), - ) - s = "INSERT INTO PackageSources(PackageID, Source) VALUES (%d, '%s');\n" - s = s % (seen_pkgs[p], src) - out.write(s) + num_sources = random.randrange(PKG_SRC[0], PKG_SRC[1]) + for i in range(num_sources): + src_file = user_keys[random.randrange(0, len(user_keys))] + src = "%s%s.%s/%s/%s-%s.tar.gz" % ( + RANDOM_URL[random.randrange(0,len(RANDOM_URL))], + p, RANDOM_TLDS[random.randrange(0,len(RANDOM_TLDS))], + RANDOM_LOCS[random.randrange(0,len(RANDOM_LOCS))], + src_file, genVersion()) + s = "INSERT INTO PackageSources(PackageID, Source) VALUES (%d, '%s');\n" + s = s % (seen_pkgs[p], src) + out.write(s) -# Create package maintainer proposals +# Create trusted user proposals # -log.debug("Creating SQL statements for package maintainer proposals.") -count = 0 -for t in range(0, OPEN_PROPOSALS + CLOSE_PROPOSALS): - now = int(time.time()) - if count < CLOSE_PROPOSALS: - start = now - random.randrange(3600 * 24 * 7, 3600 * 24 * 21) - end = now - random.randrange(0, 3600 * 24 * 7) - else: - start = now - end = now + random.randrange(3600 * 24, 3600 * 24 * 7) - if count % 5 == 0: # Don't make the vote about anyone once in a while - user = "" - else: - user = user_keys[random.randrange(0, len(user_keys))] - suid = packagemaintainers[random.randrange(0, len(packagemaintainers))] - s = ( - "INSERT INTO VoteInfo (Agenda, User, Submitted, End," - " Quorum, SubmitterID) VALUES ('%s', '%s', %d, %d, 0.0, %d);\n" - ) - s = s % (genFortune(), user, start, end, suid) - out.write(s) - count += 1 +log.debug("Creating SQL statements for trusted user proposals.") +count=0 +for t in range(0, OPEN_PROPOSALS+CLOSE_PROPOSALS): + now = int(time.time()) + if count < CLOSE_PROPOSALS: + start = now - random.randrange(3600*24*7, 3600*24*21) + end = now - random.randrange(0, 3600*24*7) + else: + start = now + end = now + random.randrange(3600*24, 3600*24*7) + if count % 5 == 0: # Don't make the vote about anyone once in a while + user = "" + else: + user = user_keys[random.randrange(0,len(user_keys))] + suid = trustedusers[random.randrange(0,len(trustedusers))] + s = ("INSERT INTO TU_VoteInfo (Agenda, User, Submitted, End," + " SubmitterID) VALUES ('%s', '%s', %d, %d, %d);\n") + s = s % (genFortune(), user, start, end, suid) + out.write(s) + count += 1 # close output file # diff --git a/schema/reloadtestdb.sh b/schema/reloadtestdb.sh new file mode 100755 index 00000000..e839dcec --- /dev/null +++ b/schema/reloadtestdb.sh @@ -0,0 +1,29 @@ +#!/bin/bash -e + +DB_NAME=${DB_NAME:-AUR} +DB_USER=${DB_USER:-aur} +# Password should allow empty definition +DB_PASS=${DB_PASS-aur} +DB_HOST=${DB_HOST:-localhost} +DATA_FILE=${DATA_FILE:-dummy-data.sql} + +echo "Using database $DB_NAME, user $DB_USER, host $DB_HOST" + +mydir=$(pwd) +if [ $(basename $mydir) != "schema" ]; then + echo "you must be in the aurweb/schema directory to run this script" + exit 1 +fi + +echo "recreating database..." +mysql -h $DB_HOST -u $DB_USER -p$DB_PASS < aur-schema.sql + +if [ ! -f $DATA_FILE ]; then + echo "creating dumy-data..." + python3 gendummydata.py $DATA_FILE +fi + +echo "loading dummy-data..." +mysql -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME < $DATA_FILE + +echo "done." diff --git a/scripts/aurblup.py b/scripts/aurblup.py new file mode 100755 index 00000000..d6d0c3cd --- /dev/null +++ b/scripts/aurblup.py @@ -0,0 +1,48 @@ +#!/usr/bin/python3 + +import configparser +import mysql.connector +import os +import pyalpm + +config = configparser.RawConfigParser() +config.read(os.path.dirname(os.path.realpath(__file__)) + "/../conf/config") + +aur_db_host = config.get('database', 'host') +aur_db_name = config.get('database', 'name') +aur_db_user = config.get('database', 'user') +aur_db_pass = config.get('database', 'password') +aur_db_socket = config.get('database', 'socket') +db_path = config.get('aurblup', 'db-path') +sync_dbs = config.get('aurblup', 'sync-dbs').split(' ') +servers = config.get('aurblup', 'servers').split(' ') + +blacklist = set() + +h = pyalpm.Handle("/", db_path) +for sync_db in sync_dbs: + repo = h.register_syncdb(sync_db, pyalpm.SIG_DATABASE_OPTIONAL) + repo.servers = [server.replace("%s", sync_db) for server in servers] + t = h.init_transaction() + repo.update(False) + t.release() + + for pkg in repo.pkgcache: + blacklist.add(pkg.name) + [blacklist.add(x) for x in pkg.replaces] + +db = mysql.connector.connect(host=aur_db_host, user=aur_db_user, + passwd=aur_db_pass, db=aur_db_name, + unix_socket=aur_db_socket, buffered=True) +cur = db.cursor() + +cur.execute("SELECT Name FROM PackageBlacklist") +oldblacklist = set([row[0] for row in cur.fetchall()]) + +for pkg in blacklist.difference(oldblacklist): + cur.execute("INSERT INTO PackageBlacklist (Name) VALUES (%s)", [pkg]) +for pkg in oldblacklist.difference(blacklist): + cur.execute("DELETE FROM PackageBlacklist WHERE Name = %s", [pkg]) + +db.commit() +db.close() diff --git a/scripts/mkpkglists.py b/scripts/mkpkglists.py new file mode 100755 index 00000000..a6f8a197 --- /dev/null +++ b/scripts/mkpkglists.py @@ -0,0 +1,41 @@ +#!/usr/bin/python3 + +import configparser +import datetime +import gzip +import mysql.connector +import os + +docroot = os.path.dirname(os.path.realpath(__file__)) + "/../web/html/" + +config = configparser.RawConfigParser() +config.read(os.path.dirname(os.path.realpath(__file__)) + "/../conf/config") + +aur_db_host = config.get('database', 'host') +aur_db_name = config.get('database', 'name') +aur_db_user = config.get('database', 'user') +aur_db_pass = config.get('database', 'password') +aur_db_socket = config.get('database', 'socket') + +db = mysql.connector.connect(host=aur_db_host, user=aur_db_user, + passwd=aur_db_pass, db=aur_db_name, + unix_socket=aur_db_socket, buffered=True) +cur = db.cursor() + +datestr = datetime.datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S GMT") +pkglist_header = "# AUR package list, generated on " + datestr +pkgbaselist_header = "# AUR package base list, generated on " + datestr + +with gzip.open(docroot + "packages.gz", "w") as f: + f.write(bytes(pkglist_header + "\n", "UTF-8")) + cur.execute("SELECT Packages.Name FROM Packages INNER JOIN PackageBases " + + "ON PackageBases.ID = Packages.PackageBaseID " + + "WHERE PackageBases.PackagerUID IS NOT NULL") + f.writelines([bytes(x[0] + "\n", "UTF-8") for x in cur.fetchall()]) + +with gzip.open(docroot + "pkgbase.gz", "w") as f: + f.write(bytes(pkgbaselist_header + "\n", "UTF-8")) + cur.execute("SELECT Name FROM PackageBases WHERE PackagerUID IS NOT NULL") + f.writelines([bytes(x[0] + "\n", "UTF-8") for x in cur.fetchall()]) + +db.close() diff --git a/scripts/popupdate.py b/scripts/popupdate.py new file mode 100755 index 00000000..2aa8a546 --- /dev/null +++ b/scripts/popupdate.py @@ -0,0 +1,30 @@ +#!/usr/bin/python3 + +import configparser +import mysql.connector +import os + +config = configparser.RawConfigParser() +config.read(os.path.dirname(os.path.realpath(__file__)) + "/../conf/config") + +aur_db_host = config.get('database', 'host') +aur_db_name = config.get('database', 'name') +aur_db_user = config.get('database', 'user') +aur_db_pass = config.get('database', 'password') +aur_db_socket = config.get('database', 'socket') + +db = mysql.connector.connect(host=aur_db_host, user=aur_db_user, + passwd=aur_db_pass, db=aur_db_name, + unix_socket=aur_db_socket, buffered=True) +cur = db.cursor() + +cur.execute("UPDATE PackageBases SET NumVotes = (SELECT COUNT(*) FROM " + + "PackageVotes WHERE PackageVotes.PackageBaseID = PackageBases.ID)") + +cur.execute("UPDATE PackageBases SET Popularity = (" + + "SELECT SUM(POWER(0.98, (UNIX_TIMESTAMP() - VoteTS) / 86400)) " + + "FROM PackageVotes WHERE PackageVotes.PackageBaseID = " + + "PackageBases.ID AND NOT VoteTS IS NULL)") + +db.commit() +db.close() diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 41978dae..00000000 --- a/setup.cfg +++ /dev/null @@ -1,16 +0,0 @@ -[flake8] -max-line-length = 88 -max-complexity = 10 - -# Ignore some unavoidable flake8 warnings; we know this is against -# PEP8, but some of the existing codebase uses `I` variables, -# so specifically silence warnings about it in pre-defined files. -# -# In E741, the 'I', 'O', 'l' are ambiguous variable names. -# Our current implementation uses these variables through HTTP -# and the FastAPI form specification wants them named as such. -# -# With {W503,W504}, PEP8 does not want us to break lines before -# or after a binary operator. We have many scripts that already -# do this, so we're ignoring it here. -ignore = E203, E741, W503, W504 diff --git a/static/css/archnavbar/archlogo.png b/static/css/archnavbar/archlogo.png deleted file mode 100644 index 3d2cd40f..00000000 Binary files a/static/css/archnavbar/archlogo.png and /dev/null differ diff --git a/static/css/aurweb.css b/static/css/aurweb.css deleted file mode 100644 index 64a65742..00000000 --- a/static/css/aurweb.css +++ /dev/null @@ -1,292 +0,0 @@ -/* aurweb-specific customizations to archweb.css */ - -#archnavbar.anb-aur ul li#anb-aur a { - color: white !important; -} - -#archnavbarlogo { - background: url('archnavbar/aurlogo.png') !important; -} - -[dir="rtl"] #lang_sub { - float: left; - } -#lang_sub { - float: right; -} - -.pkglist-nav .page { - margin: 0 .25em; -} - -#pkg-stats td.stat-desc { - white-space: normal; -} - -#actionlist form { - margin: 0; - padding: 0; -} - -.arch-bio-entry ul { - list-style: none; - padding: 0; -} - -#pkg-updates table { - table-layout: fixed; - width:100%; -} - -#pkg-updates td.pkg-name { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -[dir="rtl"] #pkg-updates td.pkg-date { - text-align:left; -} -#pkg-updates td.pkg-date { - text-align:right; -} - -[dir="rtl"] .keyword:link, .keyword:visited { - float: right; -} - -.keyword:link, .keyword:visited { - float: left; - margin: 1px .5ex 1px 0; - padding: 0 1em; - color: white; - background-color: #36a; - border: 1px solid transparent; - border-radius: 2px; -} - -.keyword:hover { - cursor: pointer; -} - -.keyword:focus { - border: 1px dotted #000; -} - -.text-button { - background: transparent; - border: none !important; - margin: 0 !important; - padding: 0 !important; - font: normal 100% sans-serif; - text-decoration: none; - color: #07b; - cursor: pointer; -} - -.text-button:hover { - text-decoration: underline; - color: #666; -} - -.text-button::-moz-focus-inner { - padding: 0; - border: none; -} - -.comment-deleted { - color: #999; -} - -.edited { - font-size: 0.9em; - color: #999; -} - -[dir="rtl"] .delete-comment-form, .undelete-comment-form, .pin-comment-form, .edit-comment { - float: left; - margin-right: 8px; -} - -.delete-comment-form, .undelete-comment-form, .pin-comment-form, .edit-comment { - float: right; - margin-left: 8px; -} - -.edit-comment { - height: 11px; - position: relative; - top: 1px; -} - -.comment-enable-notifications { - display: inline-block; - margin-left: 1em; -} - -.rss-icon, .delete-comment, .undelete-comment, .edit-comment, .pin-comment { - filter: grayscale(100%); - opacity: 0.6; -} - -.rss-icon:hover, .delete-comment:hover, .undelete-comment:hover, .edit-comment:hover, .pin-comment:hover { - filter: none; - opacity: 1; -} - -[dir="rtl"] .ajax-loader { - float: left; -} - -.ajax-loader { - float: right; - position: relative; - top: 4px; -} - -.flagged a { - color: inherit; -} - -legend { - padding: 1em 0; -} - -p.important { - font-weight: bold; -} - -span.hover-help { - border-bottom: 1px dotted black; - cursor:help; -} - -label.confirmation { - width: auto; -} - -#pkgdepslist .broken { - color: red; - font-weight: bold; -} - -.package-comments { - margin-top: 1.5em; -} - -.comments-header { - display: flex; - justify-content: space-between; - align-items: flex-start; -} - -/* arrowed headings */ -.comments-header h3 span.text { - display: block; - background: #1794D1; - font-size: 15px; - padding: 2px 10px; - color: white; -} - -.comments-header .comments-header-nav { - align-self: flex-end; -} - -.comments-footer { - display: flex; - justify-content: flex-end; -} - -.comment-header { - clear: both; - font-size: 1em; - margin-top: 1.5em; - border-bottom: 1px dotted #bbb; -} - -.comments div { - margin-bottom: 1em; -} - -.comments div p { - margin-bottom: 0.5em; -} - -.comments .more { - font-weight: normal; -} - -.error { - color: red; -} - -.article-content > div { - overflow: hidden; - transition: height 1s; -} - -.proposal.details { - margin: .33em 0 1em; -} - -button[type="submit"], -button[type="reset"] { - padding: 0 0.6em; -} - -.results tr td[align="left"] fieldset { - text-align: left; -} - -.results tr td[align="right"] fieldset { - text-align: right; -} - -input#search-action-submit { - width: 80px; -} - -.success { - color: green; -} - -/* Styling used to clone styles for a form.link button. */ -form.link, form.link button { - display: inline; - font-family: sans-serif; -} -form.link button { - padding: 0 0.5em; - color: #07b; - background: none; - border: none; - font-family: inherit; - font-size: inherit; -} -form.link button:hover { - cursor: pointer; - text-decoration: underline; -} - -/* Customize form.link when used inside of a page. */ -div.box form.link p { - margin: .33em 0 1em; -} -div.box form.link button { - padding: 0; -} - -pre.traceback { - /* https://css-tricks.com/snippets/css/make-pre-text-wrap/ */ - white-space: pre-wrap; - word-wrap: break-all; -} - -/* By default, tables use 100% width, which we do not always want. */ -table.no-width { - width: auto; -} -table.no-width > tbody > tr > td { - padding-right: 2px; -} diff --git a/static/html/cgit/footer.html b/static/html/cgit/footer.html deleted file mode 100644 index b3e79568..00000000 --- a/static/html/cgit/footer.html +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/static/images/ICON-LICENSE b/static/images/ICON-LICENSE deleted file mode 100644 index 6b39f6fd..00000000 --- a/static/images/ICON-LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -The icons used in aurweb originate from the Open Iconic project and are -licensed under the following terms: - ----- -The MIT License (MIT) - -Copyright (c) 2014 Waybury - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. ----- diff --git a/static/images/action-undo.min.svg b/static/images/action-undo.min.svg deleted file mode 100644 index eb47bc47..00000000 --- a/static/images/action-undo.min.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/images/action-undo.svg b/static/images/action-undo.svg deleted file mode 100644 index b93ebb78..00000000 --- a/static/images/action-undo.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/static/images/ajax-loader.gif b/static/images/ajax-loader.gif deleted file mode 100644 index df07e7ec..00000000 Binary files a/static/images/ajax-loader.gif and /dev/null differ diff --git a/static/images/pencil.min.svg b/static/images/pencil.min.svg deleted file mode 100644 index 06125ae0..00000000 --- a/static/images/pencil.min.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/images/pencil.svg b/static/images/pencil.svg deleted file mode 100644 index 91f08991..00000000 --- a/static/images/pencil.svg +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - diff --git a/static/images/pin.min.svg b/static/images/pin.min.svg deleted file mode 100644 index ac08903d..00000000 --- a/static/images/pin.min.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/static/images/pin.svg b/static/images/pin.svg deleted file mode 100644 index b4ee9eb7..00000000 --- a/static/images/pin.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/images/rss.svg b/static/images/rss.svg deleted file mode 100644 index 3c7f6ba1..00000000 --- a/static/images/rss.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/images/unpin.min.svg b/static/images/unpin.min.svg deleted file mode 100644 index 3cf2413c..00000000 --- a/static/images/unpin.min.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/static/images/unpin.svg b/static/images/unpin.svg deleted file mode 100644 index de897152..00000000 --- a/static/images/unpin.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/static/images/x.min.svg b/static/images/x.min.svg deleted file mode 100644 index 833d4f22..00000000 --- a/static/images/x.min.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/images/x.svg b/static/images/x.svg deleted file mode 100644 index e323fe19..00000000 --- a/static/images/x.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/static/js/comment-edit.js b/static/js/comment-edit.js deleted file mode 100644 index 23ffdd34..00000000 --- a/static/js/comment-edit.js +++ /dev/null @@ -1,61 +0,0 @@ -function add_busy_indicator(sibling) { - const img = document.createElement('img'); - img.src = "/static/images/ajax-loader.gif"; - img.classList.add('ajax-loader'); - img.style.height = 11; - img.style.width = 16; - img.alt = "Busy…"; - - sibling.insertAdjacentElement('afterend', img); -} - -function remove_busy_indicator(sibling) { - const elem = sibling.nextElementSibling; - elem.parentNode.removeChild(elem); -} - -function getParentsUntil(elem, className) { - // Limit to 10 depth - for ( ; elem && elem !== document; elem = elem.parentNode) { - if (elem.matches(className)) { - break; - } - } - - return elem; -} - -function handleEditCommentClick(event, pkgbasename) { - event.preventDefault(); - const parent_element = getParentsUntil(event.target, '.comment-header'); - const parent_id = parent_element.id; - const comment_id = parent_id.substr(parent_id.indexOf('-') + 1); - // The div class="article-content" which contains the comment - const edit_form = parent_element.nextElementSibling; - - const url = "/pkgbase/" + pkgbasename + "/comments/" + comment_id + "/form?"; - - add_busy_indicator(event.target); - - fetch(url + new URLSearchParams({ next: window.location.pathname }), { - method: 'GET', - credentials: 'same-origin' - }) - .then(function(response) { - if (!response.ok) { - throw Error(response.statusText); - } - return response.json(); - }) - .then(function(data) { - remove_busy_indicator(event.target); - edit_form.innerHTML = data.form; - edit_form.querySelector('textarea').focus(); - }) - .catch(function(error) { - remove_busy_indicator(event.target); - console.error(error); - }); - - return false; -} diff --git a/static/js/copy.js b/static/js/copy.js deleted file mode 100644 index 3b659270..00000000 --- a/static/js/copy.js +++ /dev/null @@ -1,9 +0,0 @@ -document.addEventListener('DOMContentLoaded', function() { - let elements = document.querySelectorAll('.copy'); - elements.forEach(function(el) { - el.addEventListener('click', function(e) { - e.preventDefault(); - navigator.clipboard.writeText(e.target.text); - }); - }); -}); diff --git a/static/js/typeahead-home.js b/static/js/typeahead-home.js deleted file mode 100644 index 5af51c53..00000000 --- a/static/js/typeahead-home.js +++ /dev/null @@ -1,6 +0,0 @@ -document.addEventListener('DOMContentLoaded', function() { - const input = document.getElementById('pkgsearch-field'); - const form = document.getElementById('pkgsearch-form'); - const type = 'suggest'; - typeahead.init(type, input, form); -}); diff --git a/static/js/typeahead-pkgbase-merge.js b/static/js/typeahead-pkgbase-merge.js deleted file mode 100644 index a8c87e4f..00000000 --- a/static/js/typeahead-pkgbase-merge.js +++ /dev/null @@ -1,6 +0,0 @@ -document.addEventListener('DOMContentLoaded', function() { - const input = document.getElementById('merge_into'); - const form = document.getElementById('merge-form'); - const type = "suggest-pkgbase"; - typeahead.init(type, input, form, false); -}); diff --git a/static/js/typeahead-pkgbase-request.js b/static/js/typeahead-pkgbase-request.js deleted file mode 100644 index e012d55f..00000000 --- a/static/js/typeahead-pkgbase-request.js +++ /dev/null @@ -1,36 +0,0 @@ -function showHideMergeSection() { - const elem = document.getElementById('id_type'); - const merge_section = document.getElementById('merge_section'); - if (elem.value == 'merge') { - merge_section.style.display = ''; - } else { - merge_section.style.display = 'none'; - } -} - -function showHideRequestHints() { - document.getElementById('deletion_hint').style.display = 'none'; - document.getElementById('merge_hint').style.display = 'none'; - document.getElementById('orphan_hint').style.display = 'none'; - - const elem = document.getElementById('id_type'); - document.getElementById(elem.value + '_hint').style.display = ''; -} - -document.addEventListener('DOMContentLoaded', function() { - showHideMergeSection(); - showHideRequestHints(); - - const input = document.getElementById('id_merge_into'); - const form = document.getElementById('request-form'); - const type = "suggest-pkgbase"; - - typeahead.init(type, input, form, false); -}); - -// Bind the change event here, otherwise we have to inline javascript, -// which angers CSP (Content Security Policy). -document.getElementById("id_type").addEventListener("change", function() { - showHideMergeSection(); - showHideRequestHints(); -}); diff --git a/static/js/typeahead-requests.js b/static/js/typeahead-requests.js deleted file mode 100644 index 9f636eab..00000000 --- a/static/js/typeahead-requests.js +++ /dev/null @@ -1,6 +0,0 @@ -document.addEventListener('DOMContentLoaded', function() { - const input = document.getElementById('id_filter_pkg_name'); - const form = document.getElementById('todolist_filter'); - const type = 'suggest-pkgbase'; - typeahead.init(type, input, form); -}); diff --git a/static/js/typeahead.js b/static/js/typeahead.js deleted file mode 100644 index bfd3d156..00000000 --- a/static/js/typeahead.js +++ /dev/null @@ -1,151 +0,0 @@ -"use strict"; - -const typeahead = (function() { - var input; - var form; - var suggest_type; - var list; - var submit = true; - - function resetResults() { - if (!list) return; - list.style.display = "none"; - list.innerHTML = ""; - } - - function getCompleteList() { - if (!list) { - list = document.createElement("UL"); - list.setAttribute("class", "pkgsearch-typeahead"); - form.appendChild(list); - setListLocation(); - } - return list; - } - - function onListClick(e) { - let target = e.target; - while (!target.getAttribute('data-value')) { - target = target.parentNode; - } - input.value = target.getAttribute('data-value'); - if (submit) { - form.submit(); - } - } - - function setListLocation() { - if (!list) return; - const rects = input.getClientRects()[0]; - list.style.top = (rects.top + rects.height) + "px"; - list.style.left = rects.left + "px"; - } - - function loadData(letter, data) { - const pkgs = data.slice(0, 10); // Show maximum of 10 results - - resetResults(); - - if (pkgs.length === 0) { - return; - } - - const ul = getCompleteList(); - ul.style.display = "block"; - const fragment = document.createDocumentFragment(); - - for (let i = 0; i < pkgs.length; i++) { - const item = document.createElement("li"); - const text = pkgs[i].replace(letter, '' + letter + ''); - item.innerHTML = '' + text + ''; - item.setAttribute('data-value', pkgs[i]); - fragment.appendChild(item); - } - - ul.appendChild(fragment); - ul.addEventListener('click', onListClick); - } - - function fetchData(letter) { - const url = '/rpc?v=5&type=' + suggest_type + '&arg=' + letter; - fetch(url).then(function(response) { - return response.json(); - }).then(function(data) { - loadData(letter, data); - }); - } - - function onInputClick() { - if (input.value === "") { - resetResults(); - return; - } - fetchData(input.value); - } - - function onKeyDown(e) { - if (!list) return; - - const elem = document.querySelector(".pkgsearch-typeahead li.active"); - switch(e.keyCode) { - case 13: // enter - if (!submit) { - return; - } - if (elem) { - input.value = elem.getAttribute('data-value'); - form.submit(); - } else { - form.submit(); - } - e.preventDefault(); - break; - case 38: // up - if (elem && elem.previousElementSibling) { - elem.className = ""; - elem.previousElementSibling.className = "active"; - } - e.preventDefault(); - break; - case 40: // down - if (elem && elem.nextElementSibling) { - elem.className = ""; - elem.nextElementSibling.className = "active"; - } else if (!elem && list.childElementCount !== 0) { - list.children[0].className = "active"; - } - e.preventDefault(); - break; - } - } - - // debounce https://davidwalsh.name/javascript-debounce-function - function debounce(func, wait, immediate) { - var timeout; - return function() { - var context = this, args = arguments; - var later = function() { - timeout = null; - if (!immediate) func.apply(context, args); - }; - var callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) func.apply(context, args); - }; - } - - return { - init: function(type, inputfield, formfield, submitdata = true) { - suggest_type = type; - input = inputfield; - form = formfield; - submit = submitdata; - - input.addEventListener("input", onInputClick); - input.addEventListener("keydown", onKeyDown); - window.addEventListener('resize', debounce(setListLocation, 150)); - document.addEventListener("click", resetResults); - } - } -}()); diff --git a/templates/account/comments.html b/templates/account/comments.html deleted file mode 100644 index 8dff53e4..00000000 --- a/templates/account/comments.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{{ "Accounts" | tr }}

- -
-
-

- {{ - "Comments for %s%s%s" | tr - | format('' | format(username), - username, - "") - | safe - }} -

-
- - - - - {% for comment in comments %} - {% include "partials/account/comment.html" %} - {% endfor %} - -
- -
- -{% endblock %} diff --git a/templates/account/delete.html b/templates/account/delete.html deleted file mode 100644 index 625d3c2d..00000000 --- a/templates/account/delete.html +++ /dev/null @@ -1,43 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{{ "Accounts" | tr }}

- - {% include "partials/error.html" %} - -

- {{ - "You can use this form to permanently delete the AUR account %s%s%s." - | tr | format("", name, "") | safe - }} -

- -

- {{ - "%sWARNING%s: This action cannot be undone." - | tr | format("", "") | safe - }} -

- - -
-
-

- - -

-

- -

-

- -

-
-
- -
-{% endblock %} diff --git a/templates/account/edit.html b/templates/account/edit.html deleted file mode 100644 index f8895d92..00000000 --- a/templates/account/edit.html +++ /dev/null @@ -1,46 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{% trans %}Accounts{% endtrans %}

- - {% if complete %} - - {{ - "The account, %s%s%s, has been successfully modified." - | tr - | format("", user.Username, "") - | safe - }} - - {% else %} - {% if errors %} - {% include "partials/error.html" %} - {% else %} -

- {{ "Click %shere%s if you want to permanently delete this account." - | tr - | format('' | format(user | account_url), - "") - | safe - }} - {{ "Click %shere%s for user details." - | tr - | format('' | format(user | account_url), - "") - | safe - }} - {{ "Click %shere%s to list the comments made by this account." - | tr - | format('' | format(user | account_url), - "") - | safe - }} -

- {% endif %} - - {% set form_type = "UpdateAccount" %} - {% include "partials/account_form.html" %} - {% endif %} -
-{% endblock %} diff --git a/templates/account/index.html b/templates/account/index.html deleted file mode 100644 index 32b2ca16..00000000 --- a/templates/account/index.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{{ "Accounts" | tr }}

- - {% if not users %} - {{ "No results matched your search criteria." | tr }} - {% else %} - {% include "partials/account/results.html" %} - {% endif %} -
-{% endblock %} diff --git a/templates/account/search.html b/templates/account/search.html deleted file mode 100644 index 325ef0ba..00000000 --- a/templates/account/search.html +++ /dev/null @@ -1,69 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{{ "Accounts" | tr }}

- {{ "Use this form to search existing accounts." | tr }} -
-
- -
-{% endblock %} diff --git a/templates/account/show.html b/templates/account/show.html deleted file mode 100644 index a57efb77..00000000 --- a/templates/account/show.html +++ /dev/null @@ -1,123 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{% trans %}Accounts{% endtrans %}

- - {% if not request.user.is_authenticated() %} - {% trans %}You must log in to view user information.{% endtrans %} - {% else %} - - - - - - -
-

{{ user.Username }}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {% if not user.InactivityTS %} - - {% else %} - {% set inactive_ds = user.InactivityTS | dt | as_timezone(timezone) %} - - {% endif %} - - {% if user.RegistrationTS %} - - - - - {% endif %} - {% if login_ts %} - - - - - {% endif %} - - - - - -
{% trans %}Username{% endtrans %}:{{ user.Username }}
{% trans %}Account Type{% endtrans %}:{{ user.AccountType }}
{% trans %}Email Address{% endtrans %}: - {% if not user.HideEmail %} - {{ user.Email }} - {% else %} - <{% trans %}hidden{% endtrans %}> - {% endif %} -
{% trans %}Real Name{% endtrans %}:{{ user.RealName }}
{% trans %}Homepage{% endtrans %}: - {% if user.Homepage %} - {{ user.Homepage }} - {% endif %} -
{% trans %}IRC Nick{% endtrans %}:{{ user.IRCNick }}
{% trans %}PGP Key Fingerprint{% endtrans %}:{{ pgp_key }}
{% trans %}Status{% endtrans %}:{{ "Active" | tr }} - {{ - "Inactive since %s" | tr - | format(datetime_display(inactive_ds)) - }} -
{% trans %}Registration date{% endtrans %}: - {{ date_display(user.RegistrationTS) }} -
{% trans %}Last Login{% endtrans %}:{{ date_display(login_ts) }}
{% trans %}Links{% endtrans %}: -
    -
  • - {{ "%sView this user's packages%s" - | tr - | format('' | format(user.Username), "") - | safe - }} -
  • - {% if request.user.can_edit_user(user) %} -
  • - {{ "%sEdit this user's account%s" - | tr - | format('' | format(user.Username), "") - | safe - }} -
  • - {% endif %} - {% if request.user.has_credential(creds.ACCOUNT_LIST_COMMENTS, approved=[user]) %} -
  • - {{ "%sList this user's comments%s" - | tr - | format('' | format(user.Username), "") - | safe - }} -
  • - {% endif %} -
-
-
- {% endif %} -
-{% endblock %} diff --git a/templates/addvote.html b/templates/addvote.html deleted file mode 100644 index cc12f42b..00000000 --- a/templates/addvote.html +++ /dev/null @@ -1,67 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} - {% if error %} -

{{ error | e }}

- {% endif %} - -
-

{{ "Submit a proposal to vote on." | tr }}

- -
- -

- - - {{ "(empty if not applicable)" | tr }} -

-

- - -

- -

-
- -
- -

- -
-
-{% endblock %} diff --git a/templates/dashboard.html b/templates/dashboard.html deleted file mode 100644 index e88fde4a..00000000 --- a/templates/dashboard.html +++ /dev/null @@ -1,70 +0,0 @@ -
-

{{ "Dashboard" | tr }}

- -

{{ "My Flagged Packages" | tr }}

- {% if not flagged_packages %} -

{{ "No packages matched your search criteria." | tr }}

- {% else %} - {% with table_id = "flagged-packages", - packages = flagged_packages, - votes = flagged_packages_voted, - notified = flagged_packages_notified - %} - {% include 'partials/packages/results.html' %} - {% endwith %} - {% endif %} - -

{{ "My Requests" | tr }}

- {% if not package_requests %} -

{{ "No requests matched your search criteria." | tr }}

- {% else %} - {% with requests = package_requests %} - {% include 'partials/packages/requests.html' %} - {% endwith %} - {% endif %} -
- -
-

{{ "My Packages" | tr }}

-

- - {{ "Search for packages I maintain" | tr }} - -

- {% if not packages %} -

{{ "No packages matched your search criteria." | tr }}

- {% else %} - {% with table_id = "my-packages", - votes = packages_voted, - notified = packages_notified - %} - {% include 'partials/packages/results.html' %} - {% endwith %} - {% endif %} -
- -
-

{{ "Co-Maintained Packages" | tr }}

-

- - {{ "Search for packages I co-maintain" | tr }} - -

- {% if not comaintained %} -

{{ "No packages matched your search criteria." | tr }}

- {% else %} - {% with table_id = "comaintained-packages", - packages = comaintained, - votes = comaintained_voted, - notified = comaintained_notified - %} - {% include 'partials/packages/results.html' %} - {% endwith %} - {% endif %} -
-
- {% include 'partials/support.html' %} -
- - - diff --git a/templates/errors/404.html b/templates/errors/404.html deleted file mode 100644 index d232c656..00000000 --- a/templates/errors/404.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends 'partials/layout.html' %} - -{% block pageContent %} -
-

404 - {% trans %}Page Not Found{% endtrans %}

-

{% trans %}Sorry, the page you've requested does not exist.{% endtrans %}

- {% if pkgbase %} -
    - {% set pkgname_strong="%s" | format(pkgbase.Name) %} -
  • - {% trans %}Note{% endtrans %}: - {% trans %}Git clone URLs are not meant to be opened in a browser.{% endtrans %} -
  • -
  • - {% set gitcmd="git clone %s" | format(git_clone_uri_anon | format(pkgbase.Name)) %} - {% if is_maintainer %} - {% set gitcmd="git clone %s" | format(git_clone_uri_priv | format(pkgbase.Name)) %} - {% endif %} - {{ - "To clone the Git repository of %s, run %s." - | tr | format(pkgname_strong, gitcmd) | safe - }} -
  • -
  • - {% set pkglink='' | format(pkgbase.Name) %} - {{ - "Click %shere%s to return to the %s details page." - | tr | format(pkglink, "", pkgname_strong) | safe - }} -
  • -
- {% endif %} -
-{% endblock %} diff --git a/templates/errors/500.html b/templates/errors/500.html deleted file mode 100644 index 1a9bfa6b..00000000 --- a/templates/errors/500.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

500 - {{ "Internal Server Error" | tr }}

- -

- {{ "A fatal error has occurred." | tr }} - {{ - "Details have been logged and will be reviewed by the " - "postmaster posthaste. We apologize for any inconvenience " - "this may have caused." | tr - }} -

- - {% if config.getboolean("options", "traceback") %} -
{{ traceback }}
- {% endif %} -
-{% endblock %} diff --git a/templates/errors/503.html b/templates/errors/503.html deleted file mode 100644 index 08f737bf..00000000 --- a/templates/errors/503.html +++ /dev/null @@ -1,8 +0,0 @@ -{% extends 'partials/layout.html' %} - -{% block pageContent %} -
-

503 - {% trans %}Service Unavailable{% endtrans %}

-

{% trans %}Don't panic! This site is down due to maintenance. We will be back soon.{% endtrans %}

-
-{% endblock %} diff --git a/templates/errors/detail.html b/templates/errors/detail.html deleted file mode 100644 index f382a9bb..00000000 --- a/templates/errors/detail.html +++ /dev/null @@ -1,8 +0,0 @@ -{% extends 'partials/layout.html' %} - -{% block pageContent %} -
-

{{ "%d" | format(exc.status_code) }} - {{ phrase }}

-

{{ exc.detail }}

-
-{% endblock %} diff --git a/templates/home.html b/templates/home.html deleted file mode 100644 index 7035a230..00000000 --- a/templates/home.html +++ /dev/null @@ -1,37 +0,0 @@ -
-

AUR {% trans %}Home{% endtrans %}

-

- {{ "Welcome to the AUR! Please read the %sAUR User Guidelines%s for more information and the %sAUR Submission Guidelines%s if you want to contribute a PKGBUILD." - | tr - | format('', "", - '', "") - | safe - }} - {{ "Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s otherwise they will be deleted!" - | tr - | format("", "", - '', - "") - | safe - }} - {% trans %}Remember to vote for your favourite packages!{% endtrans %} - {% trans %}Some packages may be provided as binaries in [extra].{% endtrans %} -

-

- {% trans %}DISCLAIMER{% endtrans %}: - {% trans %}AUR packages are user produced content. Any use of the provided files is at your own risk.{% endtrans %} -

-

{% trans %}Learn more...{% endtrans %}

-
-
- {% include 'partials/support.html' %} -
- - - - - - diff --git a/templates/index.html b/templates/index.html deleted file mode 100644 index 8b7ad7c2..00000000 --- a/templates/index.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends 'partials/layout.html' %} - -{% block pageContent %} -
-
- {% if request.user.is_authenticated() %} - {% include 'dashboard.html' %} - {% else %} - {% include 'home.html' %} - {% endif %} -
-
-
- {% include 'partials/packages/search_widget.html' %} - {% include 'partials/packages/updates.html' %} - {% include 'partials/packages/statistics.html' %} -
- -{% endblock %} diff --git a/templates/login.html b/templates/login.html deleted file mode 100644 index c62de43e..00000000 --- a/templates/login.html +++ /dev/null @@ -1,100 +0,0 @@ -{% extends 'partials/layout.html' %} - -{% block pageContent %} - -
-

AUR {% trans %}Login{% endtrans %}

- - {% if request.user.is_authenticated() %} - - {% else %} - {% if request.url.scheme == "http" and config.getboolean("options", "disable_http_login") %} - {% set https_login = url_base.replace("http://", "https://") + "/login" %} -

- {{ "HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login." - | tr - | format( - '' | format(https_login), - "") - | safe - }} -

- {% elif request.user.is_authenticated() %} -

- {{ "Logged-in as: %s" - | tr - | format("%s" | format(request.user.Username)) - | safe - }} - [{% trans %}Logout{% endtrans %}] -

- {% else %} -
-
- {% trans %}Enter login credentials{% endtrans %} - - {% if errors %} -
    - {% for error in errors %} -
  • {{ error }}
  • - {% endfor %} -
- {% endif %} - -

- - - -

- -

- - -

- -

- - -

- -

- - - [{% trans %}Forgot Password{% endtrans %}] - - - -

- -
-
- {% endif %} - {% endif %} -
- -{% endblock %} diff --git a/templates/package-maintainer/index.html b/templates/package-maintainer/index.html deleted file mode 100644 index edb32ca6..00000000 --- a/templates/package-maintainer/index.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{{ "Statistics" | tr }}

- - - - - - - - - - - -
{{ "Total" | tr }} {{ "Package Maintainers" | tr }}:{{ package_maintainer_count }}
{{ "Active" | tr }} {{ "Package Maintainers" | tr }}:{{ active_package_maintainer_count }}
-
- - {% - with table_class = "current-votes", - total_votes = current_votes_count, - results = current_votes, - off_param = "coff", - by_param = "cby", - by_next = current_by_next, - title = "Current Votes", - off = current_off, - by = current_by - %} - {% include "partials/package-maintainer/proposals.html" %} - {% endwith %} - - {% - with table_class = "past-votes", - total_votes = past_votes_count, - results = past_votes, - off_param = "poff", - by_param = "pby", - by_next = past_by_next, - title = "Past Votes", - off = past_off, - by = past_by - %} - {% include "partials/package-maintainer/proposals.html" %} - {% endwith %} - - {% with title = "Last Votes by Package Maintainer", votes = last_votes_by_pm %} - {% include "partials/package-maintainer/last_votes.html" %} - {% endwith %} -{% endblock %} diff --git a/templates/package-maintainer/show.html b/templates/package-maintainer/show.html deleted file mode 100644 index e6f24b5b..00000000 --- a/templates/package-maintainer/show.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
- {% include "partials/package-maintainer/proposal/details.html" %} -
- - {% if utcnow >= voteinfo.End %} -
- {% include "partials/package-maintainer/proposal/voters.html" %} -
- {% endif %} - -
- {% if error %} - {{ error | tr }} - {% else %} - {% include "partials/package-maintainer/proposal/form.html" %} - {% endif %} -
-{% endblock %} diff --git a/templates/packages/index.html b/templates/packages/index.html deleted file mode 100644 index 58ce8648..00000000 --- a/templates/packages/index.html +++ /dev/null @@ -1,98 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} - {% if errors %} - -
    - {% for error in errors %} -
  • {{ error | tr }}
  • - {% endfor %} -
- {% include "partials/packages/search.html" %} - - {% elif not packages_count %} - - {% include "partials/packages/search.html" %} -
-

{{ "No packages matched your search criteria." | tr }}

-
- - {% if success %} -
    - {% for message in success %} -
  • {{ message | tr }}
  • - {% endfor %} -
- {% endif %} - - {% else %} - - {% set pages = (packages_count / PP) | ceil %} - {% set page = O / PP %} - - {% if success %} -
    - {% for message in success %} -
  • {{ message | tr }}
  • - {% endfor %} -
- {% endif %} - - {# Search form #} - {% include "partials/packages/search.html" %} -
- - {# /packages does things a bit roundabout-wise: - - If SeB is not given, "nd" is the default. - If SB is not given, "p" is the default. - If SO is not given, "d" is the default. - - However, we depend on flipping SO for column sorting. - - This section sets those defaults for the context if - they are not already setup. #} - {% if not SeB %} - {% set SeB = "nd" %} - {% endif %} - {% if not SB %} - {% set SB = "p" %} - {% endif %} - {% if not SO %} - {% set SO = "d" %} - {% endif %} - - {# Pagination widget #} - {% with total = packages_count, - singular = "%d package found.", - plural = "%d packages found.", - prefix = "/packages" %} - {% include "partials/pager.html" %} - {% endwith %} - - {# Package action form: persists query parameters. #} -
- {# Search results #} - {% with voted = packages_voted, notified = packages_notified %} - {% include "partials/packages/search_results.html" %} - {% endwith %} - - {# Pagination widget #} - {% with total = packages_count, - singular = "%d package found.", - plural = "%d packages found.", - prefix = "/packages" %} - {% include "partials/pager.html" %} - {% endwith %} - - {% if request.user.is_authenticated() %} - {# Package actions #} - {% include "partials/packages/search_actions.html" %} - {% endif %} -
-
- - {% endif %} -{% endblock %} diff --git a/templates/packages/show.html b/templates/packages/show.html deleted file mode 100644 index 25083020..00000000 --- a/templates/packages/show.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} - {% include "partials/packages/search.html" %} -
-

{{ 'Package Details' | tr }}: {{ package.Name }} {{ package.Version }}

- - {% include "partials/packages/actions.html" %} - - {% set show_package_details = True %} - {% include "partials/packages/details.html" %} - -
- {% include "partials/packages/package_metadata.html" %} -
-
- - - - - {% set pkgname = package.Name %} - {% set pkgbase_id = pkgbase.ID %} - {% include "partials/packages/comments.html" %} -{% endblock %} diff --git a/templates/partials/account/comment.html b/templates/partials/account/comment.html deleted file mode 100644 index 41c9ac08..00000000 --- a/templates/partials/account/comment.html +++ /dev/null @@ -1,41 +0,0 @@ -{% set header_cls = "comment-header" %} -{% if comment.Deleter %} - {% set header_cls = "%s %s" | format(header_cls, "comment-deleted") %} -{% endif %} - -{% if not comment.Deleter or request.user.has_credential(creds.COMMENT_VIEW_DELETED, approved=[comment.Deleter]) %} -{% if not (request.user.HideDeletedComments and comment.DelTS) %} - {% set commented_at = comment.CommentTS | dt | as_timezone(timezone) %} -

- {{ - "Commented on package %s%s%s on %s%s%s" | tr - | format( - '' | format(comment.PackageBase.Name), - comment.PackageBase.Name, - "", - '' | format( - username, - comment.ID - ), - datetime_display(comment.CommentTS), - "" - ) | safe - }} - {% if comment.Editor %} - {% set edited_on = comment.EditedTS | dt | as_timezone(timezone) %} - - ({{ "edited on %s by %s" | tr - | format(datetime_display(comment.EditedTS), - '%s' | format( - comment.Editor.Username, comment.Editor.Username)) - | safe - }}) - - {% endif %} - - {% include "partials/comment_actions.html" %} -

- - {% include "partials/comment_content.html" %} -{% endif %} -{% endif %} diff --git a/templates/partials/account/results.html b/templates/partials/account/results.html deleted file mode 100644 index ef8d927a..00000000 --- a/templates/partials/account/results.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - {% for user in users %} - - - - - - - - - - {% endfor %} - - -
{{ "Username" | tr }}{{ "Type" | tr }}{{ "Status" | tr }}{{ "Real Name" | tr }}{{ "IRC Nick" | tr }}{{ "PGP Key Fingerprint" | tr }}{{ "Edit Account" | tr }}
- - {{ user.Username }} - - {{ user.AccountType.AccountType }}{{ "Suspended" if user.Suspended else "Active" }}{{ user.RealName | e }}{{ user.IRCNick | e }}{{ user.PGPKey or '' | e }} - {% if request.user.can_edit_user(user) %} - - {{ "Edit" | tr }} - - {% endif %} -
- - - - - - -
-
-
- - {% for k, v in params.items() %} - - {% endfor %} - -
-
-
-
-
- - {% for k, v in params.items() %} - - {% endfor %} - - -
-
-
diff --git a/templates/partials/account_form.html b/templates/partials/account_form.html deleted file mode 100644 index 7595dcaf..00000000 --- a/templates/partials/account_form.html +++ /dev/null @@ -1,382 +0,0 @@ - -
-
- -
-
- -

- - - - ({% trans %}required{% endtrans %}) -

-

- {{ "Your user name is the name you will use to login. " - "It is visible to the general public, even if your " - "account is inactive." | tr }} -

- - {% if request.user.has_credential(creds.ACCOUNT_CHANGE_TYPE) %} -

- - -

-

- - - -

- {% endif %} - - {% if request.user.has_credential(creds.ACCOUNT_EDIT, approved=[user]) %} -

- - -

- {% endif %} - - -

- - - - ({% trans %}required{% endtrans %}) -

-

- {{ "Please ensure you correctly entered your email " - "address, otherwise you will be locked out." | tr }} -

- - -

- - - -

-

- {{ "If you do not hide your email address, it is " - "visible to all registered AUR users. If you hide your " - "email address, it is visible to members of the Arch " - "Linux staff only." | tr }}
- {{ "Note that if you hide your email address, it'll " - "end up on the BCC list for any request notifications. " - "In case someone replies to these notifications, you won't " - "receive an email. However, replies are typically sent to the " - "mailing-list and would then be visible in the archive." | tr }} -

- - -

- - - -

-

- - {{ "Optionally provide a secondary email address that " - "can be used to restore your account in case you lose " - "access to your primary email address." | tr }} - {{ "Password reset links are always sent to both your " - "primary and your backup email address." | tr }} - {{ "Your backup email address is always only visible to " - "members of the Arch Linux staff, independent of the %s " - "setting." | tr - | format("%s" | format("Hide Email Address" | tr)) - | safe }} - -

- - -

- - - -

- - -

- - - -

- - -

- - - -

- - -

- - - -

- - -

- - - -

- - -

- - - -

- - -

- - - -

- -
- - {% if form_type == "UpdateAccount" %} -
- - {{ - "If you want to change the password, enter a new password " - "and confirm the new password by entering it again." | tr - }} - -

- - -

- -

- - - -

-
- {% endif %} - -
- - {{ - "The following information is only required if you " - "want to submit packages to the Arch User Repository." | tr - }} - -

- - - - -

-

- - {{ - "Specify multiple SSH Keys separated by new line, empty lines are ignored." | tr - }} - -

-
- -
- {% trans%}Notification settings{% endtrans %}: -

- - - -

-

- - - -

-

- - - -

-
- -
- {% if form_type == "UpdateAccount" %} - - {{ "To confirm the profile changes, please enter " - "your current password:" | tr }} - -

- - -

- {% else %} - - - {{ "To protect the AUR against automated account creation, " - "we kindly ask you to provide the output of the following " - "command:" | tr }} - - {{ captcha_salt | captcha_cmdline }} - - -

- - - ({% trans %}required{% endtrans %}) - - -

- {% endif %} -
- -
-

- - {% if form_type == "UpdateAccount" %} -   - {% else %} -   - {% endif %} - -

-
-
diff --git a/templates/partials/archdev-navbar.html b/templates/partials/archdev-navbar.html deleted file mode 100644 index ea67b1ca..00000000 --- a/templates/partials/archdev-navbar.html +++ /dev/null @@ -1,63 +0,0 @@ -
- -
diff --git a/templates/partials/body.html b/templates/partials/body.html deleted file mode 100644 index ccae0fe3..00000000 --- a/templates/partials/body.html +++ /dev/null @@ -1,10 +0,0 @@ -
- {% include 'partials/set_lang.html' %} - {% include 'partials/archdev-navbar.html' %} - - {% block pageContent %} - - {% endblock %} - - {% include 'partials/footer.html' %} -
diff --git a/templates/partials/comment_actions.html b/templates/partials/comment_actions.html deleted file mode 100644 index bf6103d7..00000000 --- a/templates/partials/comment_actions.html +++ /dev/null @@ -1,100 +0,0 @@ -{% set pkgbasename = comment.PackageBase.Name %} - -{% if not comment.Deleter %} - {% if request.user.has_credential(creds.COMMENT_DELETE, approved=[comment.User]) %} -
-
- - -
-
- {% endif %} - - {% if request.user.has_credential(creds.COMMENT_EDIT, approved=[comment.User]) %} - - {{ 'Edit comment' | tr }} - - - {# Set the edit event listener for this link. We must do this here - so that we can utilize Jinja2's values. #} - - - {% endif %} - - {% if request.user.has_credential(creds.COMMENT_PIN, approved=comment.maintainers()) %} - {% if comment.PinnedTS %} -
-
- - -
-
- {% else %} -
-
- - -
-
- {% endif %} - {% endif %} -{% elif request.user.has_credential(creds.COMMENT_UNDELETE, approved=[comment.User]) %} -
-
- - -
-
-{% endif %} diff --git a/templates/partials/comment_content.html b/templates/partials/comment_content.html deleted file mode 100644 index f89dc505..00000000 --- a/templates/partials/comment_content.html +++ /dev/null @@ -1,15 +0,0 @@ - -{% set article_cls = "article-content" %} -{% if comment.Deleter %} - {% set article_cls = "%s %s" | format(article_cls, "comment-deleted") %} -{% endif %} - -
-
- {% if comment.RenderedComment %} - {{ comment.RenderedComment | safe }} - {% else %} - {{ comment.Comments }} - {% endif %} -
-
diff --git a/templates/partials/error.html b/templates/partials/error.html deleted file mode 100644 index 6043dfd1..00000000 --- a/templates/partials/error.html +++ /dev/null @@ -1,15 +0,0 @@ -{% if errors %} -
    - {% for error in errors %} - {% if error is string %} -
  • {{ error | tr | safe }}
  • - {% elif error is iterable %} -
      - {% for e in error %} -
    • {{ e | tr | safe }}
    • - {% endfor %} -
    - {% endif %} - {% endfor %} -
-{% endif %} diff --git a/templates/partials/footer.html b/templates/partials/footer.html deleted file mode 100644 index d88c3eb8..00000000 --- a/templates/partials/footer.html +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/templates/partials/head.html b/templates/partials/head.html deleted file mode 100644 index 8bfde020..00000000 --- a/templates/partials/head.html +++ /dev/null @@ -1,19 +0,0 @@ - - {% include 'partials/meta.html' %} - - - - - - - - - - - - - - - AUR ({{ language }}) - {{ title | tr }} - diff --git a/templates/partials/layout.html b/templates/partials/layout.html deleted file mode 100644 index 5d8e771b..00000000 --- a/templates/partials/layout.html +++ /dev/null @@ -1,10 +0,0 @@ - - - {% include 'partials/head.html' %} - - - {% include 'partials/navbar.html' %} - {% extends 'partials/body.html' %} - - diff --git a/templates/partials/meta.html b/templates/partials/meta.html deleted file mode 100644 index 727100b9..00000000 --- a/templates/partials/meta.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/partials/navbar.html b/templates/partials/navbar.html deleted file mode 100644 index 00ceab6b..00000000 --- a/templates/partials/navbar.html +++ /dev/null @@ -1,19 +0,0 @@ - diff --git a/templates/partials/package-maintainer/last_votes.html b/templates/partials/package-maintainer/last_votes.html deleted file mode 100644 index 4f30d9ff..00000000 --- a/templates/partials/package-maintainer/last_votes.html +++ /dev/null @@ -1,37 +0,0 @@ -
-

{% trans %}{{ title }}{% endtrans %}

- - - - - - - - - {% if not votes %} - - - - - {% else %} - {% for vote in votes %} - - - - - {% endfor %} - {% endif %} - -
{{ "User" | tr }}{{ "Last vote" | tr }}
- {{ "No results found." | tr }} -
- - {{ vote.Username }} - - - - {{ vote.LastVote }} - -
- -
diff --git a/templates/partials/package-maintainer/proposal/details.html b/templates/partials/package-maintainer/proposal/details.html deleted file mode 100644 index 24b21262..00000000 --- a/templates/partials/package-maintainer/proposal/details.html +++ /dev/null @@ -1,112 +0,0 @@ -

{% trans %}Proposal Details{% endtrans %}

- -{% if voteinfo.is_running() %} -

- {% trans %}This vote is still running.{% endtrans %} -

-{% endif %} - - -
-
- {{ "User" | tr }}: - - {% if voteinfo.User %} - - {{ voteinfo.User }} - - {% else %} - N/A - {% endif %} - -
- -
- {{ "Active" | tr }} {{ "Package Maintainers" | tr }} {{ "assigned" | tr }}: - {{ voteinfo.ActiveUsers }} -
- - {% set submitter = voteinfo.Submitter.Username %} - {% set submitter_uri = "/account/%s" | format(submitter) %} - {% set submitter = '%s' | format(submitter_uri, submitter) %} - - -
- {{ "End" | tr }}: - - {{ datetime_display(voteinfo.End) }} - -
- - {% if not voteinfo.is_running() %} -
- {{ "Result" | tr }}: - {% if not voteinfo.ActiveUsers %} - {{ "unknown" | tr }} - {% elif accepted %} - - {{ "Accepted" | tr }} - - {% else %} - - {{ "Rejected" | tr }} - - {% endif %} -
- {% endif %} -
- -
-

- - {{ voteinfo.Agenda | replace("\n", "
\n") | safe | e }} -

-
- - - - {% if not voteinfo.is_running() %} - - - - {% endif %} - - - - - - - - {% if not voteinfo.is_running() %} - - - - {% endif %} - - - - - -
{{ "Yes" | tr }}{{ "No" | tr }}{{ "Abstain" | tr }}{{ "Total" | tr }}{{ "Voted" | tr }}{{ "Participation" | tr }}
{{ voteinfo.Yes }}{{ voteinfo.No }}{{ voteinfo.Abstain }}{{ voteinfo.total_votes() }} - {% if not has_voted %} - - {{ "No" | tr }} - - {% else %} - - {{ "Yes" | tr }} - - {% endif %} - - {% if voteinfo.ActiveUsers %} - {{ (participation * 100) | number_format(2) }}% - {% else %} - {{ "unknown" | tr }} - {% endif %} -
diff --git a/templates/partials/package-maintainer/proposal/form.html b/templates/partials/package-maintainer/proposal/form.html deleted file mode 100644 index e172b29d..00000000 --- a/templates/partials/package-maintainer/proposal/form.html +++ /dev/null @@ -1,14 +0,0 @@ -
- -
- - - -
-
diff --git a/templates/partials/package-maintainer/proposal/voters.html b/templates/partials/package-maintainer/proposal/voters.html deleted file mode 100644 index 6069f97d..00000000 --- a/templates/partials/package-maintainer/proposal/voters.html +++ /dev/null @@ -1,10 +0,0 @@ -

{{ "Voters" | tr }}

- diff --git a/templates/partials/package-maintainer/proposals.html b/templates/partials/package-maintainer/proposals.html deleted file mode 100644 index 3a381fd5..00000000 --- a/templates/partials/package-maintainer/proposals.html +++ /dev/null @@ -1,113 +0,0 @@ -
-

{% trans %}{{ title }}{% endtrans %}

- - {% if title == "Current Votes" and request.user.has_credential(creds.PM_ADD_VOTE) %} - - {% endif %} - - {% if not results %} -

- {% trans %}No results found.{% endtrans %} -

- {% else %} - - - - - - - - - {% if title != "Current Votes" %} - - - {% endif %} - - - - - - {% for result in results %} - - - - - - - - - {% if title != "Current Votes" %} - - - {% endif %} - - {% set vote = (result | get_vote(request)) %} - - - {% endfor %} - -
{{ "Proposal" | tr }} - {% set off_qs = "%s=%d" | format(off_param, off) %} - {% set by_qs = "%s=%s" | format(by_param, by_next | quote_plus) %} - - {{ "Start" | tr }} - - {{ "End" | tr }}{{ "User" | tr }}{{ "Yes" | tr }}{{ "No" | tr }}{{ "Voted" | tr }}
- - {% set agenda = result.Agenda[:prev_len] %} - {{ agenda }} - {{ date_display(result.Submitted) }}{{ date_display(result.End) }} - {% if not result.User %} - N/A - {% else %} - - {{ result.User }} - - {% endif %} - {{ result.Yes }}{{ result.No }} - {% if vote %} - - {{ "Yes" | tr }} - - {% else %} - - {{ "No" | tr }} - - {% endif %} -
- -
-

- {% if total_votes > pp %} - - {% if off > 0 %} - {% set off_qs = "%s=%d" | format(off_param, off - 10) %} - {% set by_qs = "%s=%s" | format(by_param, by | quote_plus) %} - - ‹ Back - - {% endif %} - - {% if off < total_votes - pp %} - {% set off_qs = "%s=%d" | format(off_param, off + 10) %} - {% set by_qs = "%s=%s" | format(by_param, by | quote_plus) %} - - Next › - - {% endif %} - - {% endif %} -

-
- - {% endif %} - -
diff --git a/templates/partials/packages/actions.html b/templates/partials/packages/actions.html deleted file mode 100644 index 016177c7..00000000 --- a/templates/partials/packages/actions.html +++ /dev/null @@ -1,155 +0,0 @@ - - diff --git a/templates/partials/packages/comment.html b/templates/partials/packages/comment.html deleted file mode 100644 index 3573a914..00000000 --- a/templates/partials/packages/comment.html +++ /dev/null @@ -1,49 +0,0 @@ -{% set header_cls = "comment-header" %} -{% set article_cls = "article-content" %} -{% set comment_by = comment.User.Username %} -{% if not comment.User %} - {% set comment_by = "<deleted-account>" %} -{% endif %} -{% if comment.Deleter %} - {% set header_cls = "%s %s" | format(header_cls, "comment-deleted") %} - {% set article_cls = "%s %s" | format(article_cls, "comment-deleted") %} -{% endif %} - -{% if not comment.Deleter or request.user.has_credential(creds.COMMENT_VIEW_DELETED, approved=[comment.Deleter]) %} -{% if not (request.user.HideDeletedComments and comment.DelTS) %} -

- {% set commented_at = comment.CommentTS | dt | as_timezone(timezone) %} - {% set view_account_info = 'View account information for %s' | tr | format(comment_by) %} - {{ - "%s commented on %s" | tr | format( - ('%s' | format( - comment_by, - view_account_info, - comment_by - )) if request.user.is_authenticated() and comment.User else - (comment_by), - '%s' | format( - comment.ID, - datetime_display(comment.CommentTS) - ) - ) - | safe - }} - {% if comment.Editor %} - {% set edited_on = comment.EditedTS | dt | as_timezone(timezone) %} - - ({{ "edited on %s by %s" | tr - | format(datetime_display(comment.EditedTS), - '%s' | format( - comment.Editor.Username, comment.Editor.Username)) - | safe - }}) - - {% endif %} - - {% include "partials/comment_actions.html" %} -

- - {% include "partials/comment_content.html" %} -{% endif %} -{% endif %} diff --git a/templates/partials/packages/comment_form.html b/templates/partials/packages/comment_form.html deleted file mode 100644 index cecc496e..00000000 --- a/templates/partials/packages/comment_form.html +++ /dev/null @@ -1,55 +0,0 @@ -{# `action` is assigned the proper route to use for the form action. -When `comment` is provided (PackageComment), we display an edit form -for the comment. Otherwise, we display a new form. - -Routes: - new comment - /pkgbase/{name}/comments - edit comment - /pkgbase/{name}/comments/{id} -#} -{% set action = "/pkgbase/%s/comments" | format(pkgbase.Name) %} -{% if comment %} - {% set action = "/pkgbase/%s/comments/%d" | format(pkgbase.Name, comment.ID) %} -{% endif %} - -
-
- -

- {{ "Git commit identifiers referencing commits in the AUR package " - "repository and URLs are converted to links automatically." | tr }} - {{ "%sMarkdown syntax%s is partially supported." | tr - | format('', - "") - | safe }} -
- {{ "Maximum number of characters" | tr }}: {{ max_chars_comment }}. -

-

- -

-

- - {% if comment %} - - {% endif %} - {% if not request.user.notified(pkgbase) %} - - - - - {% endif %} -

-
-
diff --git a/templates/partials/packages/comments.html b/templates/partials/packages/comments.html deleted file mode 100644 index 55421bfa..00000000 --- a/templates/partials/packages/comments.html +++ /dev/null @@ -1,56 +0,0 @@ - - -{% if request.user.is_authenticated() %} -
-

Add Comment

- {% include "partials/packages/comment_form.html" %} -
-{% endif %} - -{% if pinned_comments.count() %} -
-
-

- {{ "Pinned Comments" | tr }} - -

-
- {% for comment in pinned_comments.all() %} - {% include "partials/packages/comment.html" %} - {% endfor %} -
-{% endif %} - -{% if comments.count() %} -
-
-

- {{ "Latest Comments" | tr }} - -

- {% set page = ((O / PP) | int) %} - {% set pages = ((comments_total / PP) | ceil) %} - - {% if pages > 1 %} -

- {{ page | pager_nav(comments_total, prefix) | safe }} -

- {% endif %} -
- {% for comment in comments.all() %} - {% include "partials/packages/comment.html" %} - {% endfor %} - -
-{% endif %} diff --git a/templates/partials/packages/details.html b/templates/partials/packages/details.html deleted file mode 100644 index 5f242414..00000000 --- a/templates/partials/packages/details.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - {% if show_package_details | default(False) %} - - - - - - - - - - - - - {% endif %} - {% if pkgbase.keywords.count() or request.user.has_credential(creds.PKGBASE_SET_KEYWORDS, approved=[pkgbase.Maintainer] + comaintainers) %} - - - {% if request.user.has_credential(creds.PKGBASE_SET_KEYWORDS, approved=[pkgbase.Maintainer] + comaintainers) %} - - {% else %} - - {% endif %} - - {% endif %} - {% if show_package_details and licenses and licenses.count() %} - - - - - {% endif %} - {% if show_package_details and groups and groups.count() %} - - - - - {% endif %} - {% if show_package_details and conflicts and conflicts.count() %} - - - - - {% endif %} - {% if show_package_details and provides and provides.count() %} - - - - - {% endif %} - {% if show_package_details and replaces and replaces.count() %} - - - - - {% endif %} - - - - - - - - - - - - - - - {% if request.user.has_credential(creds.PKGBASE_LIST_VOTERS) %} - - {% else %} - - {% endif %} - - - - - - - - - - - - - -
{{ "Git Clone URL" | tr }}: - {{ git_clone_uri_anon | format(pkgbase.Name) }} ({{ "read-only" | tr }}, {{ "click to copy" | tr }}) - {% if request.user.is_authenticated() %} -
{{ git_clone_uri_priv | format(pkgbase.Name) }} ({{ "click to copy" | tr }}) - {% endif %} -
{{ "Package Base" | tr }}: - - {{ pkgbase.Name }} - -
{{ "Description" | tr }}:{{ package.Description }}
{{ "Upstream URL" | tr }}: - {% if package.URL %} - {{ package.URL }} - {% else %} - {{ "None" | tr }} - {% endif %} -
{{ "Keywords" | tr }}: -
-
- - -
-
-
- {% for keyword in pkgbase.keywords.all() %} - - {{ keyword.Keyword }} - - {% endfor %} -
{{ "Licenses" | tr }}:{{ licenses.all() | join(', ', attribute='License.Name') }}
{{ "Groups" | tr }}:{{ groups.all() | join(', ', attribute='Group.Name') }}
{{ "Conflicts" | tr }}: - {{ conflicts.all() | join(', ', attribute='RelName') }} -
{{ "Provides" | tr }}: - {{ provides.all() | join(', ', attribute='RelName') }} -
{{ "Replaces" | tr }}: - {{ replaces.all() | join(', ', attribute='RelName') }} -
{{ "Submitter" | tr }}: - {% if request.user.is_authenticated() and pkgbase.Submitter %} - - {{ pkgbase.Submitter.Username }} - - {% else %} - {{ pkgbase.Submitter.Username | default("None" | tr) }} - {% endif %} -
{{ "Maintainer" | tr }}: - {% if request.user.is_authenticated() and pkgbase.Maintainer %} - - {{ pkgbase.Maintainer.Username }} - - {% set len = comaintainers | length %} - {% if comaintainers %} - ({% for co in comaintainers %}{{ co }}{% if loop.index < len %}, {% endif %}{% endfor %}) - {% endif %} - {% else %} - {{ pkgbase.Maintainer.Username | default("None" | tr) }} - {% if comaintainers %} - ({{ comaintainers|join(', ') }}) - {% endif %} - {% endif %} -
{{ "Last Packager" | tr }}: - {% if request.user.is_authenticated() and pkgbase.Packager %} - - {{ pkgbase.Packager.Username }} - - {% else %} - {{ pkgbase.Packager.Username | default("None" | tr) }} - {% endif %} -
{{ "Votes" | tr }}: - - {{ pkgbase.NumVotes }} - - {{ pkgbase.NumVotes }}
{{ "Popularity" | tr }}:{{ popularity | number_format(6 if popularity <= 0.2 else 2) }}
{{ "First Submitted" | tr }}:{{ datetime_display(pkgbase.SubmittedTS) }}
{{ "Last Updated" | tr }}:{{ datetime_display(pkgbase.ModifiedTS) }}
- - diff --git a/templates/partials/packages/package_metadata.html b/templates/partials/packages/package_metadata.html deleted file mode 100644 index 2dd39c20..00000000 --- a/templates/partials/packages/package_metadata.html +++ /dev/null @@ -1,91 +0,0 @@ -
-

{{ "Dependencies" | tr }} ({{ depends_count }})

- -
- -
-

{{ "Required by" | tr }} ({{ reqs_count }})

- -
- -
-

{{ "Sources" | tr }} ({{ sources | length }})

-
- -
-
    - {% for src in sources %} - {% set file, uri = (src | source_uri) %} -
  • - {{ file }} -
  • - {% endfor %} -
-
diff --git a/templates/partials/packages/pkgbase_metadata.html b/templates/partials/packages/pkgbase_metadata.html deleted file mode 100644 index d4916029..00000000 --- a/templates/partials/packages/pkgbase_metadata.html +++ /dev/null @@ -1,13 +0,0 @@ -
-

Packages ({{ packages_count }})

- -
diff --git a/templates/partials/packages/requests.html b/templates/partials/packages/requests.html deleted file mode 100644 index 5f31515c..00000000 --- a/templates/partials/packages/requests.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - {% for request in requests %} - {% set requested = request.RequestTS | dt | as_timezone(timezone) %} - - {% if request.PackageBase %} - {# If the PackageBase still exists, link to it. #} - - {% else %} - {# Otherwise, just display PackageBaseName unlinked. #} - - {% endif %} - - - - - - - {% endfor %} - - - -
{{ "Package" | tr }}{{ "Type" | tr }}{{ "Comments" | tr }}{{ "Filed by" | tr }}{{ "Date" | tr }}{{ "Status" | tr }}
- - {{ request.PackageBaseName }} - - {{ request.PackageBaseName }} - {{ request.RequestType.name_display() | tr }} - {# If the RequestType is a merge and request.MergeBaseName is valid... #} - {% if request.RequestType.ID == 3 and request.MergeBaseName %} - ({{ request.MergeBaseName }}) - {% endif %} - {{ request.Comments }} - - {{ request.User.Username }} - - {{ datetime_display(request.RequestTS) }}{{ request.status_display() | tr }}
diff --git a/templates/partials/packages/results.html b/templates/partials/packages/results.html deleted file mode 100644 index a9a206a1..00000000 --- a/templates/partials/packages/results.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - {% if request.user.is_authenticated() %} - - - {% endif %} - - - - - - {% for pkg in packages %} - {% set flagged = pkg.PackageBase.OutOfDateTS %} - - - {{ pkg.Version }} - - - {% if request.user.is_authenticated() %} - - - {% endif %} - - - - {% endfor %} - -
{{ "Name" | tr }}{{ "Version" | tr }}{{ "Votes" | tr }}{{ "Popularity" | tr }}{{ "Voted" | tr }}{{ "Notify" | tr }}{{ "Description" | tr }}{{ "Maintainer" | tr }}
- - {{ pkg.Name }} - - {{ pkg.PackageBase.NumVotes }}{{ pkg.PackageBase.Popularity | number_format(2) }} - {# If I voted, display "Yes". #} - {% if pkg.PackageBase.ID in votes %} - {{ "Yes" | tr }} - {% endif %} - - {# If I'm being notified, display "Yes". #} - {% if pkg.PackageBase.ID in notified %} - {{ "Yes" | tr }} - {% endif %} - {{ pkg.Description or '' }} - {% set maintainer = pkg.PackageBase.Maintainer %} - {% if maintainer %} - - {{ maintainer.Username }} - - {% else %} - {{ "orphan" | tr }} - {% endif %} -
diff --git a/templates/partials/packages/search.html b/templates/partials/packages/search.html deleted file mode 100644 index 3db5c7a4..00000000 --- a/templates/partials/packages/search.html +++ /dev/null @@ -1,79 +0,0 @@ - diff --git a/templates/partials/packages/search_actions.html b/templates/partials/packages/search_actions.html deleted file mode 100644 index c84ad93a..00000000 --- a/templates/partials/packages/search_actions.html +++ /dev/null @@ -1,20 +0,0 @@ -

- - - - - -

diff --git a/templates/partials/packages/search_results.html b/templates/partials/packages/search_results.html deleted file mode 100644 index a365a1d3..00000000 --- a/templates/partials/packages/search_results.html +++ /dev/null @@ -1,136 +0,0 @@ -{% set reverse_order = "d" if SO == "a" else "a" %} - - - - - {% if request.user.is_authenticated() %} - - {% endif %} - - - - - {% if request.user.is_authenticated() %} - - - {% endif %} - - - - - - - {% for pkg in packages %} - {% set flagged = pkg.OutOfDateTS %} - - {% if request.user.is_authenticated() %} - - {% endif %} - - {% if flagged %} - - {% else %} - - {% endif %} - - - {% if request.user.is_authenticated() %} - - - {% endif %} - - - {% if flagged %} - - {% else %} - - {% endif %} - - {% endfor %} - -
- {% if SB == "n" %} - {% set order = reverse_order %} - {% else %} - {% set order = SO %} - {% endif %} - - {{ "Name" | tr }} - - {{ "Version" | tr }} - {% if SB == "v" %} - {% set order = reverse_order %} - {% else %} - {% set order = SO %} - {% endif %} - - {{ "Votes" | tr }} - - - {% if SB == "p" %} - {% set order = reverse_order %} - {% else %} - {% set order = SO %} - {% endif %} - {{ "Popularity" | tr }}? - - {% if SB == "w" %} - {% set order = reverse_order %} - {% else %} - {% set order = SO %} - {% endif %} - - {{ "Voted" | tr }} - - - {% if SB == "o" %} - {% set order = reverse_order %} - {% else %} - {% set order = SO %} - {% endif %} - - {{ "Notify" | tr }} - - {{ "Description" | tr }} - {% if SB == "m" %} - {% set order = reverse_order %} - {% else %} - {% set order = SO %} - {% endif %} - - {{ "Maintainer" | tr }} - - - {% if SB == "l" %} - {% set order = reverse_order %} - {% else %} - {% set order = SO %} - {% endif %} - - {{ "Last Updated" | tr }} - -
- - - - {{ pkg.Name }} - - {{ pkg.Version }}{{ pkg.Version }}{{ pkg.NumVotes }} - {{ pkg.Popularity | number_format(2) }} - - {% if pkg.Voted %} - {{ "Yes" | tr }} - {% endif %} - - {% if pkg.Notify %} - {{ "Yes" | tr }} - {% endif %} - {{ pkg.Description or '' }} - {% if pkg.Maintainer %} - - {{ pkg.Maintainer }} - - {% else %} - {{ "orphan" | tr }} - {% endif %} - {{ datetime_display(pkg.ModifiedTS) }}{{ datetime_display(pkg.ModifiedTS) }}
diff --git a/templates/partials/packages/search_widget.html b/templates/partials/packages/search_widget.html deleted file mode 100644 index 048e1aa9..00000000 --- a/templates/partials/packages/search_widget.html +++ /dev/null @@ -1,14 +0,0 @@ -
-
-
- - - -
-
-
diff --git a/templates/partials/packages/statistics.html b/templates/partials/packages/statistics.html deleted file mode 100644 index 7ce5fba1..00000000 --- a/templates/partials/packages/statistics.html +++ /dev/null @@ -1,55 +0,0 @@ -
-

{{ "Statistics" | tr }}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{ "Packages" | tr }}{{ package_count }}
{{ "Orphan Packages" | tr }}{{ orphan_count }}
- {{ "Packages added in the past 7 days" | tr }} - {{ seven_days_old_added }}
- {{ "Packages updated in the past 7 days" | tr }} - {{ seven_days_old_updated }}
- {{ "Packages updated in the past year" | tr }} - {{ year_old_updated }}
- {{ "Packages never updated" | tr }} - {{ never_updated }}
- {{ "Registered Users" | tr }} - {{ user_count }}
- {{ "Package Maintainers" | tr }} - {{ package_maintainer_count }}
-
- -{% if request.user.is_authenticated() %} - - {% include 'partials/statistics.html' %} -{% endif %} diff --git a/templates/partials/packages/updates.html b/templates/partials/packages/updates.html deleted file mode 100644 index 767a93f6..00000000 --- a/templates/partials/packages/updates.html +++ /dev/null @@ -1,34 +0,0 @@ -
-

- {{ "Recent Updates" | tr }} - - ({{ "more" | tr }}) - -

- - RSS Feed - - - RSS Feed - - - - - {% for pkg in package_updates %} - - - - - {% endfor %} - -
- - {{ pkg.Name }} {{ pkg.Version }} - - - {{ datetime_display(pkg.PackageBase.ModifiedTS) }} -
- -
diff --git a/templates/partials/pager.html b/templates/partials/pager.html deleted file mode 100644 index 1adc354b..00000000 --- a/templates/partials/pager.html +++ /dev/null @@ -1,28 +0,0 @@ -{# A pager widget that can be used for navigation of a number of results. - -Inputs required: - - prefix: Request URI prefix used to produce navigation offsets - singular: Singular sentence to be translated via tn - plural: Plural sentence to be translated via tn - PP: The number of results per page - O: The current offset value - total: The total number of results -#} - -{% set page = ((O / PP) | int) %} -{% set pages = ((total / PP) | ceil) %} - -
-

- {{ total | tn(singular, plural) | format(total) }} - {% if pages %} - {{ "Page %d of %d." | tr | format(page + 1, pages) }} - {% endif %} -

- {% if pages > 1 %} -

- {{ page | pager_nav(total, prefix) | safe }} -

- {% endif %} -

diff --git a/templates/partials/set_lang.html b/templates/partials/set_lang.html deleted file mode 100644 index e9590050..00000000 --- a/templates/partials/set_lang.html +++ /dev/null @@ -1,28 +0,0 @@ -
-
-
-
- - - - - - - - - -
-
-
-
diff --git a/templates/partials/statistics.html b/templates/partials/statistics.html deleted file mode 100644 index 0bf844b6..00000000 --- a/templates/partials/statistics.html +++ /dev/null @@ -1,27 +0,0 @@ -
-

{{ "My Statistics" | tr }}

- - {% set bases = request.user.maintained_bases %} - - - - - - - {% set out_of_date_packages = bases | out_of_date %} - - - - - -
- - {{ "Packages" | tr }} - - {{ bases.count() }}
- - {{ "Out of Date" | tr }} - - {{ out_of_date_packages.count() }}
- -
diff --git a/templates/partials/support.html b/templates/partials/support.html deleted file mode 100644 index b175a040..00000000 --- a/templates/partials/support.html +++ /dev/null @@ -1,65 +0,0 @@ -

{% trans %}Support{% endtrans %}

-

{% trans %}Package Requests{% endtrans %}

-
-

- {{ "There are three types of requests that can be filed in the %sPackage Actions%s box on the package details page:" - | tr - | format("", "") - | safe - }} -

-
    -
  • {% trans %}Orphan Request{% endtrans %}: {% trans %}Request a package to be disowned, e.g. when the maintainer is inactive and the package has been flagged out-of-date for a long time.{% endtrans %}
  • -
  • {% trans %}Deletion Request{% endtrans %}: {%trans %}Request a package to be removed from the Arch User Repository. Please do not use this if a package is broken and can be fixed easily. Instead, contact the maintainer and file orphan request if necessary.{% endtrans %}
  • -
  • {% trans %}Merge Request{% endtrans %}: {% trans %}Request a package to be merged into another one. Can be used when a package needs to be renamed or replaced by a split package.{% endtrans %}
  • -
-

-{{ "If you want to discuss a request, you can use the %saur-requests%s mailing list. However, please do not use that list to file requests." - | tr - | format('', "") - | safe - }} -

-
-

{% trans %}Submitting Packages{% endtrans %}

-
-

- {{ "Git over SSH is now used to submit packages to the AUR. See the %sSubmitting packages%s section of the Arch User Repository ArchWiki page for more details." - | tr - | format('', "") - | safe - }} -

-{% if ssh_fingerprints %} -

- {% trans %}The following SSH fingerprints are used for the AUR:{% endtrans %} -

-

    - {% for keytype in ssh_fingerprints %} -
  • {{ keytype }}: {{ ssh_fingerprints[keytype] }} - {% endfor %} -
-{% endif %} -
-

{% trans %}Discussion{% endtrans %}

-
-

- {{ "General discussion regarding the Arch User Repository (AUR) and Package Maintainer structure takes place on %saur-general%s. For discussion relating to the development of the AUR web interface, use the %saur-dev%s mailing list." - | tr - | format('', "", - '', "") - | safe - }} -

-

-

{% trans %}Bug Reporting{% endtrans %}

-
-

- {{ "If you find a bug in the AUR web interface, please fill out a bug report on our %sbug tracker%s. Use the tracker to report bugs in the AUR web interface %sonly%s. To report packaging bugs contact the maintainer or leave a comment on the appropriate package page." - | tr - | format('', "", - "", "") - | safe - }} -

-
diff --git a/templates/passreset.html b/templates/passreset.html deleted file mode 100644 index 08493fe9..00000000 --- a/templates/passreset.html +++ /dev/null @@ -1,76 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{% trans %}Password Reset{% endtrans %}

- -

- {% if step == "confirm" %} - {% trans %}Check your e-mail for the confirmation link.{% endtrans %} - {% elif step == "complete" %} - {% trans %}Your password has been reset successfully.{% endtrans %} - {% elif resetkey %} - - {% include "partials/error.html" %} - -

- - - - - - - - - - - - - - - -
{% trans %}Confirm your user name or primary e-mail address:{% endtrans %} - -
{% trans %}Enter your new password:{% endtrans %} - -
{% trans %}Confirm your new password:{% endtrans %} - -
-
- - -
- {% else %} - - {% set url = "https://lists.archlinux.org/mailman3/lists/aur-general.lists.archlinux.org/" %} - {{ "If you have forgotten the user name and the primary e-mail " - "address you used to register, please send a message to the " - "%saur-general%s mailing list." - | tr - | format( - '' | format(url), - "") - | safe - }} -

- - {% include "partials/error.html" %} - -
-

- {% trans %}Enter your user name or your primary e-mail address:{% endtrans %} - -

- -
- {% endif %} -

-
-{% endblock %} diff --git a/templates/pkgbase/comaintainers.html b/templates/pkgbase/comaintainers.html deleted file mode 100644 index 06e8b9d7..00000000 --- a/templates/pkgbase/comaintainers.html +++ /dev/null @@ -1,40 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} - {% if errors %} -
    - {% for error in errors %} -
  • {{ error | tr }}
  • - {% endfor %} -
- {% endif %} - -
-

{{ "Manage Co-maintainers" | tr }}:

-

- {{ - "Use this form to add co-maintainers for %s%s%s " - "(one user name per line):" - | tr | format("", pkgbase.Name, "") - | safe - }} -

- -
-
-

- - -

- -

- -

-
-
- -
-{% endblock %} diff --git a/templates/pkgbase/comments/edit.html b/templates/pkgbase/comments/edit.html deleted file mode 100644 index 0d4ec28a..00000000 --- a/templates/pkgbase/comments/edit.html +++ /dev/null @@ -1,48 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{{ "Edit comment for: %s" | tr | format(comment.PackageBase.Name) }}

- -
-
-
- -
- -

- {{ - "Git commit identifiers referencing commits in " - "the AUR package repository and URLs are converted " - "to links automatically." | tr - }} - {{ - "%sMarkdown syntax%s is partiaully supported." - | tr | format( - '', - "" - ) | safe - }} -
- {{ "Maximum number of characters" | tr }}: {{ max_chars_comment }}. -

- -

- -

- -

- -

- -
-
- -
-{% endblock %} diff --git a/templates/pkgbase/delete.html b/templates/pkgbase/delete.html deleted file mode 100644 index defcf58f..00000000 --- a/templates/pkgbase/delete.html +++ /dev/null @@ -1,75 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} - - {% if errors %} -
    - {% for error in errors %} -
  • {{ error | tr }}
  • - {% endfor %} -
- {% endif %} - -
-

{{ "Delete Package" | tr }}: {{ pkgbase.Name }}

- -

- {{ - "Use this form to delete the package base %s%s%s and " - "the following packages from the AUR: " - | tr | format("", pkgbase.Name, "") | safe - }} -

- -
    - {% for package in pkgbase.packages.all() %} -
  • {{ package.Name }}
  • - {% endfor %} -
- -

- {{ - "This action will close any pending package requests " - "related to it. If %sComments%s are omitted, a closure " - "comment will be autogenerated." - | tr | format("", "") | safe - }} -

- -

- {{ - "Deletion of a package is permanent. " - "Select the checkbox to confirm action." | tr - }} -

- -
-
- - -

- - -

- -

- -

- -

- -

-
-
- -
-{% endblock %} diff --git a/templates/pkgbase/disown.html b/templates/pkgbase/disown.html deleted file mode 100644 index c01398c8..00000000 --- a/templates/pkgbase/disown.html +++ /dev/null @@ -1,82 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} - - {% if errors %} -
    - {% for error in errors %} -
  • {{ error | tr }}
  • - {% endfor %} -
- {% endif %} - -
-

{{ "Disown Package" | tr }}: {{ pkgbase.Name }}

- -

- {{ - "Use this form to disown the package base %s%s%s which " - "includes the following packages: " - | tr | format("", pkgbase.Name, "") | safe - }} -

- -
    - {% for package in pkgbase.packages.all() %} -
  • {{ package.Name }}
  • - {% endfor %} -
- - {% if not is_maint and not is_comaint %} -

- {{ - "This action will close any pending package requests " - "related to it. If %sComments%s are omitted, a closure " - "comment will be autogenerated." - | tr | format("", "") | safe - }} -

- {% endif %} - -

- {{ - "By selecting the checkbox, you confirm that you want to " - "disown the package." | tr - }} -

- -
-
- - - {% if not is_maint and not is_comaint %} -

- - -

- {% else %} - - {% endif %} - -

- -

-

- -

-
-
- -
-{% endblock %} diff --git a/templates/pkgbase/flag-comment.html b/templates/pkgbase/flag-comment.html deleted file mode 100644 index 35b998d1..00000000 --- a/templates/pkgbase/flag-comment.html +++ /dev/null @@ -1,46 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{{ "Flagged Out-of-Date Comment: %s" | tr | format(pkgbase.Name) }}

- - {# Prepare wrapping for the username. #} - {% set wrap = ["", ""] %} - {% if request.user.is_authenticated() %} - {# When logged in, we wrap it with a link to the account. #} - {% set wrap = ['' | format(pkgbase.Flagger.Username), ""] %} - {% endif %} - - {# Prepare OutOfDateTS as a datetime object in the request user's timezone. #} - {% set flagged_at = pkgbase.OutOfDateTS | dt | as_timezone(timezone) %} - {% set username = "%s%s%s" | format(wrap[0], pkgbase.Flagger.Username, wrap[1]) %} - -

- {{ - "%s%s%s flagged %s%s%s out-of-date on %s%s%s for the " - "following reason:" - | tr | format("", username, "", - "", pkgbase.Name, "", - "", date_display(pkgbase.OutOfDateTS), "") - | safe - }} -

- - {# Padding #} -

- -
-
-

{{ pkgbase.FlaggerComment }}

-
-
- -
- -
- - {# Padding #} -

- -
-{% endblock %} diff --git a/templates/pkgbase/flag.html b/templates/pkgbase/flag.html deleted file mode 100644 index 11d33029..00000000 --- a/templates/pkgbase/flag.html +++ /dev/null @@ -1,72 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{{ "Flag Package Out-Of-Date" | tr }}: {{ pkgbase.Name }}

- -

- {{ - "Use this form to flag the package base %s%s%s and " - "the following packages out-of-date: " - | tr | format("", pkgbase.Name, "") | safe - }} -

- -
    - {% for package in pkgbase.packages.all() %} -
  • {{ package.Name }}
  • - {% endfor %} -
- - {% if pkgbase.Name.endswith(('-cvs', '-svn', '-git', '-hg', '-bzr', '-darcs')) %} -

- {# TODO: This error is not yet translated. #} - {{ - "This seems to be a VCS package. Please do %snot%s flag " - "it out-of-date if the package version in the AUR does " - "not match the most recent commit. Flagging this package " - "should only be done if the sources moved or changes in " - "the PKGBUILD are required because of recent upstream " - "changes." | tr | format("", "") | safe - }} -

- {% endif %} - -

- {{ - "Please do %snot%s use this form to report bugs. " - "Use the package comments instead." - | tr | format("", "") | safe - }} - {{ - "Enter details on why the package is out-of-date below, " - "preferably including links to the release announcement " - "or the new release tarball." | tr - }} -

- - {% if errors %} -
    - {% for error in errors %} -
  • {{ error | tr }}
  • - {% endfor %} -
- {% endif %} - -
-
-

- - -

-

- -

-
-
-
-{% endblock %} diff --git a/templates/pkgbase/index.html b/templates/pkgbase/index.html deleted file mode 100644 index 05583494..00000000 --- a/templates/pkgbase/index.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} - {% include "partials/packages/search.html" %} -
-

{{ 'Package Base Details' | tr }}: {{ pkgbase.Name }}

- - {% set result = pkgbase %} - {% include "partials/packages/actions.html" %} - {% include "partials/packages/details.html" %} - -
- {% include "partials/packages/pkgbase_metadata.html" %} -
-
- - - - - {% set pkgname = result.Name %} - {% set pkgbase_id = result.ID %} - {% include "partials/packages/comments.html" %} -{% endblock %} diff --git a/templates/pkgbase/merge.html b/templates/pkgbase/merge.html deleted file mode 100644 index 4b32da87..00000000 --- a/templates/pkgbase/merge.html +++ /dev/null @@ -1,94 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} - - {% if errors %} -
    - {% for error in errors %} -
  • {{ error | tr }}
  • - {% endfor %} -
- {% endif %} - -
-

{{ "Merge Package" | tr }}: {{ pkgbase.Name }}

- -

- {{ - "Use this form to merge the package base %s%s%s into " - "another package." - | tr | format("", pkgbase.Name, "") | safe - }} - {{ "The following packages will be deleted: " | tr }} -

- -
    - {% for package in pkgbase.packages.all() %} -
  • {{ package.Name }}
  • - {% endfor %} -
- -

- {{ - "This action will close any pending package requests " - "related to it. If %sComments%s are omitted, a closure " - "comment will be autogenerated." - | tr | format("", "") | safe - }} -

- -

- {{ "Once the package has been merged it cannot be reversed. " | tr }} - {{ "Enter the package name you wish to merge the package into. " | tr }} - {{ "Select the checkbox to confirm action." | tr }} -

- -
-
- - -

- - -

- -

- - -

- -

- -

- -

- -

-
-
- - {# Bootstrap typeahead-pkgbase-merge.js #} - - -
- -{% endblock %} diff --git a/templates/pkgbase/request.html b/templates/pkgbase/request.html deleted file mode 100644 index 1e3d8c19..00000000 --- a/templates/pkgbase/request.html +++ /dev/null @@ -1,112 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} - {% if errors %} -
    - {% for error in errors %} -
  • {{ error | tr }}
  • - {% endfor %} -
- {% endif %} - -
-

{{ "Submit Request" | tr }}: {{ pkgbase.Name }}

- -

- {{ "Use this form to file a request against package base " - "%s%s%s which includes the following packages:" - | tr | format("", pkgbase.Name, "") | safe }} -

-
    - {% for package in pkgbase.packages %} -
  • {{ package.Name }}
  • - {% endfor %} -
- - {# Request form #} -
-
- - -

- - -

- - {# Javascript included for HTML-changing triggers depending - on the selected type (above). #} - - - - -

- - -

- -

- {{ - "By submitting a deletion request, you ask a Package " - "Maintainer to delete the package base. This type of " - "request should be used for duplicates, software " - "abandoned by upstream, as well as illegal and " - "irreparably broken packages." | tr - }} -

- - - - - -

- -

- -
-
- -
-{% endblock %} diff --git a/templates/pkgbase/voters.html b/templates/pkgbase/voters.html deleted file mode 100644 index d7df8b81..00000000 --- a/templates/pkgbase/voters.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

- {{ "Votes" | tr }} for - - {{ pkgbase.Name }} - -

- -
- -
-
-{% endblock %} diff --git a/templates/register.html b/templates/register.html deleted file mode 100644 index a15971a1..00000000 --- a/templates/register.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{% trans %}Register{% endtrans %}

- - {% if complete %} - {{ - "The account, %s%s%s, has been successfully created." - | tr - | format("", "'" + user.Username + "'", "") - | safe - }} -

- {% trans %}A password reset key has been sent to your e-mail address.{% endtrans %} -

- {% else %} - {% if errors %} - {% include "partials/error.html" %} - {% else %} -

- {% trans %}Use this form to create an account.{% endtrans %} -

- {% endif %} - - {% set form_type = "NewAccount" %} - {% include "partials/account_form.html" %} - {% endif %} -
-{% endblock %} diff --git a/templates/requests.html b/templates/requests.html deleted file mode 100644 index 95e9f5e1..00000000 --- a/templates/requests.html +++ /dev/null @@ -1,211 +0,0 @@ -{% extends "partials/layout.html" %} - -{% set singular = "%d package request found." %} -{% set plural = "%d package requests found." %} - -{% block pageContent %} -
-

{{ "Requests" | tr }}

-

{{ "Total Statistics" | tr }}

- - - - - - - - - - - - - - - - - - - - - - - -
{{ "Total" | tr }}:{{ total_requests }}
{{ "Pending" | tr }}:{{ pending_requests }}
{{ "Closed" | tr }}:{{ closed_requests }}
{{ "Accepted" | tr }}:{{ accepted_requests }}
{{ "Rejected" | tr }}:{{ rejected_requests }}
-

{{ "Filters" | tr }}

-
-
-
- {{ "Select filter criteria" | tr }} -
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- -
-
-
-
-
-
- {% if not total %} -

{{ "No requests matched your search criteria." | tr }}

- {% else %} - {% include "partials/pager.html" %} - - - - - - - - - - - - - {% for result in results %} - - {% if result.PackageBase %} - {# If the PackageBase still exists, link to it. #} - - {% else %} - {# Otherwise, just display PackageBaseName unlinked. #} - - {% endif %} - {# Type #} - - {# Comments #} - - - {% set idle_time = config_getint("options", "request_idle_time") %} - {% set time_delta = (utcnow - result.RequestTS) | int %} - - {% set due = result.Status == 0 and time_delta > idle_time %} - - - - {% endfor %} - -
{{ "Package" | tr }}{{ "Type" | tr }}{{ "Comments" | tr }}{{ "Filed by" | tr }}{{ "Date" | tr }}{{ "Status" | tr }}
- - {{ result.PackageBaseName }} - - {{ result.PackageBaseName }} - {{ result.RequestType.name_display() | tr }} - {# If the RequestType is a merge and request.MergeBaseName is valid... #} - {% if result.RequestType.ID == 3 and result.MergeBaseName %} - - ({{ result.MergeBaseName }}) - - {% endif %} - {{ result.Comments }} - {# Filed by #} - {# If the record has an associated User, display a link to that user. #} - {# Otherwise, display "(deleted)". #} - {% if result.User %} - - {{ result.User.Username }} - - {% else %} - (deleted) - {% endif %} -   - - (PRQ#{{ result.ID }}) - - - {# Date #} - {{ datetime_display(result.RequestTS) }} - - {# Status #} - {% if result.Status == 0 %} - {% set temp_q = { "next": "/requests" } %} - - {% if result.RequestType.ID == 1 %} - {% set action = "delete" %} - {% elif result.RequestType.ID == 2 %} - {% set action = "disown" %} - {% elif result.RequestType.ID == 3 %} - {% set action = "merge" %} - {# Add the 'via' url query parameter. #} - {% set temp_q = temp_q | extend_query( - ["into", result.MergeBaseName] - ) %} - {% endif %} - - {% if request.user.is_elevated() and not result.ClosedTS %} - {# - If RequestType is an orphan and it's not yet due, it's locked - to allow the maintainer time to react to such a request. - - On request, orphans are locked for two weeks. - #} - {% if result.RequestType.ID == 2 and not due %} - {% set time_left = idle_time - time_delta %} - {% if time_left > 48 * 3600 %} - {% set n = round(time_left / (24 * 3600)) %} - {% set time_left_fmt = (n | tn("~%d day left", "~%d days left") | format(n)) %} - {% elif time_left > 3600 %} - {% set n = round(time_left / 3600) %} - {% set time_left_fmt = (n | tn("~%d hour left", "~%d hours left") | format(n)) %} - {% else %} - {% set time_left_fmt = ("<1 hour left" | tr) %} - {% endif %} - {{ "Locked" | tr }} - ({{ time_left_fmt }}) - {% else %} - {# Only elevated users (PM or Dev) are allowed to accept requests. #} - - {{ "Accept" | tr }} - - {% endif %} -
- {% endif %} - {% if not result.ClosedTS %} - - {{ "Close" | tr }} - - {% endif %} - {% else %} - {{ result.status_display() }} - {% endif %} -
- {% include "partials/pager.html" %} - {% endif %} -
- - - -{% endblock %} diff --git a/templates/requests/close.html b/templates/requests/close.html deleted file mode 100644 index ee177811..00000000 --- a/templates/requests/close.html +++ /dev/null @@ -1,43 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

{{ "Close Request" | tr }}: {{ pkgreq.PackageBaseName }}

- -

- {{ - "Use this form to close the request for package base %s%s%s." - | tr | format("", pkgreq.PackageBaseName, "") - | safe - }} -

- -

- {{ "Note" | tr }}: - {{ - "The comments field can be left empty. However, it is highly " - "recommended to add a comment when rejecting a request." - | tr - }} -

- -
-
-

- - -

- -

- -

- -
-
- -
-{% endblock %} diff --git a/templates/testing/PKGBUILD.j2 b/templates/testing/PKGBUILD.j2 deleted file mode 100644 index 29d3a1d9..00000000 --- a/templates/testing/PKGBUILD.j2 +++ /dev/null @@ -1,14 +0,0 @@ -pkgname={{ pkg.PackageBase.Name }} -pkgver={{ pkg.Version }} -pkgrel=1 -pkgdesc='{{ pkg.Description }}' -url='{{ pkg.URL }}' -arch='any' -license=({{ licenses | join(" ") }}) -depends=({{ depends | join(" ") }}) -source=() -md5sums=() - -package() { - {{ body }} -} diff --git a/templates/testing/SRCINFO.j2 b/templates/testing/SRCINFO.j2 deleted file mode 100644 index 873b9c1b..00000000 --- a/templates/testing/SRCINFO.j2 +++ /dev/null @@ -1,10 +0,0 @@ -pkgbase = {{ pkg.PackageBase.name }} - pkgver = {{ pkg.Version }} - pkgrel = 1 - pkgdesc = {{ pkg.Description }} - url = {{ pkg.URL }} - arch='any' - license = {{ pkg.package_licenses | join(", ", attribute="License.Name") }} - depends = {{ pkg.package_dependencies | join(", ", attribute="DepName") }} - -pkgname = {{ pkg.Name }} diff --git a/templates/testing/alpm_package.j2 b/templates/testing/alpm_package.j2 deleted file mode 100644 index 0e741729..00000000 --- a/templates/testing/alpm_package.j2 +++ /dev/null @@ -1,16 +0,0 @@ -%FILENAME% -{{ pkgname }}-{{ pkgver }}-{{ arch }}.pkg.tar.xz - -%NAME% -{{ pkgname }} - -%VERSION% -{{ pkgver }}-1 - -%ARCH% -{{ arch }} - -{% if provides %} -%PROVIDES% -{{ provides | join("\n") }} -{% endif %} diff --git a/templates/tos/index.html b/templates/tos/index.html deleted file mode 100644 index a084034e..00000000 --- a/templates/tos/index.html +++ /dev/null @@ -1,46 +0,0 @@ -{% extends "partials/layout.html" %} - -{% block pageContent %} -
-

AUR {% trans %}Terms of Service{% endtrans %}

-
-
-

- {{ - "Logged-in as: %s" - | tr | format( - "" + request.user.Username + "") - | safe - }} -

-

- {{ - "The following documents have been updated. " - "Please review them carefully:" | tr - }} -

-
    - {% for term in unaccepted_terms %} -
  • - {{ term.Description }} - (revision {{ term.Revision }}) -
  • - {% endfor %} -
-

- {% for term in unaccepted_terms %} - - {% endfor %} - - {{ "I accept the terms and conditions above." | tr }} -

-

- -

-
-
-
-{% endblock %} diff --git a/test/Makefile b/test/Makefile deleted file mode 100644 index a6abc9de..00000000 --- a/test/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -T = $(sort $(wildcard *.t)) - -PROVE := $(shell command -v prove 2> /dev/null) - -MAKEFLAGS = -j1 - -# IMPORTANT: `sh` should come somewhere AFTER `pytest`. -check: sh pytest - -pytest: - cd .. && coverage run --append /usr/bin/pytest test - -ifdef PROVE -sh: - prove . -else -sh: $(T) -endif - -coverage: - cd .. && coverage report --include='aurweb/*' - cd .. && coverage xml --include='aurweb/*' - -clean: - $(RM) -r test-results/ - rm -f ../.coverage - -$(T): - @echo "*** $@ ***"; $(SHELL) $@ -v - -.PHONY: check coverage $(FOREIGN_TARGETS) clean $(T) diff --git a/test/README.md b/test/README.md deleted file mode 100644 index 0d7a85e2..00000000 --- a/test/README.md +++ /dev/null @@ -1,185 +0,0 @@ -aurweb Test Collection -====================== - -To run all tests, you may run `make -C test sh` and `pytest` within -the project root: - - $ make -C test sh # Run Sharness tests. - $ poetry run pytest # Run Pytest suites. - -For more control, you may use the `prove` or `pytest` command, which receives a -directory or a list of files to run, and produces a report. - -Each test script is standalone, so you may run them individually. Some tests -may receive command-line options to help debugging. - -Dependencies ------------- - -For all tests to run dependencies provided via `poetry` are required: - - $ poetry install - -Logging -------- - -Tests also require the `logging.test.conf` logging configuration -file to be used. You can specify the `LOG_CONFIG` environment -variable to override: - - $ export LOG_CONFIG=logging.test.conf - -`logging.test.conf` enables debug logging for the aurweb package, -for which we run tests against. - -Test Configuration ------------------- - -To perform any tests, we need to supply `aurweb` with a valid -configuration. For development (and testing) purposes, an example -[conf/config.dev](../conf/config.dev) can be slightly modified. - -Start off by copying `config.dev` to a new configuration. - - $ cp -v conf/config.dev conf/config - -First, we must tell `aurweb` where the root of our project -lives by replacing `YOUR_AUR_ROOT` with the path to the aurweb -repository. - - $ sed -i "s;YOUR_AUR_ROOT;/path/to/aurweb;g" conf/config - -Test Databases --------------- - -Python tests create and drop hashed database names based on -`PYTEST_CURRENT_TEST`. To run tests with a database, the database -user must have privileges to create and drop their own databases. -Typically, this is the root user, but can be configured for any -other user: - - GRANT ALL ON *.* TO 'user'@'localhost' WITH GRANT OPTION - -The aurweb platform is intended to use the `mysql` backend, but -the `sqlite` backend is still used for sharness tests. These tests -will soon be replaced with pytest suites and `sqlite` removed. - -After ensuring you've configured a test database, users can continue -on to [Running Tests](#running-tests). - -Running tests -------------- - -Makefile test targets: `sh`, `clean`. - -Recommended method of running tests: `pytest`. - -Legacy sharness tests: `make -C test sh`. - -aurweb is currently going through a refactor where the majority of -`sharness` tests have been replaced with `pytest` units. There are -still a few `sharness` tests around, and they are required to gain -as much coverage as possible over an entire test run. Users should -be writing `pytest` units for any new features. - -Run tests from the project root. - - $ cd /path/to/aurweb - -Ensure you have the proper `AUR_CONFIG` and `LOG_CONFIG` exported: - - $ export AUR_CONFIG=conf/config - $ export LOG_CONFIG=logging.test.conf - -To run `sharness` shell test suites (requires Arch Linux): - - $ make -C test sh - -To run `pytest` Python test suites: - - # With poetry-installed aurweb - $ poetry run pytest - - # With globally-installed aurweb - $ pytest - -After tests are run, one can produce coverage reports. - - # Print out a CLI coverage report. - $ coverage report - - # Produce an HTML-based coverage report. - $ coverage html - -Writing Python tests (current) ------------------------------- - -Almost all of our `pytest` suites use the database in some way. There -are a few particular testing utilities in `aurweb` that one should -keep aware of to aid testing code: - -- `db_test` pytest fixture - - Prepares test databases for the module and cleans out database - tables for each test function requiring this fixture. -- `aurweb.testing.requests.Request` - - A fake stripped down version of `fastapi.Request` that can - be passed to any functions in our codebase which use - `fastapi.Request` parameters. - -Example code: - - import pytest - - from aurweb import db - from aurweb.models.account_type import USER_ID - from aurweb.models.user import User - from aurweb.testing.requests import Request - - # We need to use the `db_test` fixture at some point - # during our test functions. - @pytest.fixture(autouse=True) - def setup(db_test: None) -> None: - return - - # Or... specify it in a dependency fixture. - @pytest.fixture - def user(db_test: None) -> User: - with db.begin(): - user = db.create(User, Username="test", - Email="test@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID) - yield user - - def test_user_login(user: User): - assert isinstance(user, User) is True - - fake_request = Request() - sid = user.login(fake_request, "testPassword") - assert sid is not None - -Writing Sharness tests (legacy) -------------------------------- - -Shell test scripts must follow the Test Anything Protocol specification: -http://testanything.org/tap-specification.html - -Python tests must be compatible with `pytest` and included in `pytest test/` -execution after setting up a configuration. - -Tests must support being run from any directory. They may use $0 to determine -their location. Python scripts should expect aurweb to be installed and -importable without toying with os.path or PYTHONPATH. - -Tests written in shell should use sharness. In general, new tests should be -consistent with existing tests unless they have a good reason not to. - -Debugging Sharness tests ---------------- - -By default, `make -C test` is quiet and does not print out verbose information -about tests being run. If a test is failing, one can look into verbose details -of sharness tests by executing them with the `--verbose` flag. Example: -`./t1100_git_auth.t --verbose`. This is particularly useful when tests happen -to fail in a remote continuous integration environment, where the reader does -not have complete access to the runner. diff --git a/test/__init__.py b/test/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/conftest.py b/test/conftest.py deleted file mode 100644 index da24ed81..00000000 --- a/test/conftest.py +++ /dev/null @@ -1,224 +0,0 @@ -""" -pytest configuration. - -The conftest.py file is used to define pytest-global fixtures -or actions run before tests. - -Module scoped fixtures: ----------------------- -- setup_database -- db_session (depends: setup_database) - -Function scoped fixtures: ------------------------- -- db_test (depends: db_session) - -Tests in aurweb which access the database **must** use the `db_test` -function fixture. Most database tests simply require this fixture in -an autouse=True setup fixture, or for fixtures used in DB tests example: - - # In scenarios which there are no other database fixtures - # or other database fixtures dependency paths don't always - # hit `db_test`. - @pytest.fixture(autouse=True) - def setup(db_test): - return - - # In scenarios where we can embed the `db_test` fixture in - # specific fixtures that already exist. - @pytest.fixture - def user(db_test): - with db.begin(): - user = db.create(User, ...) - yield user - -The `db_test` fixture triggers our module-level database fixtures, -then clears the database for each test function run in that module. -It is done this way because migration has a large cost; migrating -ahead of each function takes too long when compared to this method. -""" - -import os -import pathlib -from multiprocessing import Lock - -import py -import pytest -from prometheus_client import values -from sqlalchemy import create_engine -from sqlalchemy.engine import URL -from sqlalchemy.engine.base import Engine -from sqlalchemy.exc import ProgrammingError -from sqlalchemy.orm import scoped_session - -import aurweb.config -import aurweb.db -from aurweb import aur_logging, initdb, testing -from aurweb.testing.email import Email -from aurweb.testing.git import GitRepository -from aurweb.testing.prometheus import clear_metrics - -logger = aur_logging.get_logger(__name__) - -# Synchronization lock for database setup. -setup_lock = Lock() - -# Disable prometheus multiprocess mode for tests -values.ValueClass = values.MutexValue - - -def test_engine() -> Engine: - """ - Return a privileged SQLAlchemy engine with no database. - - This method is particularly useful for providing an engine that - can be used to create and drop databases from an SQL server. - - :return: SQLAlchemy Engine instance (not connected to a database) - """ - unix_socket = aurweb.config.get_with_fallback("database", "socket", None) - kwargs = { - "username": aurweb.config.get("database", "user"), - "password": aurweb.config.get_with_fallback("database", "password", None), - "host": aurweb.config.get("database", "host"), - "port": aurweb.config.get_with_fallback("database", "port", None), - "query": {"unix_socket": unix_socket}, - } - - backend = aurweb.config.get("database", "backend") - driver = aurweb.db.DRIVERS.get(backend) - return create_engine(URL.create(driver, **kwargs)) - - -class AlembicArgs: - """ - Masquerade an ArgumentParser like structure. - - This structure is needed to pass conftest-specific arguments - to initdb.run duration database creation. - """ - - verbose = False - use_alembic = True - - -def _create_database(engine: Engine, dbname: str) -> None: - """ - Create a test database. - - :param engine: Engine returned by test_engine() - :param dbname: Database name to create - """ - conn = engine.connect() - try: - conn.execute(f"CREATE DATABASE {dbname}") - except ProgrammingError: # pragma: no cover - # The database most likely already existed if we hit - # a ProgrammingError. Just drop the database and try - # again. If at that point things still fail, any - # exception will be propogated up to the caller. - conn.execute(f"DROP DATABASE {dbname}") - conn.execute(f"CREATE DATABASE {dbname}") - conn.close() - initdb.run(AlembicArgs) - - -def _drop_database(engine: Engine, dbname: str) -> None: - """ - Drop a test database. - - :param engine: Engine returned by test_engine() - :param dbname: Database name to drop - """ - aurweb.schema.metadata.drop_all(bind=engine) - conn = engine.connect() - conn.execute(f"DROP DATABASE {dbname}") - conn.close() - - -def setup_email(): - if not os.path.exists(Email.TEST_DIR): - # Create the directory. - os.makedirs(Email.TEST_DIR, exist_ok=True) - - # Cleanup all email files for this test suite. - prefix = Email.email_prefix(suite=True) - files = os.listdir(Email.TEST_DIR) - for file in files: - if file.startswith(prefix): - os.remove(os.path.join(Email.TEST_DIR, file)) - - -@pytest.fixture(scope="module") -def setup_database(tmp_path_factory: pathlib.Path, worker_id: str) -> None: - """Create and drop a database for the suite this fixture is used in.""" - engine = test_engine() - dbname = aurweb.db.name() - - setup_email() - _create_database(engine, dbname) - yield # Run the test function depending on this fixture. - _drop_database(engine, dbname) # Cleanup the database. - - -@pytest.fixture(scope="module") -def db_session(setup_database: None) -> scoped_session: - """ - Yield a database session based on aurweb.db.name(). - - The returned session is popped out of persistence after the test is run. - """ - # After the test runs, aurweb.db.name() ends up returning the - # configured database, because PYTEST_CURRENT_TEST is removed. - dbname = aurweb.db.name() - session = aurweb.db.get_session() - - yield session - - # Close the session and pop it. - session.close() - aurweb.db.pop_session(dbname) - - -@pytest.fixture -def db_test(db_session: scoped_session) -> None: - """ - Database test fixture. - - This fixture should be included in any tests which access the - database. It ensures that a test database is created and - alembic migrated, takes care of dropping the database when - the module is complete, and runs setup_test_db() to clear out - tables for each test. - - Tests using this fixture should access the database - session via aurweb.db.get_session(). - """ - testing.setup_test_db() - - -@pytest.fixture -def git(tmpdir: py.path.local) -> GitRepository: - yield GitRepository(tmpdir) - - -@pytest.fixture -def email_test() -> None: - """ - A decoupled test email setup fixture. - - When using the `db_test` fixture, this fixture is redundant. Otherwise, - email tests need to run through our `setup_email` function to ensure - that we set them up to be used via aurweb.testing.email.Email. - """ - setup_email() - - -@pytest.fixture -def prometheus_test(): - """ - Prometheus test fixture - - Removes any existing values from our metrics - """ - clear_metrics() diff --git a/test/scripts/cover b/test/scripts/cover deleted file mode 100755 index 1ebe596d..00000000 --- a/test/scripts/cover +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -# This script is used by sharness tests hosted in our `test` -# directory. We require a concrete script to make using this easily, -# because we often call `env` in those tests. -# -# The purpose of this script is to allow sharness tests to gather -# Python coverage when calling scripts within `aurweb`. -# -TOPLEVEL=$(dirname "$0")/../.. - -# Define a COVERAGE_FILE in our root directory. -COVERAGE_FILE="$TOPLEVEL/.coverage" \ -coverage run -L --source="$TOPLEVEL/aurweb" --append "$@" diff --git a/test/setup.sh b/test/setup.sh deleted file mode 100644 index 33238533..00000000 --- a/test/setup.sh +++ /dev/null @@ -1,262 +0,0 @@ -TOPLEVEL="$(cd "$(dirname "$0")/.." && pwd)" - -. "$TOPLEVEL/test/sharness.sh" - -# Configure python search path. -PYTHONPATH="$TOPLEVEL" -export PYTHONPATH - -# Configure paths to the Git interface scripts. -GIT_AUTH="$TOPLEVEL/aurweb/git/auth.py" -GIT_SERVE="$TOPLEVEL/aurweb/git/serve.py" -GIT_UPDATE="$TOPLEVEL/aurweb/git/update.py" -MKPKGLISTS="$TOPLEVEL/aurweb/scripts/mkpkglists.py" -VOTEREMINDER="$TOPLEVEL/aurweb/scripts/votereminder.py" -PKGMAINT="$TOPLEVEL/aurweb/scripts/pkgmaint.py" -USERMAINT="$TOPLEVEL/aurweb/scripts/usermaint.py" -AURBLUP="$TOPLEVEL/aurweb/scripts/aurblup.py" -NOTIFY="$TOPLEVEL/aurweb/scripts/notify.py" -RENDERCOMMENT="$TOPLEVEL/aurweb/scripts/rendercomment.py" - -# We reuse some of these scripts when running `env`, so add -# it to PATH; that way, env can pick up the script when loaded. -PATH="${PATH}:${TOPLEVEL}/test/scripts" -export PATH - -# Create the configuration file and a dummy notification script. -cat >config <<-EOF -[database] -backend = sqlite -name = aur.db - -[options] -aurwebdir = $TOPLEVEL -aur_location = https://aur.archlinux.org -aur_request_ml = aur-requests@lists.archlinux.org -enable-maintenance = 0 -default_timezone = UTC -maintenance-exceptions = 127.0.0.1 -commit_uri = https://aur.archlinux.org/cgit/aur.git/log/?h=%s&id=%s -localedir = $TOPLEVEL/web/locale/ -snapshot_uri = /cgit/aur.git/snapshot/%s.tar.gz - -[notifications] -notify-cmd = $NOTIFY -sendmail = ./sendmail.sh -sender = notify@aur.archlinux.org -reply-to = noreply@aur.archlinux.org - -[auth] -valid-keytypes = ssh-rsa ssh-dss ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-ed25519 -username-regex = [a-zA-Z0-9]+[.\-_]?[a-zA-Z0-9]+$ -git-serve-cmd = $GIT_SERVE -ssh-options = restrict - -[serve] -repo-path = ./aur.git/ -repo-regex = [a-z0-9][a-z0-9.+_-]*$ -git-shell-cmd = ./git-shell.sh -git-update-cmd = $GIT_UPDATE -ssh-cmdline = ssh aur@aur.archlinux.org - -[update] -max-blob-size = 256000 - -[aurblup] -db-path = $(pwd)/sync/ -sync-dbs = test -server = file://$(pwd)/remote/ - -[mkpkglists] -archivedir = $(pwd)/archive -packagesfile = packages.gz -packagesmetafile = packages-meta-v1.json.gz -packagesmetaextfile = packages-meta-ext-v1.json.gz -pkgbasefile = pkgbase.gz -userfile = users.gz -EOF - -cat >sendmail.sh <<-\EOF -#!/bin/sh -cat >>sendmail.out -EOF -chmod +x sendmail.sh - -cat >git-shell.sh <<-\EOF -#!/bin/sh -echo $AUR_USER -echo $AUR_PKGBASE -echo $GIT_NAMESPACE -EOF -chmod +x git-shell.sh - -AUR_CONFIG=config -export AUR_CONFIG - -# Create SSH public keys which will be used by the test users later. -AUTH_KEYTYPE_USER=ssh-rsa -AUTH_KEYTEXT_USER=AAAAB3NzaC1yc2EAAAADAQABAAABAQCeUafDK4jqUiRHNQfwHcYjBKLZ4Rc1sNUofHApBP6j91nIvDHZe2VUqeBmFUhBz7kXK4VbXD9nlHMun2HeshL8hXnMzymZ8Wk7+IKefj61pajJkIdttw9Tnayfg7uhg5RbFy9zpEjmGjnIVjSzOXKCwppNT+CNujpKM5FD8gso/Z+l3fD+IwrPwS1SzF1Z99nqI9n2FM/JWZqluvTqnW9WdAvBDfutXxp0R5ZiLI5TAKL2Ssp5rpL70pkLXhv+9sK545zKKlXUFmw6Pi2iVBdqdRsk9ocl49dLiNIh8CYDCO3CRQn+8EnpBhTor2TKQxGJI3mzoBwWJJxoKhD/XlYJ -AUTH_FINGERPRINT_USER=SHA256:F/OFtYAy0JCytAGUi4RUZnOsThhQtFMK7fH1YvFBCpo - -AUTH_KEYTYPE_PM=ssh-rsa -AUTH_KEYTEXT_PM=AAAAB3NzaC1yc2EAAAADAQABAAABAQC4Q2Beg6jf2r1LZ4vwT5y10dK8+/c5RaNyTwv77wF2OSLXh32xW0ovhE2lW2gqoakdGsxgM2fTtqMTl29WOsAxlGF7x9XbWhFXFUT88Daq1fAeuihkiRjfBbInSW/WcrFZ+biLBch67addtfkkd4PmAafDeeCtszAXqza+ltBG1oxAGiTXgI3LOhA1/GtLLxsi5sPUO3ZlhvwDn4Sy0aXYx8l9hop/PU4Cjn82hyRa9r+SRxQ3KtjKxcVMnZ8IyXOrBwXTukgSBR/6nSdEmO0JPkYUFuNwh3UGFKuNkrPguL5T+4YDym6czYmZJzQ7NNl2pLKYmYgBwBe5rORlWfN5 -AUTH_FINGERPRINT_PM=SHA256:xQGC6j/U1Q3NDXLl04pm+Shr1mjYUXbGMUzlm9vby4k - -AUTH_KEYTYPE_MISSING=sha-rsa -AUTH_KEYTEXT_MISSING=AAAAB3NzaC1yc2EAAAADAQABAAABAQC9UTpssBunuTBCT3KFtv+yb+cN0VmI2C9O9U7wHlkEZWxNBK8is6tnDHXBxRuvRk0LHILkTidLLFX22ZF0+TFgSz7uuEvGZVNpa2Fn2+vKJJYMvZEvb/f8VHF5/Jddt21VOyu23royTN/duiT7WIZdCtEmq5C9Y43NPfsB8FbUc+FVSYT2Lq7g1/bzvFF+CZxwCrGjC3qC7p3pshICfFR8bbWgRN33ClxIQ7MvkcDtfNu38dLotJqdfEa7NdQgba5/S586f1A4OWKc/mQJFyTaGhRBxw/cBSjqonvO0442VYLHFxlrTHoUunKyOJ8+BJfKgjWmfENC9ESY3mL/IEn5 -AUTH_FINGERPRINT_MISSING=SHA256:uB0B+30r2WA1TDMUmFcaEBjosjnFGzn33XFhiyvTL9w - -# Setup fake SSH environment. -SSH_CLIENT='1.2.3.4 1234 22' -SSH_CONNECTION='1.2.3.4 1234 4.3.2.1 22' -SSH_TTY=/dev/pts/0 -export SSH_CLIENT SSH_CONNECTION SSH_TTY - -# Initialize the test database. -python -m aurweb.initdb --no-alembic - -echo "INSERT INTO Users (ID, UserName, Passwd, Email, LangPreference, AccountTypeID) VALUES (1, 'user', '!', 'user@localhost', 'en', 1);" | sqlite3 aur.db -echo "INSERT INTO Users (ID, UserName, Passwd, Email, LangPreference, AccountTypeID) VALUES (2, 'pm', '!', 'pm@localhost', 'en', 2);" | sqlite3 aur.db -echo "INSERT INTO Users (ID, UserName, Passwd, Email, LangPreference, AccountTypeID) VALUES (3, 'dev', '!', 'dev@localhost', 'en', 3);" | sqlite3 aur.db -echo "INSERT INTO Users (ID, UserName, Passwd, Email, LangPreference, AccountTypeID) VALUES (4, 'user2', '!', 'user2@localhost', 'en', 1);" | sqlite3 aur.db -echo "INSERT INTO Users (ID, UserName, Passwd, Email, LangPreference, AccountTypeID) VALUES (5, 'user3', '!', 'user3@localhost', 'en', 1);" | sqlite3 aur.db -echo "INSERT INTO Users (ID, UserName, Passwd, Email, LangPreference, AccountTypeID) VALUES (6, 'user4', '!', 'user4@localhost', 'en', 1);" | sqlite3 aur.db -echo "INSERT INTO Users (ID, UserName, Passwd, Email, LangPreference, AccountTypeID) VALUES (7, 'pm2', '!', 'pm2@localhost', 'en', 2);" | sqlite3 aur.db -echo "INSERT INTO Users (ID, UserName, Passwd, Email, LangPreference, AccountTypeID) VALUES (8, 'pm3', '!', 'pm3@localhost', 'en', 2);" | sqlite3 aur.db -echo "INSERT INTO Users (ID, UserName, Passwd, Email, LangPreference, AccountTypeID) VALUES (9, 'pm4', '!', 'pm4@localhost', 'en', 2);" | sqlite3 aur.db - -echo "INSERT INTO SSHPubKeys (UserID, Fingerprint, PubKey) VALUES (1, '$AUTH_FINGERPRINT_USER', '$AUTH_KEYTYPE_USER $AUTH_KEYTEXT_USER');" | sqlite3 aur.db -echo "INSERT INTO SSHPubKeys (UserID, Fingerprint, PubKey) VALUES (2, '$AUTH_FINGERPRINT_PM', '$AUTH_KEYTYPE_PM $AUTH_KEYTEXT_PM');" | sqlite3 aur.db - -echo "INSERT INTO Bans (IPAddress, BanTS) VALUES ('1.3.3.7', 0);" | sqlite3 aur.db - -echo "INSERT INTO PackageBlacklist (Name) VALUES ('forbidden');" | sqlite3 aur.db -echo "INSERT INTO OfficialProviders (Name, Repo, Provides) VALUES ('official', 'core', 'official');" | sqlite3 aur.db - -# Initialize a Git repository and test packages. -GIT_AUTHOR_EMAIL=author@example.com -GIT_AUTHOR_NAME='A U Thor' -GIT_COMMITTER_EMAIL=committer@example.com -GIT_COMMITTER_NAME='C O Mitter' -export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME -export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME - -( - mkdir aur.git - cd aur.git - git init -q - git config --local commit.gpgsign false - - git checkout -q --orphan refs/namespaces/foobar/refs/heads/master - - cat >PKGBUILD <<-EOF - pkgname=foobar - pkgver=1 - pkgrel=1 - pkgdesc='aurweb test package.' - url='https://aur.archlinux.org/' - license=('GPL') - arch=('any') - depends=('python-pygit2') - source=() - md5sums=() - - package() { - echo 'Hello world!' - } - EOF - - cat >.SRCINFO <<-EOF - pkgbase = foobar - pkgdesc = aurweb test package. - pkgver = 1 - pkgrel = 1 - url = https://aur.archlinux.org/ - arch = any - license = GPL - depends = python-pygit2 - - pkgname = foobar - EOF - - git add PKGBUILD .SRCINFO - git commit -q -m 'Initial import' - - sed 's/\(pkgrel.*\)1/\12/' PKGBUILD >PKGBUILD.new - sed 's/\(pkgrel.*\)1/\12/' .SRCINFO >.SRCINFO.new - mv PKGBUILD.new PKGBUILD - mv .SRCINFO.new .SRCINFO - git commit -q -am 'Bump pkgrel' - - git checkout -q --orphan refs/namespaces/foobar2/refs/heads/master - - cat >PKGBUILD <<-EOF - pkgname=foobar2 - pkgver=1 - pkgrel=1 - pkgdesc='aurweb test package.' - url='https://aur.archlinux.org/' - license=('MIT') - arch=('any') - depends=('python-pygit2') - source=() - md5sums=() - - package() { - echo 'Hello world!' - } - EOF - - cat >.SRCINFO <<-EOF - pkgbase = foobar2 - pkgdesc = aurweb test package. - pkgver = 1 - pkgrel = 1 - url = https://aur.archlinux.org/ - arch = any - license = MIT - depends = python-pygit2 - - pkgname = foobar2 - EOF - - git add PKGBUILD .SRCINFO - git commit -q -m 'Initial import' - - git checkout -q --orphan refs/namespaces/forbidden/refs/heads/master - - cat >PKGBUILD <<-EOF - pkgname=foobar3 - pkgver=1 - pkgrel=1 - pkgdesc='aurweb test package.' - url='https://aur.archlinux.org/' - license=('MIT') - arch=('any') - depends=('python-pygit2') - source=() - md5sums=() - - package() { - echo 'Hello world!' - } - EOF - - cat >.SRCINFO <<-EOF - pkgbase = forbidden - pkgdesc = aurweb test package. - pkgver = 1 - pkgrel = 1 - url = https://aur.archlinux.org/ - arch = any - license = MIT - depends = python-pygit2 - - pkgname = foobar3 - EOF - - git add PKGBUILD .SRCINFO - git commit -q -m 'Initial import' - - git checkout -q refs/namespaces/foobar/refs/heads/master -) diff --git a/test/sharness.sh b/test/sharness.sh deleted file mode 100644 index ac13b7b6..00000000 --- a/test/sharness.sh +++ /dev/null @@ -1,964 +0,0 @@ -# Sharness test framework. -# -# Copyright (c) 2011-2012 Mathias Lafeldt -# Copyright (c) 2005-2012 Git project -# Copyright (c) 2005-2012 Junio C Hamano -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/ . - -# Public: Current version of Sharness. -SHARNESS_VERSION="1.0.0" -export SHARNESS_VERSION - -# Public: The file extension for tests. By default, it is set to "t". -: "${SHARNESS_TEST_EXTENSION:=t}" -export SHARNESS_TEST_EXTENSION - -# Public: Root directory containing tests. Tests can override this variable, -# e.g. for testing Sharness itself. -if test -z "$SHARNESS_TEST_DIRECTORY" -then - SHARNESS_TEST_DIRECTORY=$(pwd) -else - # ensure that SHARNESS_TEST_DIRECTORY is an absolute path so that it - # is valid even if the current working directory is changed - SHARNESS_TEST_DIRECTORY=$(cd "$SHARNESS_TEST_DIRECTORY" && pwd) || exit 1 -fi -export SHARNESS_TEST_DIRECTORY - -# Reset TERM to original terminal if found, otherwise save original TERM -[ "x" = "x$SHARNESS_ORIG_TERM" ] && - SHARNESS_ORIG_TERM="$TERM" || - TERM="$SHARNESS_ORIG_TERM" -# Public: The unsanitized TERM under which sharness is originally run -export SHARNESS_ORIG_TERM - -# Export SHELL_PATH -: "${SHELL_PATH:=$SHELL}" -export SHELL_PATH - -# if --tee was passed, write the output not only to the terminal, but -# additionally to the file test-results/$BASENAME.out, too. -case "$SHARNESS_TEST_TEE_STARTED, $* " in -done,*) - # do not redirect again - ;; -*' --tee '*|*' --verbose-log '*) - mkdir -p "$SHARNESS_TEST_DIRECTORY/test-results" - BASE="$SHARNESS_TEST_DIRECTORY/test-results/$(basename "$0" ".$SHARNESS_TEST_EXTENSION")" - - # Make this filename available to the sub-process in case it is using - # --verbose-log. - SHARNESS_TEST_TEE_OUTPUT_FILE="$BASE.out" - export SHARNESS_TEST_TEE_OUTPUT_FILE - - # Truncate before calling "tee -a" to get rid of the results - # from any previous runs. - : >"$SHARNESS_TEST_TEE_OUTPUT_FILE" - - (SHARNESS_TEST_TEE_STARTED="done" ${SHELL_PATH} "$0" "$@" 2>&1; - echo $? >"$BASE.exit") | tee -a "$SHARNESS_TEST_TEE_OUTPUT_FILE" - test "$(cat "$BASE.exit")" = 0 - exit - ;; -esac - -# For repeatability, reset the environment to a known state. -# TERM is sanitized below, after saving color control sequences. -LANG=C -LC_ALL=C -PAGER="cat" -TZ=UTC -EDITOR=: -export LANG LC_ALL PAGER TZ EDITOR -unset VISUAL CDPATH GREP_OPTIONS - -[ "x$TERM" != "xdumb" ] && ( - [ -t 1 ] && - tput bold >/dev/null 2>&1 && - tput setaf 1 >/dev/null 2>&1 && - tput sgr0 >/dev/null 2>&1 - ) && - color=t - -while test "$#" -ne 0; do - case "$1" in - -d|--d|--de|--deb|--debu|--debug) - debug=t; shift ;; - -i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate) - immediate=t; shift ;; - -l|--l|--lo|--lon|--long|--long-|--long-t|--long-te|--long-tes|--long-test|--long-tests) - TEST_LONG=t; export TEST_LONG; shift ;; - --in|--int|--inte|--inter|--intera|--interac|--interact|--interacti|--interactiv|--interactive|--interactive-|--interactive-t|--interactive-te|--interactive-tes|--interactive-test|--interactive-tests): - TEST_INTERACTIVE=t; export TEST_INTERACTIVE; verbose=t; shift ;; - -h|--h|--he|--hel|--help) - help=t; shift ;; - -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) - verbose=t; shift ;; - -q|--q|--qu|--qui|--quie|--quiet) - # Ignore --quiet under a TAP::Harness. Saying how many tests - # passed without the ok/not ok details is always an error. - test -z "$HARNESS_ACTIVE" && quiet=t; shift ;; - --chain-lint) - chain_lint=t; shift ;; - --no-chain-lint) - chain_lint=; shift ;; - --no-color) - color=; shift ;; - --tee) - shift ;; # was handled already - --root=*) - root=$(expr "z$1" : 'z[^=]*=\(.*\)') - shift ;; - --verbose-log) - verbose_log=t - shift ;; - *) - echo "error: unknown test option '$1'" >&2; exit 1 ;; - esac -done - -if test -n "$color"; then - # Save the color control sequences now rather than run tput - # each time say_color() is called. This is done for two - # reasons: - # * TERM will be changed to dumb - # * HOME will be changed to a temporary directory and tput - # might need to read ~/.terminfo from the original HOME - # directory to get the control sequences - # Note: This approach assumes the control sequences don't end - # in a newline for any terminal of interest (command - # substitutions strip trailing newlines). Given that most - # (all?) terminals in common use are related to ECMA-48, this - # shouldn't be a problem. - say_color_error=$(tput bold; tput setaf 1) # bold red - say_color_skip=$(tput setaf 4) # blue - say_color_warn=$(tput setaf 3) # brown/yellow - say_color_pass=$(tput setaf 2) # green - say_color_info=$(tput setaf 6) # cyan - say_color_reset=$(tput sgr0) - say_color_raw="" # no formatting for normal text - say_color() { - test -z "$1" && test -n "$quiet" && return - case "$1" in - error) say_color_color=$say_color_error ;; - skip) say_color_color=$say_color_skip ;; - warn) say_color_color=$say_color_warn ;; - pass) say_color_color=$say_color_pass ;; - info) say_color_color=$say_color_info ;; - *) say_color_color=$say_color_raw ;; - esac - shift - printf '%s%s%s\n' "$say_color_color" "$*" "$say_color_reset" - } -else - say_color() { - test -z "$1" && test -n "$quiet" && return - shift - printf '%s\n' "$*" - } -fi - -TERM=dumb -export TERM - -error() { - say_color error "error: $*" - EXIT_OK=t - exit 1 -} - -say() { - say_color info "$*" -} - -test -n "${test_description:-}" || error "Test script did not set test_description." - -if test "$help" = "t"; then - echo "$test_description" - exit 0 -fi - -exec 5>&1 -exec 6<&0 -if test "$verbose_log" = "t" -then - exec 3>>"$SHARNESS_TEST_TEE_OUTPUT_FILE" 4>&3 -elif test "$verbose" = "t" -then - exec 4>&2 3>&1 -else - exec 4>/dev/null 3>/dev/null -fi - -test_failure=0 -test_count=0 -test_fixed=0 -test_broken=0 -test_success=0 - -die() { - code=$? - if test -n "$EXIT_OK"; then - exit $code - else - echo >&5 "FATAL: Unexpected exit with code $code" - exit 1 - fi -} - -EXIT_OK= -trap 'die' EXIT - -# Public: Define that a test prerequisite is available. -# -# The prerequisite can later be checked explicitly using test_have_prereq or -# implicitly by specifying the prerequisite name in calls to test_expect_success -# or test_expect_failure. -# -# $1 - Name of prerequisite (a simple word, in all capital letters by convention) -# -# Examples -# -# # Set PYTHON prerequisite if interpreter is available. -# command -v python >/dev/null && test_set_prereq PYTHON -# -# # Set prerequisite depending on some variable. -# test -z "$NO_GETTEXT" && test_set_prereq GETTEXT -# -# Returns nothing. -test_set_prereq() { - satisfied_prereq="$satisfied_prereq$1 " -} -satisfied_prereq=" " - -# Public: Check if one or more test prerequisites are defined. -# -# The prerequisites must have previously been set with test_set_prereq. -# The most common use of this is to skip all the tests if some essential -# prerequisite is missing. -# -# $1 - Comma-separated list of test prerequisites. -# -# Examples -# -# # Skip all remaining tests if prerequisite is not set. -# if ! test_have_prereq PERL; then -# skip_all='skipping perl interface tests, perl not available' -# test_done -# fi -# -# Returns 0 if all prerequisites are defined or 1 otherwise. -test_have_prereq() { - # prerequisites can be concatenated with ',' - save_IFS=$IFS - IFS=, - set -- $@ - IFS=$save_IFS - - total_prereq=0 - ok_prereq=0 - missing_prereq= - - for prerequisite; do - case "$prerequisite" in - !*) - negative_prereq=t - prerequisite=${prerequisite#!} - ;; - *) - negative_prereq= - esac - - total_prereq=$((total_prereq + 1)) - case "$satisfied_prereq" in - *" $prerequisite "*) - satisfied_this_prereq=t - ;; - *) - satisfied_this_prereq= - esac - - case "$satisfied_this_prereq,$negative_prereq" in - t,|,t) - ok_prereq=$((ok_prereq + 1)) - ;; - *) - # Keep a list of missing prerequisites; restore - # the negative marker if necessary. - prerequisite=${negative_prereq:+!}$prerequisite - if test -z "$missing_prereq"; then - missing_prereq=$prerequisite - else - missing_prereq="$prerequisite,$missing_prereq" - fi - esac - done - - test $total_prereq = $ok_prereq -} - -# You are not expected to call test_ok_ and test_failure_ directly, use -# the text_expect_* functions instead. - -test_ok_() { - test_success=$((test_success + 1)) - say_color "" "ok $test_count - $*" -} - -test_failure_() { - test_failure=$((test_failure + 1)) - say_color error "not ok $test_count - $1" - shift - echo "$@" | sed -e 's/^/# /' - test "$immediate" = "" || { EXIT_OK=t; exit 1; } -} - -test_known_broken_ok_() { - test_fixed=$((test_fixed + 1)) - say_color error "ok $test_count - $* # TODO known breakage vanished" -} - -test_known_broken_failure_() { - test_broken=$((test_broken + 1)) - say_color warn "not ok $test_count - $* # TODO known breakage" -} - -# Public: Execute commands in debug mode. -# -# Takes a single argument and evaluates it only when the test script is started -# with --debug. This is primarily meant for use during the development of test -# scripts. -# -# $1 - Commands to be executed. -# -# Examples -# -# test_debug "cat some_log_file" -# -# Returns the exit code of the last command executed in debug mode or 0 -# otherwise. -test_debug() { - test "$debug" = "" || eval "$1" -} - -# Public: Stop execution and start a shell. -# -# This is useful for debugging tests and only makes sense together with "-v". -# Be sure to remove all invocations of this command before submitting. -test_pause() { - if test "$verbose" = t; then - "$SHELL_PATH" <&6 >&3 2>&4 - else - error >&5 "test_pause requires --verbose" - fi -} - -test_eval_() { - # This is a separate function because some tests use - # "return" to end a test_expect_success block early. - case ",$test_prereq," in - *,INTERACTIVE,*) - eval "$*" - ;; - *) - eval &3 2>&4 "$*" - ;; - esac -} - -test_run_() { - test_cleanup=: - expecting_failure=$2 - test_eval_ "$1" - eval_ret=$? - - if test "$chain_lint" = "t"; then - test_eval_ "(exit 117) && $1" - if test "$?" != 117; then - error "bug in the test script: broken &&-chain: $1" - fi - fi - - if test -z "$immediate" || test $eval_ret = 0 || test -n "$expecting_failure"; then - test_eval_ "$test_cleanup" - fi - if test "$verbose" = "t" && test -n "$HARNESS_ACTIVE"; then - echo "" - fi - return "$eval_ret" -} - -test_skip_() { - test_count=$((test_count + 1)) - to_skip= - for skp in $SKIP_TESTS; do - case $this_test.$test_count in - $skp) - to_skip=t - break - esac - done - if test -z "$to_skip" && test -n "$test_prereq" && ! test_have_prereq "$test_prereq"; then - to_skip=t - fi - case "$to_skip" in - t) - of_prereq= - if test "$missing_prereq" != "$test_prereq"; then - of_prereq=" of $test_prereq" - fi - - say_color skip >&3 "skipping test: $*" - say_color skip "ok $test_count # skip $1 (missing $missing_prereq${of_prereq})" - : true - ;; - *) - false - ;; - esac -} - -# Public: Run test commands and expect them to succeed. -# -# When the test passed, an "ok" message is printed and the number of successful -# tests is incremented. When it failed, a "not ok" message is printed and the -# number of failed tests is incremented. -# -# With --immediate, exit test immediately upon the first failed test. -# -# Usually takes two arguments: -# $1 - Test description -# $2 - Commands to be executed. -# -# With three arguments, the first will be taken to be a prerequisite: -# $1 - Comma-separated list of test prerequisites. The test will be skipped if -# not all of the given prerequisites are set. To negate a prerequisite, -# put a "!" in front of it. -# $2 - Test description -# $3 - Commands to be executed. -# -# Examples -# -# test_expect_success \ -# 'git-write-tree should be able to write an empty tree.' \ -# 'tree=$(git-write-tree)' -# -# # Test depending on one prerequisite. -# test_expect_success TTY 'git --paginate rev-list uses a pager' \ -# ' ... ' -# -# # Multiple prerequisites are separated by a comma. -# test_expect_success PERL,PYTHON 'yo dawg' \ -# ' test $(perl -E 'print eval "1 +" . qx[python -c "print 2"]') == "4" ' -# -# Returns nothing. -test_expect_success() { - test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq= - test "$#" = 2 || error "bug in the test script: not 2 or 3 parameters to test_expect_success" - export test_prereq - if ! test_skip_ "$@"; then - say >&3 "expecting success: $2" - if test_run_ "$2"; then - test_ok_ "$1" - else - test_failure_ "$@" - fi - fi - echo >&3 "" -} - -# Public: Run test commands and expect them to fail. Used to demonstrate a known -# breakage. -# -# This is NOT the opposite of test_expect_success, but rather used to mark a -# test that demonstrates a known breakage. -# -# When the test passed, an "ok" message is printed and the number of fixed tests -# is incremented. When it failed, a "not ok" message is printed and the number -# of tests still broken is incremented. -# -# Failures from these tests won't cause --immediate to stop. -# -# Usually takes two arguments: -# $1 - Test description -# $2 - Commands to be executed. -# -# With three arguments, the first will be taken to be a prerequisite: -# $1 - Comma-separated list of test prerequisites. The test will be skipped if -# not all of the given prerequisites are set. To negate a prerequisite, -# put a "!" in front of it. -# $2 - Test description -# $3 - Commands to be executed. -# -# Returns nothing. -test_expect_failure() { - test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq= - test "$#" = 2 || error "bug in the test script: not 2 or 3 parameters to test_expect_failure" - export test_prereq - if ! test_skip_ "$@"; then - say >&3 "checking known breakage: $2" - if test_run_ "$2" expecting_failure; then - test_known_broken_ok_ "$1" - else - test_known_broken_failure_ "$1" - fi - fi - echo >&3 "" -} - -# Public: Run test commands and expect anything from them. Used when a -# test is not stable or not finished for some reason. -# -# When the test passed, an "ok" message is printed, but the number of -# fixed tests is not incremented. -# -# When it failed, a "not ok ... # TODO known breakage" message is -# printed, and the number of tests still broken is incremented. -# -# Failures from these tests won't cause --immediate to stop. -# -# Usually takes two arguments: -# $1 - Test description -# $2 - Commands to be executed. -# -# With three arguments, the first will be taken to be a prerequisite: -# $1 - Comma-separated list of test prerequisites. The test will be skipped if -# not all of the given prerequisites are set. To negate a prerequisite, -# put a "!" in front of it. -# $2 - Test description -# $3 - Commands to be executed. -# -# Returns nothing. -test_expect_unstable() { - test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq= - test "$#" = 2 || error "bug in the test script: not 2 or 3 parameters to test_expect_unstable" - export test_prereq - if ! test_skip_ "$@"; then - say >&3 "checking unstable test: $2" - if test_run_ "$2" unstable; then - test_ok_ "$1" - else - test_known_broken_failure_ "$1" - fi - fi - echo >&3 "" -} - -# Public: Run command and ensure that it fails in a controlled way. -# -# Use it instead of "! ". For example, when dies due to a -# segfault, test_must_fail diagnoses it as an error, while "! " would -# mistakenly be treated as just another expected failure. -# -# This is one of the prefix functions to be used inside test_expect_success or -# test_expect_failure. -# -# $1.. - Command to be executed. -# -# Examples -# -# test_expect_success 'complain and die' ' -# do something && -# do something else && -# test_must_fail git checkout ../outerspace -# ' -# -# Returns 1 if the command succeeded (exit code 0). -# Returns 1 if the command died by signal (exit codes 130-192) -# Returns 1 if the command could not be found (exit code 127). -# Returns 0 otherwise. -test_must_fail() { - "$@" - exit_code=$? - if test $exit_code = 0; then - echo >&2 "test_must_fail: command succeeded: $*" - return 1 - elif test $exit_code -gt 129 -a $exit_code -le 192; then - echo >&2 "test_must_fail: died by signal: $*" - return 1 - elif test $exit_code = 127; then - echo >&2 "test_must_fail: command not found: $*" - return 1 - fi - return 0 -} - -# Public: Run command and ensure that it succeeds or fails in a controlled way. -# -# Similar to test_must_fail, but tolerates success too. Use it instead of -# " || :" to catch failures caused by a segfault, for instance. -# -# This is one of the prefix functions to be used inside test_expect_success or -# test_expect_failure. -# -# $1.. - Command to be executed. -# -# Examples -# -# test_expect_success 'some command works without configuration' ' -# test_might_fail git config --unset all.configuration && -# do something -# ' -# -# Returns 1 if the command died by signal (exit codes 130-192) -# Returns 1 if the command could not be found (exit code 127). -# Returns 0 otherwise. -test_might_fail() { - "$@" - exit_code=$? - if test $exit_code -gt 129 -a $exit_code -le 192; then - echo >&2 "test_might_fail: died by signal: $*" - return 1 - elif test $exit_code = 127; then - echo >&2 "test_might_fail: command not found: $*" - return 1 - fi - return 0 -} - -# Public: Run command and ensure it exits with a given exit code. -# -# This is one of the prefix functions to be used inside test_expect_success or -# test_expect_failure. -# -# $1 - Expected exit code. -# $2.. - Command to be executed. -# -# Examples -# -# test_expect_success 'Merge with d/f conflicts' ' -# test_expect_code 1 git merge "merge msg" B master -# ' -# -# Returns 0 if the expected exit code is returned or 1 otherwise. -test_expect_code() { - want_code=$1 - shift - "$@" - exit_code=$? - if test "$exit_code" = "$want_code"; then - return 0 - fi - - echo >&2 "test_expect_code: command exited with $exit_code, we wanted $want_code $*" - return 1 -} - -# Public: Compare two files to see if expected output matches actual output. -# -# The TEST_CMP variable defines the command used for the comparison; it -# defaults to "diff -u". Only when the test script was started with --verbose, -# will the command's output, the diff, be printed to the standard output. -# -# This is one of the prefix functions to be used inside test_expect_success or -# test_expect_failure. -# -# $1 - Path to file with expected output. -# $2 - Path to file with actual output. -# -# Examples -# -# test_expect_success 'foo works' ' -# echo expected >expected && -# foo >actual && -# test_cmp expected actual -# ' -# -# Returns the exit code of the command set by TEST_CMP. -test_cmp() { - ${TEST_CMP:-diff -u} "$@" -} - -# Public: portably print a sequence of numbers. -# -# seq is not in POSIX and GNU seq might not be available everywhere, -# so it is nice to have a seq implementation, even a very simple one. -# -# $1 - Starting number. -# $2 - Ending number. -# -# Examples -# -# test_expect_success 'foo works 10 times' ' -# for i in $(test_seq 1 10) -# do -# foo || return -# done -# ' -# -# Returns 0 if all the specified numbers can be displayed. -test_seq() { - i="$1" - j="$2" - while test "$i" -le "$j" - do - echo "$i" || return - i=$(("$i" + 1)) - done -} - -# Public: Check if the file expected to be empty is indeed empty, and barfs -# otherwise. -# -# $1 - File to check for emptiness. -# -# Returns 0 if file is empty, 1 otherwise. -test_must_be_empty() { - if test -s "$1" - then - echo "'$1' is not empty, it contains:" - cat "$1" - return 1 - fi -} - -# debugging-friendly alternatives to "test [-f|-d|-e]" -# The commands test the existence or non-existence of $1. $2 can be -# given to provide a more precise diagnosis. -test_path_is_file () { - if ! test -f "$1" - then - echo "File $1 doesn't exist. $2" - false - fi -} - -test_path_is_dir () { - if ! test -d "$1" - then - echo "Directory $1 doesn't exist. $2" - false - fi -} - -# Check if the directory exists and is empty as expected, barf otherwise. -test_dir_is_empty () { - test_path_is_dir "$1" && - if test -n "$(find "$1" -mindepth 1 -maxdepth 1)" - then - echo "Directory '$1' is not empty, it contains:" - ls -la "$1" - return 1 - fi -} - -# Public: Schedule cleanup commands to be run unconditionally at the end of a -# test. -# -# If some cleanup command fails, the test will not pass. With --immediate, no -# cleanup is done to help diagnose what went wrong. -# -# This is one of the prefix functions to be used inside test_expect_success or -# test_expect_failure. -# -# $1.. - Commands to prepend to the list of cleanup commands. -# -# Examples -# -# test_expect_success 'test core.capslock' ' -# git config core.capslock true && -# test_when_finished "git config --unset core.capslock" && -# do_something -# ' -# -# Returns the exit code of the last cleanup command executed. -test_when_finished() { - test_cleanup="{ $* - } && (exit \"\$eval_ret\"); eval_ret=\$?; $test_cleanup" -} - -# Public: Schedule cleanup commands to be run unconditionally when all tests -# have run. -# -# This can be used to clean up things like test databases. It is not needed to -# clean up temporary files, as test_done already does that. -# -# Examples: -# -# cleanup mysql -e "DROP DATABASE mytest" -# -# Returns the exit code of the last cleanup command executed. -final_cleanup= -cleanup() { - final_cleanup="{ $* - } && (exit \"\$eval_ret\"); eval_ret=\$?; $final_cleanup" -} - -# Public: Summarize test results and exit with an appropriate error code. -# -# Must be called at the end of each test script. -# -# Can also be used to stop tests early and skip all remaining tests. For this, -# set skip_all to a string explaining why the tests were skipped before calling -# test_done. -# -# Examples -# -# # Each test script must call test_done at the end. -# test_done -# -# # Skip all remaining tests if prerequisite is not set. -# if ! test_have_prereq PERL; then -# skip_all='skipping perl interface tests, perl not available' -# test_done -# fi -# -# Returns 0 if all tests passed or 1 if there was a failure. -test_done() { - EXIT_OK=t - - if test -z "$HARNESS_ACTIVE"; then - test_results_dir="$SHARNESS_TEST_DIRECTORY/test-results" - mkdir -p "$test_results_dir" - test_results_path="$test_results_dir/$this_test.$$.counts" - - cat >>"$test_results_path" <<-EOF - total $test_count - success $test_success - fixed $test_fixed - broken $test_broken - failed $test_failure - - EOF - fi - - if test "$test_fixed" != 0; then - say_color error "# $test_fixed known breakage(s) vanished; please update test(s)" - fi - if test "$test_broken" != 0; then - say_color warn "# still have $test_broken known breakage(s)" - fi - if test "$test_broken" != 0 || test "$test_fixed" != 0; then - test_remaining=$((test_count - test_broken - test_fixed)) - msg="remaining $test_remaining test(s)" - else - test_remaining=$test_count - msg="$test_count test(s)" - fi - - case "$test_failure" in - 0) - # Maybe print SKIP message - if test -n "$skip_all" && test $test_count -gt 0; then - error "Can't use skip_all after running some tests" - fi - [ -z "$skip_all" ] || skip_all=" # SKIP $skip_all" - - if test $test_remaining -gt 0; then - say_color pass "# passed all $msg" - fi - say "1..$test_count$skip_all" - - test_eval_ "$final_cleanup" - - test -d "$remove_trash" && - cd "$(dirname "$remove_trash")" && - rm -rf "$(basename "$remove_trash")" - - exit 0 ;; - - *) - say_color error "# failed $test_failure among $msg" - say "1..$test_count" - - exit 1 ;; - - esac -} - -# Public: Source directory of test code and sharness library. -# This directory may be different from the directory in which tests are -# being run. -: "${SHARNESS_TEST_SRCDIR:=$(cd "$(dirname "$0")" && pwd)}" -export SHARNESS_TEST_SRCDIR - -# Public: Build directory that will be added to PATH. By default, it is set to -# the parent directory of SHARNESS_TEST_DIRECTORY. -: "${SHARNESS_BUILD_DIRECTORY:="$SHARNESS_TEST_DIRECTORY/.."}" -PATH="$SHARNESS_BUILD_DIRECTORY:$PATH" -export PATH SHARNESS_BUILD_DIRECTORY - -# Public: Path to test script currently executed. -SHARNESS_TEST_FILE="$0" -export SHARNESS_TEST_FILE - -# Prepare test area. -SHARNESS_TRASH_DIRECTORY="trash_directory.$(basename "$SHARNESS_TEST_FILE" ".$SHARNESS_TEST_EXTENSION")" -test -n "$root" && SHARNESS_TRASH_DIRECTORY="$root/$SHARNESS_TRASH_DIRECTORY" -case "$SHARNESS_TRASH_DIRECTORY" in -/*) ;; # absolute path is good - *) SHARNESS_TRASH_DIRECTORY="$SHARNESS_TEST_DIRECTORY/$SHARNESS_TRASH_DIRECTORY" ;; -esac -test "$debug" = "t" || remove_trash="$SHARNESS_TRASH_DIRECTORY" -rm -rf "$SHARNESS_TRASH_DIRECTORY" || { - EXIT_OK=t - echo >&5 "FATAL: Cannot prepare test area" - exit 1 -} - - -# -# Load any extensions in $srcdir/sharness.d/*.sh -# -if test -d "${SHARNESS_TEST_SRCDIR}/sharness.d" -then - for file in "${SHARNESS_TEST_SRCDIR}"/sharness.d/*.sh - do - # Ensure glob was not an empty match: - test -e "${file}" || break - - if test -n "$debug" - then - echo >&5 "sharness: loading extensions from ${file}" - fi - . "${file}" - if test $? != 0 - then - echo >&5 "sharness: Error loading ${file}. Aborting." - exit 1 - fi - done -fi - -# Public: Empty trash directory, the test area, provided for each test. The HOME -# variable is set to that directory too. -export SHARNESS_TRASH_DIRECTORY - -HOME="$SHARNESS_TRASH_DIRECTORY" -export HOME - -mkdir -p "$SHARNESS_TRASH_DIRECTORY" || exit 1 -# Use -P to resolve symlinks in our working directory so that the cwd -# in subprocesses like git equals our $PWD (for pathname comparisons). -cd -P "$SHARNESS_TRASH_DIRECTORY" || exit 1 - -this_test=${SHARNESS_TEST_FILE##*/} -this_test=${this_test%.$SHARNESS_TEST_EXTENSION} -for skp in $SKIP_TESTS; do - case "$this_test" in - $skp) - say_color info >&3 "skipping test $this_test altogether" - skip_all="skip all tests in $this_test" - test_done - esac -done - -test -n "$TEST_LONG" && test_set_prereq EXPENSIVE -test -n "$TEST_INTERACTIVE" && test_set_prereq INTERACTIVE - -# Make sure this script ends with code 0 -: - -# vi: set ts=4 sw=4 noet : diff --git a/test/t1100-git-auth.t b/test/t1100-git-auth.t deleted file mode 100755 index b968f9bb..00000000 --- a/test/t1100-git-auth.t +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -test_description='git-auth tests' - -. "$(dirname "$0")/setup.sh" - - -test_expect_success 'Test basic authentication.' ' - cover "$GIT_AUTH" "$AUTH_KEYTYPE_USER" "$AUTH_KEYTEXT_USER" >out && - grep -q AUR_USER=user out && - grep -q AUR_PRIVILEGED=0 out -' - -test_expect_success 'Test Package Maintainer authentication.' ' - cover "$GIT_AUTH" "$AUTH_KEYTYPE_PM" "$AUTH_KEYTEXT_PM" >out && - grep -q AUR_USER=pm out && - grep -q AUR_PRIVILEGED=1 out -' - -test_expect_success 'Test authentication with an unsupported key type.' ' - test_must_fail cover "$GIT_AUTH" ssh-xxx "$AUTH_KEYTEXT_USER" -' - -test_expect_success 'Test authentication with a wrong key.' ' - cover "$GIT_AUTH" "$AUTH_KEYTYPE_MISSING" "$AUTH_KEYTEXT_MISSING" >out - test_must_be_empty out -' - -test_done diff --git a/test/t1200-git-serve.t b/test/t1200-git-serve.t deleted file mode 100755 index a2566bd4..00000000 --- a/test/t1200-git-serve.t +++ /dev/null @@ -1,536 +0,0 @@ -#!/bin/sh - -test_description='git-serve tests' - -. "$(dirname $0)/setup.sh" - -test_expect_success 'Test interactive shell.' ' - cover "$GIT_SERVE" 2>&1 | grep -q "Interactive shell is disabled." -' - -test_expect_success 'Test help.' ' - SSH_ORIGINAL_COMMAND=help cover "$GIT_SERVE" 2>actual && - save_IFS=$IFS - IFS= - while read -r line; do - echo $line | grep -q "^Commands:$" && continue - echo $line | grep -q "^ [a-z]" || return 1 - [ ${#line} -le 80 ] || return 1 - done config && - test_must_fail \ - env SSH_ORIGINAL_COMMAND=help \ - cover "$GIT_SERVE" 2>actual && - cat >expected <<-EOF && - The AUR is down due to maintenance. We will be back soon. - EOF - test_cmp expected actual && - mv config.old config -' - -test_expect_success 'Test IP address logging.' ' - SSH_ORIGINAL_COMMAND=help AUR_USER=user cover "$GIT_SERVE" 2>actual && - cat >expected <<-EOF && - 1.2.3.4 - EOF - echo "SELECT LastSSHLoginIPAddress FROM Users WHERE UserName = '"'"'user'"'"';" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success 'Test IP address bans.' ' - SSH_CLIENT_ORIG="$SSH_CLIENT" && - SSH_CLIENT="1.3.3.7 1337 22" && - test_must_fail \ - env SSH_ORIGINAL_COMMAND=help \ - cover "$GIT_SERVE" 2>actual && - cat >expected <<-EOF && - The SSH interface is disabled for your IP address. - EOF - test_cmp expected actual && - SSH_CLIENT="$SSH_CLIENT_ORIG" -' - -test_expect_success 'Test list-repos.' ' - # insert our test packages - echo "INSERT INTO PackageBases (Name, SubmittedTS, \ - ModifiedTS, SubmitterUID, MaintainerUID, FlaggerComment) \ - VALUES ('"'"'foobar'"'"', 0, 0, 1, 1, '"'"''"'"');" | \ - sqlite3 aur.db - echo "INSERT INTO PackageBases (Name, SubmittedTS, \ - ModifiedTS, SubmitterUID, MaintainerUID, FlaggerComment) \ - VALUES ('"'"'foobar2'"'"', 0, 0, 2, 2, '"'"''"'"');" | \ - sqlite3 aur.db - cat >expected <<-EOF && - *foobar - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=user \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual -' - -test_expect_success 'Test git-receive-pack.' ' - cat >expected <<-EOF && - user - foobar - foobar - EOF - SSH_ORIGINAL_COMMAND="git-receive-pack /foobar.git/" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual -' - -test_expect_success 'Test git-receive-pack with an invalid repository name.' ' - test_must_fail \ - env SSH_ORIGINAL_COMMAND="git-receive-pack /!.git/" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual -' - -test_expect_success "Test git-upload-pack." ' - cat >expected <<-EOF && - user - foobar - foobar - EOF - SSH_ORIGINAL_COMMAND="git-upload-pack /foobar.git/" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual -' - -test_expect_success "Try to pull from someone else's repository." ' - cat >expected <<-EOF && - user - foobar2 - foobar2 - EOF - SSH_ORIGINAL_COMMAND="git-upload-pack /foobar2.git/" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual -' - -test_expect_success "Try to push to someone else's repository." ' - test_must_fail \ - env SSH_ORIGINAL_COMMAND="git-receive-pack /foobar2.git/" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 -' - -test_expect_success "Try to push to someone else's repository as Package Maintainer." ' - cat >expected <<-EOF && - pm - foobar - foobar - EOF - SSH_ORIGINAL_COMMAND="git-receive-pack /foobar.git/" \ - AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual -' - -test_expect_success "Test restore." ' - # Delete from DB - echo "DELETE FROM PackageBases WHERE Name = '"'"'foobar'"'"';" | \ - sqlite3 aur.db && - # "Create branch" as if it had been there - new=$(git -C aur.git rev-parse HEAD^) && - echo $new > aur.git/.git/refs/heads/foobar && - # Restore deleted package - SSH_ORIGINAL_COMMAND="restore foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - # We should find foobar with a new ID (3) in the DB after restore - echo "SELECT ID FROM PackageBases WHERE Name = '"'"'foobar'"'"';" | \ - sqlite3 aur.db >actual && - cat >expected <<-EOF && - 3 - EOF - test_cmp expected actual -' - -test_expect_success "Try to restore an existing package base." ' - test_must_fail \ - env SSH_ORIGINAL_COMMAND="restore foobar2"\ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 -' - -test_expect_success "Disown all package bases." ' - SSH_ORIGINAL_COMMAND="disown foobar" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 && - SSH_ORIGINAL_COMMAND="disown foobar2" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual && - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual -' - -test_expect_success "Adopt a package base as a regular user." ' - SSH_ORIGINAL_COMMAND="adopt foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - foobar - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual -' - -test_expect_success "Adopt an already adopted package base." ' - test_must_fail \ - env SSH_ORIGINAL_COMMAND="adopt foobar" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 -' - -test_expect_success "Adopt a package base as a Package Maintainer." ' - SSH_ORIGINAL_COMMAND="adopt foobar2" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - *foobar2 - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual -' - -test_expect_success "Disown one's own package base as a regular user." ' - SSH_ORIGINAL_COMMAND="disown foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual -' - -test_expect_success "Disown one's own package base as a Package Maintainer." ' - SSH_ORIGINAL_COMMAND="disown foobar2" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual -' - -test_expect_success "Try to steal another user's package as a regular user." ' - SSH_ORIGINAL_COMMAND="adopt foobar2" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 && - test_must_fail \ - env SSH_ORIGINAL_COMMAND="adopt foobar2" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual && - cat >expected <<-EOF && - *foobar2 - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual && - SSH_ORIGINAL_COMMAND="disown foobar2" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 -' - -test_expect_success "Try to steal another user's package as a Package Maintainer." ' - SSH_ORIGINAL_COMMAND="adopt foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - SSH_ORIGINAL_COMMAND="adopt foobar" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual && - cat >expected <<-EOF && - foobar - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual && - SSH_ORIGINAL_COMMAND="disown foobar" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 -' - -test_expect_success "Try to disown another user's package as a regular user." ' - SSH_ORIGINAL_COMMAND="adopt foobar2" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 && - test_must_fail \ - env SSH_ORIGINAL_COMMAND="disown foobar2" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - *foobar2 - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual && - SSH_ORIGINAL_COMMAND="disown foobar2" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 -' - -test_expect_success "Try to disown another user's package as a Package Maintainer." ' - SSH_ORIGINAL_COMMAND="adopt foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - SSH_ORIGINAL_COMMAND="disown foobar" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual && - SSH_ORIGINAL_COMMAND="disown foobar" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 -' - -test_expect_success "Adopt a package base and add co-maintainers." ' - SSH_ORIGINAL_COMMAND="adopt foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - SSH_ORIGINAL_COMMAND="set-comaintainers foobar user3 user4" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - 5|3|1 - 6|3|2 - EOF - echo "SELECT * FROM PackageComaintainers ORDER BY Priority;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Update package base co-maintainers." ' - SSH_ORIGINAL_COMMAND="set-comaintainers foobar user2 user3 user4" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - 4|3|1 - 5|3|2 - 6|3|3 - EOF - echo "SELECT * FROM PackageComaintainers ORDER BY Priority;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Try to add co-maintainers to an orphan package base." ' - test_must_fail \ - env SSH_ORIGINAL_COMMAND="set-comaintainers foobar2 user2 user3 user4" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - 4|3|1 - 5|3|2 - 6|3|3 - EOF - echo "SELECT * FROM PackageComaintainers ORDER BY Priority;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Disown a package base and check (co-)maintainer list." ' - SSH_ORIGINAL_COMMAND="disown foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - foobar - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=user2 AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual && - cat >expected <<-EOF && - 5|3|1 - 6|3|2 - EOF - echo "SELECT * FROM PackageComaintainers ORDER BY Priority;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Force-disown a package base and check (co-)maintainer list." ' - SSH_ORIGINAL_COMMAND="disown foobar" AUR_USER=pm AUR_PRIVILEGED=1 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - EOF - SSH_ORIGINAL_COMMAND="list-repos" AUR_USER=user3 AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 >actual && - test_cmp expected actual && - cat >expected <<-EOF && - EOF - echo "SELECT * FROM PackageComaintainers ORDER BY Priority;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Check whether package requests are closed when disowning." ' - SSH_ORIGINAL_COMMAND="adopt foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat <<-EOD | sqlite3 aur.db && - INSERT INTO PackageRequests (ID, ReqTypeID, PackageBaseID, PackageBaseName, UsersID, Comments, ClosureComment) VALUES (1, 2, 3, '"'"'foobar'"'"', 4, '"'"''"'"', '"'"''"'"'); - INSERT INTO PackageRequests (ID, ReqTypeID, PackageBaseID, PackageBaseName, UsersID, Comments, ClosureComment) VALUES (2, 3, 3, '"'"'foobar'"'"', 5, '"'"''"'"', '"'"''"'"'); - INSERT INTO PackageRequests (ID, ReqTypeID, PackageBaseID, PackageBaseName, UsersID, Comments, ClosureComment) VALUES (3, 2, 2, '"'"'foobar2'"'"', 6, '"'"''"'"', '"'"''"'"'); - EOD - >sendmail.out && - SSH_ORIGINAL_COMMAND="disown foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat <<-EOD >expected && - Subject: [PRQ#1] Orphan Request for foobar Accepted - EOD - grep "^Subject.*PRQ" sendmail.out >sendmail.parts && - test_cmp sendmail.parts expected && - cat <<-EOD >expected && - 1|2||The user user disowned the package. - EOD - echo "SELECT ID, Status, ClosedUID, ClosureComment FROM PackageRequests WHERE ClosedTS > 0;" | sqlite3 aur.db >actual && - test_cmp actual expected -' - -test_expect_success "Flag a package base out-of-date." ' - SSH_ORIGINAL_COMMAND="flag foobar Because." AUR_USER=user2 AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - 1|Because. - EOF - echo "SELECT OutOfDateTS IS NOT NULL, FlaggerComment FROM PackageBases WHERE ID = 3;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Unflag a package base as flagger." ' - SSH_ORIGINAL_COMMAND="unflag foobar" AUR_USER=user2 AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - 0|Because. - EOF - echo "SELECT OutOfDateTS IS NOT NULL, FlaggerComment FROM PackageBases WHERE ID = 3;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Unflag a package base as maintainer." ' - SSH_ORIGINAL_COMMAND="adopt foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - SSH_ORIGINAL_COMMAND="flag foobar Because." AUR_USER=user2 AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - SSH_ORIGINAL_COMMAND="unflag foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - 0|Because. - EOF - echo "SELECT OutOfDateTS IS NOT NULL, FlaggerComment FROM PackageBases WHERE ID = 3;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Unflag a package base as random user." ' - SSH_ORIGINAL_COMMAND="flag foobar Because." AUR_USER=user2 AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - SSH_ORIGINAL_COMMAND="unflag foobar" AUR_USER=user3 AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - 1|Because. - EOF - echo "SELECT OutOfDateTS IS NOT NULL, FlaggerComment FROM PackageBases WHERE ID = 3;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Flag using a comment which is too short." ' - SSH_ORIGINAL_COMMAND="unflag foobar" AUR_USER=user2 AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - test_must_fail \ - env SSH_ORIGINAL_COMMAND="flag foobar xx" \ - AUR_USER=user2 AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - 0|Because. - EOF - echo "SELECT OutOfDateTS IS NOT NULL, FlaggerComment FROM PackageBases WHERE ID = 3;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Vote for a package base." ' - SSH_ORIGINAL_COMMAND="vote foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - 3|1 - EOF - echo "SELECT PackageBaseID, UsersID FROM PackageVotes;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual && - cat >expected <<-EOF && - 1 - EOF - echo "SELECT NumVotes FROM PackageBases WHERE Name = '"'"'foobar'"'"';" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Vote for a package base twice." ' - test_must_fail \ - env SSH_ORIGINAL_COMMAND="vote foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - 3|1 - EOF - echo "SELECT PackageBaseID, UsersID FROM PackageVotes;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual && - cat >expected <<-EOF && - 1 - EOF - echo "SELECT NumVotes FROM PackageBases WHERE Name = '"'"'foobar'"'"';" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Remove vote from a package base." ' - SSH_ORIGINAL_COMMAND="unvote foobar" AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - EOF - echo "SELECT PackageBaseID, UsersID FROM PackageVotes;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual && - cat >expected <<-EOF && - 0 - EOF - echo "SELECT NumVotes FROM PackageBases WHERE Name = '"'"'foobar'"'"';" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success "Try to remove the vote again." ' - test_must_fail \ - env SSH_ORIGINAL_COMMAND="unvote foobar" \ - AUR_USER=user AUR_PRIVILEGED=0 \ - cover "$GIT_SERVE" 2>&1 && - cat >expected <<-EOF && - EOF - echo "SELECT PackageBaseID, UsersID FROM PackageVotes;" | \ - sqlite3 aur.db >actual && - test_cmp expected actual && - cat >expected <<-EOF && - 0 - EOF - echo "SELECT NumVotes FROM PackageBases WHERE Name = '"'"'foobar'"'"';" | \ - sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_done diff --git a/test/t1300-git-update.t b/test/t1300-git-update.t deleted file mode 100755 index 979cd281..00000000 --- a/test/t1300-git-update.t +++ /dev/null @@ -1,618 +0,0 @@ -#!/bin/sh - -test_description='git-update tests' - -. "$(dirname "$0")/setup.sh" - -dump_package_info() { - for t in Packages Licenses PackageLicenses Groups PackageGroups \ - PackageDepends PackageRelations PackageSources \ - PackageNotifications; do - echo "SELECT * FROM $t;" | sqlite3 aur.db - done -} - -test_expect_success 'Test update hook on a fresh repository.' ' - old=0000000000000000000000000000000000000000 && - new=$(git -C aur.git rev-parse HEAD^) && - AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" 2>&1 && - cat >expected <<-EOF && - 1|1|foobar|1-1|aurweb test package.|https://aur.archlinux.org/ - 1|GPL - 1|1 - 1|1|python-pygit2||| - 1|1 - EOF - dump_package_info >actual && - test_cmp expected actual -' - -test_expect_success 'Test update hook on another fresh repository.' ' - old=0000000000000000000000000000000000000000 && - test_when_finished "git -C aur.git checkout refs/namespaces/foobar/refs/heads/master" && - git -C aur.git checkout -q refs/namespaces/foobar2/refs/heads/master && - new=$(git -C aur.git rev-parse HEAD) && - AUR_USER=user AUR_PKGBASE=foobar2 AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" 2>&1 && - cat >expected <<-EOF && - 1|1|foobar|1-1|aurweb test package.|https://aur.archlinux.org/ - 2|2|foobar2|1-1|aurweb test package.|https://aur.archlinux.org/ - 1|GPL - 2|MIT - 1|1 - 2|2 - 1|1|python-pygit2||| - 2|1|python-pygit2||| - 1|1 - 2|1 - EOF - dump_package_info >actual && - test_cmp expected actual -' - -test_expect_success 'Test update hook on an updated repository.' ' - old=$(git -C aur.git rev-parse HEAD^) && - new=$(git -C aur.git rev-parse HEAD) && - AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" 2>&1 && - cat >expected <<-EOF && - 2|2|foobar2|1-1|aurweb test package.|https://aur.archlinux.org/ - 3|1|foobar|1-2|aurweb test package.|https://aur.archlinux.org/ - 1|GPL - 2|MIT - 2|2 - 3|1 - 2|1|python-pygit2||| - 3|1|python-pygit2||| - 1|1 - 2|1 - EOF - dump_package_info >actual && - test_cmp expected actual -' - -test_expect_success 'Test restore mode.' ' - AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" restore 2>&1 && - cat >expected <<-EOF && - 2|2|foobar2|1-1|aurweb test package.|https://aur.archlinux.org/ - 3|1|foobar|1-2|aurweb test package.|https://aur.archlinux.org/ - 1|GPL - 2|MIT - 2|2 - 3|1 - 2|1|python-pygit2||| - 3|1|python-pygit2||| - 1|1 - 2|1 - EOF - dump_package_info >actual && - test_cmp expected actual -' - -test_expect_success 'Test restore mode on a non-existent repository.' ' - cat >expected <<-EOD && - error: restore: repository not found: foobar3 - EOD - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar3 AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" restore >actual 2>&1 && - test_cmp expected actual -' - -test_expect_success 'Pushing to a branch other than master.' ' - old=0000000000000000000000000000000000000000 && - new=$(git -C aur.git rev-parse HEAD) && - cat >expected <<-EOD && - error: pushing to a branch other than master is restricted - EOD - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/pu "$old" "$new" >actual 2>&1 && - test_cmp expected actual -' - -test_expect_success 'Performing a non-fast-forward ref update.' ' - old=$(git -C aur.git rev-parse HEAD) && - new=$(git -C aur.git rev-parse HEAD^) && - cat >expected <<-EOD && - error: denying non-fast-forward (you should pull first) - EOD - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - test_cmp expected actual -' - -test_expect_success 'Performing a non-fast-forward ref update as Package Maintainer.' ' - old=$(git -C aur.git rev-parse HEAD) && - new=$(git -C aur.git rev-parse HEAD^) && - cat >expected <<-EOD && - error: denying non-fast-forward (you should pull first) - EOD - test_must_fail \ - env AUR_USER=pm AUR_PKGBASE=foobar AUR_PRIVILEGED=1 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" 2>&1 && - test_cmp expected actual -' - -test_expect_success 'Performing a non-fast-forward ref update as normal user with AUR_OVERWRITE=1.' ' - old=$(git -C aur.git rev-parse HEAD) && - new=$(git -C aur.git rev-parse HEAD^) && - cat >expected <<-EOD && - error: denying non-fast-forward (you should pull first) - EOD - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 AUR_OVERWRITE=1 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" 2>&1 && - test_cmp expected actual -' - -test_expect_success 'Performing a non-fast-forward ref update as Package Maintainer with AUR_OVERWRITE=1.' ' - old=$(git -C aur.git rev-parse HEAD) && - new=$(git -C aur.git rev-parse HEAD^) && - AUR_USER=pm AUR_PKGBASE=foobar AUR_PRIVILEGED=1 AUR_OVERWRITE=1 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" 2>&1 -' - -test_expect_success 'Removing .SRCINFO.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - git -C aur.git rm -q .SRCINFO && - git -C aur.git commit -q -m "Remove .SRCINFO" && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: missing .SRCINFO$" actual -' - -test_expect_success 'Removing .SRCINFO with a follow-up fix.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - git -C aur.git rm -q .SRCINFO && - git -C aur.git commit -q -m "Remove .SRCINFO" && - git -C aur.git revert --no-edit HEAD && - new=$(git -C aur.git rev-parse HEAD) && - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" 2>&1 -' - -test_expect_success 'Removing PKGBUILD.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - git -C aur.git rm -q PKGBUILD && - git -C aur.git commit -q -m "Remove PKGBUILD" && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: missing PKGBUILD$" actual -' - -test_expect_success 'Pushing a tree with a forbidden subdirectory.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - mkdir aur.git/subdir && - touch aur.git/subdir/file && - git -C aur.git add subdir/file && - git -C aur.git commit -q -m "Add subdirectory" && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: the repository must not contain subdirectories$" actual -' - -test_expect_success 'Pushing a tree with an allowed subdirectory for pgp keys; wrong files.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - mkdir -p aur.git/keys/pgp/ && - touch aur.git/keys/pgp/nonsense && - git -C aur.git add keys/pgp/nonsense && - git -C aur.git commit -q -m "Add some nonsense" && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: the subdir may only contain .asc (PGP pub key) files$" actual -' - -test_expect_success 'Pushing a tree with an allowed subdirectory for pgp keys; another subdir.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - mkdir -p aur.git/keys/pgp/bla/ && - touch aur.git/keys/pgp/bla/x.asc && - git -C aur.git add keys/pgp/bla/x.asc && - git -C aur.git commit -q -m "Add some nonsense" && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: the subdir may only contain .asc (PGP pub key) files$" actual -' - -test_expect_success 'Pushing a tree with an allowed subdirectory for pgp keys; wrong subdir.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - mkdir -p aur.git/keys/xyz/ && - touch aur.git/keys/xyz/x.asc && - git -C aur.git add keys/xyz/x.asc && - git -C aur.git commit -q -m "Add some nonsense" && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: the keys/ subdir may only contain a pgp/ directory$" actual -' - -test_expect_success 'Pushing a tree with an allowed subdirectory with pgp keys; additional files' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - mkdir -p aur.git/keys/pgp/ && - touch aur.git/keys/pgp/x.asc && - touch aur.git/keys/nonsense && - git -C aur.git add keys/pgp/x.asc && - git -C aur.git add keys/nonsense && - git -C aur.git commit -q -m "Add pgp key" && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: the keys/ subdir may only contain a pgp/ directory$" actual -' - -test_expect_success 'Pushing a tree with an allowed subdirectory with pgp keys; additional subdir' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - mkdir -p aur.git/keys/pgp/ && - mkdir -p aur.git/somedir/ && - touch aur.git/keys/pgp/x.asc && - touch aur.git/somedir/nonsense && - git -C aur.git add keys/pgp/x.asc && - git -C aur.git add somedir/nonsense && - git -C aur.git commit -q -m "Add pgp key" && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: the repository must not contain subdirectories$" actual -' - -test_expect_success 'Pushing a tree with an allowed subdirectory with pgp keys; keys to large' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - mkdir -p aur.git/keys/pgp/ && - printf "%256001s" x > aur.git/keys/pgp/x.asc && - git -C aur.git add keys/pgp/x.asc && - git -C aur.git commit -q -m "Add pgp key" && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: maximum blob size (250.00KiB) exceeded$" actual -' - -test_expect_success 'Pushing a tree with an allowed subdirectory with pgp keys.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - mkdir -p aur.git/keys/pgp/ && - touch aur.git/keys/pgp/x.asc && - git -C aur.git add keys/pgp/x.asc && - git -C aur.git commit -q -m "Add pgp key" && - new=$(git -C aur.git rev-parse HEAD) && - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" 2>&1 -' - -test_expect_success 'Pushing a tree with a large blob.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - printf "%256001s" x >aur.git/file && - git -C aur.git add file && - git -C aur.git commit -q -m "Add large blob" && - first_error=$(git -C aur.git rev-parse HEAD) && - touch aur.git/another.file && - git -C aur.git add another.file && - git -C aur.git commit -q -m "Add another commit" && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: maximum blob size (250.00KiB) exceeded$" actual && - grep -q "^error: $first_error:$" actual -' - -test_expect_success 'Pushing .SRCINFO with a non-matching package base.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "s/\(pkgbase.*\)foobar/\1foobar2/" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Change package base" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: invalid pkgbase: foobar2, expected foobar$" actual -' - -test_expect_success 'Pushing .SRCINFO with invalid syntax.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "s/=//" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Break .SRCINFO" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" 2>&1 -' - -test_expect_success 'Pushing .SRCINFO without pkgver.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "/pkgver/d" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Remove pkgver" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: missing mandatory field: pkgver$" actual -' - -test_expect_success 'Pushing .SRCINFO without pkgrel.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "/pkgrel/d" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Remove pkgrel" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: missing mandatory field: pkgrel$" actual -' - -test_expect_success 'Pushing .SRCINFO with epoch.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "s/.*pkgrel.*/\\0\\nepoch = 1/" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Add epoch" - ) && - new=$(git -C aur.git rev-parse HEAD) && - AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" 2>&1 && - cat >expected <<-EOF && - 2|2|foobar2|1-1|aurweb test package.|https://aur.archlinux.org/ - 3|1|foobar|1:1-2|aurweb test package.|https://aur.archlinux.org/ - EOF - echo "SELECT * FROM Packages;" | sqlite3 aur.db >actual && - test_cmp expected actual -' - -test_expect_success 'Pushing .SRCINFO with invalid pkgname.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "s/\(pkgname.*\)foobar/\1!/" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Change pkgname" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: invalid package name: !$" actual -' - -test_expect_success 'Pushing .SRCINFO with invalid epoch.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "s/.*pkgrel.*/\\0\\nepoch = !/" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Change epoch" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: invalid epoch: !$" actual -' - -test_expect_success 'Pushing .SRCINFO with too long URL.' ' - old=$(git -C aur.git rev-parse HEAD) && - url="http://$(printf "%7993s" x | sed "s/ /x/g")/" && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "s#.*url.*#\\0\\nurl = $url#" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Change URL" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: url field too long: $url\$" actual -' - -test_expect_success 'Missing install file.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "s/.*depends.*/\\0\\ninstall = install/" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Add install field" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: missing install file: install$" actual -' - -test_expect_success 'Missing changelog file.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "s/.*depends.*/\\0\\nchangelog = changelog/" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Add changelog field" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: missing changelog file: changelog$" actual -' - -test_expect_success 'Missing source file.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "s/.*depends.*/\\0\\nsource = file/" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Add file to the source array" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: missing source file: file$" actual -' - -test_expect_success 'Pushing .SRCINFO with too long source URL.' ' - old=$(git -C aur.git rev-parse HEAD) && - url="http://$(printf "%7993s" x | sed "s/ /x/g")/" && - test_when_finished "git -C aur.git reset --hard $old" && - ( - cd aur.git && - sed "s#.*depends.*#\\0\\nsource = $url#" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Add huge source URL" - ) && - new=$(git -C aur.git rev-parse HEAD) && - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - grep -q "^error: source entry too long: $url\$" actual -' - -test_expect_success 'Pushing a blacklisted package.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - echo "pkgname = forbidden" >>aur.git/.SRCINFO && - git -C aur.git commit -q -am "Add blacklisted package" && - new=$(git -C aur.git rev-parse HEAD) && - cat >expected <<-EOD && - error: package is blacklisted: forbidden - EOD - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - test_cmp expected actual -' - -test_expect_success 'Pushing a blacklisted pkgbase.' ' - test_when_finished "git -C aur.git checkout refs/namespaces/foobar/refs/heads/master" && - git -C aur.git checkout -q refs/namespaces/forbidden/refs/heads/master && - old=$(git -C aur.git rev-parse HEAD) && - echo " " >>aur.git/.SRCINFO && - git -C aur.git commit -q -am "Do something" && - new=$(git -C aur.git rev-parse HEAD) && - cat >expected <<-EOD && - error: pkgbase is blacklisted: forbidden - EOD - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=forbidden AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - test_cmp expected actual -' - -test_expect_success 'Pushing a blacklisted package as Package Maintainer.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - echo "pkgname = forbidden" >>aur.git/.SRCINFO && - git -C aur.git commit -q -am "Add blacklisted package" && - new=$(git -C aur.git rev-parse HEAD) && - cat >expected <<-EOD && - warning: package is blacklisted: forbidden - EOD - AUR_USER=pm AUR_PKGBASE=foobar AUR_PRIVILEGED=1 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - test_cmp expected actual -' - -test_expect_success 'Pushing a package already in the official repositories.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - echo "pkgname = official" >>aur.git/.SRCINFO && - git -C aur.git commit -q -am "Add official package" && - new=$(git -C aur.git rev-parse HEAD) && - cat >expected <<-EOD && - error: package already provided by [core]: official - EOD - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - test_cmp expected actual -' - -test_expect_success 'Pushing a package already in the official repositories as Package Maintainer.' ' - old=$(git -C aur.git rev-parse HEAD) && - test_when_finished "git -C aur.git reset --hard $old" && - echo "pkgname = official" >>aur.git/.SRCINFO && - git -C aur.git commit -q -am "Add official package" && - new=$(git -C aur.git rev-parse HEAD) && - cat >expected <<-EOD && - warning: package already provided by [core]: official - EOD - AUR_USER=pm AUR_PKGBASE=foobar AUR_PRIVILEGED=1 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - test_cmp expected actual -' - -test_expect_success 'Trying to hijack a package.' ' - old=0000000000000000000000000000000000000000 && - test_when_finished "git -C aur.git checkout refs/namespaces/foobar/refs/heads/master" && - ( - cd aur.git && - git checkout -q refs/namespaces/foobar2/refs/heads/master && - sed "s/\\(.*pkgname.*\\)2/\\1/" .SRCINFO >.SRCINFO.new - mv .SRCINFO.new .SRCINFO - git commit -q -am "Change package name" - ) && - new=$(git -C aur.git rev-parse HEAD) && - cat >expected <<-EOD && - error: cannot overwrite package: foobar - EOD - test_must_fail \ - env AUR_USER=user AUR_PKGBASE=foobar2 AUR_PRIVILEGED=0 \ - cover "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 && - test_cmp expected actual -' - -test_done diff --git a/test/test_accepted_term.py b/test/test_accepted_term.py deleted file mode 100644 index 9af19105..00000000 --- a/test/test_accepted_term.py +++ /dev/null @@ -1,58 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.accepted_term import AcceptedTerm -from aurweb.models.account_type import USER_ID -from aurweb.models.term import Term -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def term() -> Term: - with db.begin(): - term = db.create(Term, Description="Test term", URL="https://test.term") - yield term - - -@pytest.fixture -def accepted_term(user: User, term: Term) -> AcceptedTerm: - with db.begin(): - accepted_term = db.create(AcceptedTerm, User=user, Term=term) - yield accepted_term - - -def test_accepted_term(user: User, term: Term, accepted_term: AcceptedTerm): - # Make sure our AcceptedTerm relationships got initialized properly. - assert accepted_term.User == user - assert accepted_term in user.accepted_terms - assert accepted_term in term.accepted_terms - - -def test_accepted_term_null_user_raises_exception(term: Term): - with pytest.raises(IntegrityError): - AcceptedTerm(Term=term) - - -def test_accepted_term_null_term_raises_exception(user: User): - with pytest.raises(IntegrityError): - AcceptedTerm(User=user) diff --git a/test/test_account_type.py b/test/test_account_type.py deleted file mode 100644 index 4b56b7ff..00000000 --- a/test/test_account_type.py +++ /dev/null @@ -1,55 +0,0 @@ -import pytest - -from aurweb import db -from aurweb.models.account_type import AccountType -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def account_type() -> AccountType: - with db.begin(): - account_type_ = db.create(AccountType, AccountType="TestUser") - - yield account_type_ - - with db.begin(): - db.delete(account_type_) - - -def test_account_type(account_type): - """Test creating an AccountType, and reading its columns.""" - # Make sure it got db.created and was given an ID. - assert bool(account_type.ID) - - # Next, test our string functions. - assert str(account_type) == "TestUser" - assert repr(account_type) == "" % ( - account_type.ID - ) - - record = db.query(AccountType, AccountType.AccountType == "TestUser").first() - assert account_type == record - - -def test_user_account_type_relationship(account_type): - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountType=account_type, - ) - - assert user.AccountType == account_type - - # This must be db.deleted here to avoid foreign key issues when - # deleting the temporary AccountType in the fixture. - with db.begin(): - db.delete(user) diff --git a/test/test_accounts_routes.py b/test/test_accounts_routes.py deleted file mode 100644 index 1591d658..00000000 --- a/test/test_accounts_routes.py +++ /dev/null @@ -1,2190 +0,0 @@ -import re -import tempfile -from datetime import UTC, datetime -from http import HTTPStatus -from logging import DEBUG -from subprocess import Popen - -import lxml.html -import pytest -from fastapi.testclient import TestClient - -import aurweb.config -import aurweb.models.account_type as at -from aurweb import aur_logging, captcha, db, time -from aurweb.asgi import app -from aurweb.db import create, query -from aurweb.models.accepted_term import AcceptedTerm -from aurweb.models.account_type import ( - DEVELOPER_ID, - PACKAGE_MAINTAINER, - PACKAGE_MAINTAINER_AND_DEV_ID, - PACKAGE_MAINTAINER_ID, - USER_ID, - AccountType, -) -from aurweb.models.ban import Ban -from aurweb.models.session import Session -from aurweb.models.ssh_pub_key import SSHPubKey, get_fingerprint -from aurweb.models.term import Term -from aurweb.models.user import User -from aurweb.testing.html import get_errors -from aurweb.testing.requests import Request - -logger = aur_logging.get_logger(__name__) - -# Some test global constants. -TEST_USERNAME = "test" -TEST_EMAIL = "test@example.org" -TEST_REFERER = { - "referer": aurweb.config.get("options", "aur_location") + "/login", -} - - -def make_ssh_pubkey(): - # Create a public key with ssh-keygen (this adds ssh-keygen as a - # dependency to passing this test). - with tempfile.TemporaryDirectory() as tmpdir: - with open("/dev/null", "w") as null: - proc = Popen( - ["ssh-keygen", "-f", f"{tmpdir}/test.ssh", "-N", ""], - stdout=null, - stderr=null, - ) - proc.wait() - assert proc.returncode == 0 - - # Read in the public key, then delete the temp dir we made. - return open(f"{tmpdir}/test.ssh.pub").read().rstrip() - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def client() -> TestClient: - client = TestClient(app=app) - - # Necessary for forged login CSRF protection on the login route. Set here - # instead of only on the necessary requests for convenience. - client.headers.update(TEST_REFERER) - - # disable redirects for our tests - client.follow_redirects = False - yield client - - -def create_user(username: str) -> User: - email = f"{username}@example.org" - user = create( - User, - Username=username, - Email=email, - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - return user - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = create_user(TEST_USERNAME) - yield user - - -@pytest.fixture -def pm_user(user: User): - with db.begin(): - user.AccountTypeID = PACKAGE_MAINTAINER_AND_DEV_ID - yield user - - -def test_get_passreset_authed_redirects(client: TestClient, user: User): - sid = user.login(Request(), "testPassword") - assert sid is not None - - with client as request: - request.cookies = {"AURSID": sid} - response = request.get("/passreset") - - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/" - - -def test_get_passreset(client: TestClient): - with client as request: - response = request.get("/passreset") - assert response.status_code == int(HTTPStatus.OK) - - -def test_get_passreset_translation(client: TestClient): - # Test that translation works; set it to de. - with client as request: - request.cookies = {"AURLANG": "de"} - response = request.get("/passreset") - - # The header title should be translated. - assert "Passwort zurücksetzen" in response.text - - # The form input label should be translated. - expected = "Benutzername oder primäre E-Mail-Adresse eingeben:" - assert expected in response.text - - # And the button. - assert "Weiter" in response.text - - # Restore english. - with client as request: - request.cookies = {"AURLANG": "en"} - response = request.get("/passreset") - - -def test_get_passreset_with_resetkey(client: TestClient): - with client as request: - response = request.get("/passreset", params={"resetkey": "abcd"}) - assert response.status_code == int(HTTPStatus.OK) - - -def test_post_passreset_authed_redirects(client: TestClient, user: User): - sid = user.login(Request(), "testPassword") - assert sid is not None - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/passreset", - data={"user": "blah"}, - ) - - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/" - - -def test_post_passreset_user(client: TestClient, user: User): - # With username. - with client as request: - response = request.post("/passreset", data={"user": TEST_USERNAME}) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/passreset?step=confirm" - - # With e-mail. - with client as request: - response = request.post("/passreset", data={"user": TEST_EMAIL}) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/passreset?step=confirm" - - -def test_post_passreset_user_suspended(client: TestClient, user: User): - with db.begin(): - user.Suspended = True - - with client as request: - response = request.post("/passreset", data={"user": TEST_USERNAME}) - assert response.status_code == int(HTTPStatus.NOT_FOUND) - errors = get_errors(response.text) - expected = "Invalid e-mail." - assert errors[0].text.strip() == expected - - -def test_post_passreset_resetkey(client: TestClient, user: User): - with db.begin(): - user.session = Session( - UsersID=user.ID, SessionID="blah", LastUpdateTS=time.utcnow() - ) - - # Prepare a password reset. - with client as request: - response = request.post("/passreset", data={"user": TEST_USERNAME}) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/passreset?step=confirm" - - # Now that we've prepared the password reset, prepare a POST - # request with the user's ResetKey. - resetkey = user.ResetKey - post_data = { - "user": TEST_USERNAME, - "resetkey": resetkey, - "password": "abcd1234", - "confirm": "abcd1234", - } - - with client as request: - response = request.post("/passreset", data=post_data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/passreset?step=complete" - - -def make_resetkey(client: TestClient, user: User): - with client as request: - response = request.post("/passreset", data={"user": TEST_USERNAME}) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/passreset?step=confirm" - return user.ResetKey - - -def make_passreset_data(user: User, resetkey: str): - return {"user": user.Username, "resetkey": resetkey} - - -def test_post_passreset_error_invalid_email(client: TestClient, user: User): - # First, test with a user that doesn't even exist. - with client as request: - response = request.post("/passreset", data={"user": "invalid"}) - assert response.status_code == int(HTTPStatus.NOT_FOUND) - assert "Invalid e-mail." in response.text - - # Then, test with an invalid resetkey for a real user. - _ = make_resetkey(client, user) - post_data = make_passreset_data(user, "fake") - post_data["password"] = "abcd1234" - post_data["confirm"] = "abcd1234" - - with client as request: - response = request.post("/passreset", data=post_data) - assert response.status_code == int(HTTPStatus.NOT_FOUND) - assert "Invalid e-mail." in response.text - - -def test_post_passreset_error_missing_field(client: TestClient, user: User): - # Now that we've prepared the password reset, prepare a POST - # request with the user's ResetKey. - resetkey = make_resetkey(client, user) - post_data = make_passreset_data(user, resetkey) - - with client as request: - response = request.post("/passreset", data=post_data) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - error = "Missing a required field." - assert error in response.content.decode("utf-8") - - -def test_post_passreset_error_password_mismatch(client: TestClient, user: User): - resetkey = make_resetkey(client, user) - post_data = make_passreset_data(user, resetkey) - - post_data["password"] = "abcd1234" - post_data["confirm"] = "mismatched" - - with client as request: - response = request.post("/passreset", data=post_data) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - error = "Password fields do not match." - assert error in response.content.decode("utf-8") - - -def test_post_passreset_error_password_requirements(client: TestClient, user: User): - resetkey = make_resetkey(client, user) - post_data = make_passreset_data(user, resetkey) - - passwd_min_len = User.minimum_passwd_length() - assert passwd_min_len >= 4 - - post_data["password"] = "x" - post_data["confirm"] = "x" - - with client as request: - response = request.post("/passreset", data=post_data) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - error = f"Your password must be at least {passwd_min_len} characters." - assert error in response.content.decode("utf-8") - - -def test_get_register(client: TestClient): - with client as request: - response = request.get("/register") - assert response.status_code == int(HTTPStatus.OK) - - -def post_register(request, **kwargs): - """A simple helper that allows overrides to test defaults.""" - salt = captcha.get_captcha_salts()[0] - token = captcha.get_captcha_token(salt) - answer = captcha.get_captcha_answer(token) - - data = { - "U": "newUser", - "E": "newUser@email.org", - "P": "newUserPassword", - "C": "newUserPassword", - "L": "en", - "TZ": "UTC", - "captcha": answer, - "captcha_salt": salt, - } - - # For any kwargs given, override their k:v pairs in data. - args = dict(kwargs) - for k, v in args.items(): - data[k] = v - - return request.post("/register", data=data) - - -def test_post_register(client: TestClient): - with client as request: - response = post_register(request) - assert response.status_code == int(HTTPStatus.OK) - - expected = "The account, 'newUser', " - expected += "has been successfully created." - assert expected in response.content.decode() - - -def test_post_register_rejects_case_insensitive_spoof(client: TestClient): - with client as request: - response = post_register(request, U="newUser", E="newUser@example.org") - assert response.status_code == int(HTTPStatus.OK) - - with client as request: - response = post_register(request, U="NEWUSER", E="BLAH@GMAIL.COM") - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - expected = "The username, NEWUSER, is already in use." - assert expected in response.content.decode() - - with client as request: - response = post_register(request, U="BLAH", E="NEWUSER@EXAMPLE.ORG") - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - expected = "The address, NEWUSER@EXAMPLE.ORG, " - expected += "is already in use." - assert expected in response.content.decode() - - -def test_post_register_error_expired_captcha(client: TestClient): - with client as request: - response = post_register(request, captcha_salt="invalid-salt") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "This CAPTCHA has expired. Please try again." in content - - -def test_post_register_error_missing_captcha(client: TestClient): - with client as request: - response = post_register(request, captcha=None) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "The CAPTCHA is missing." in content - - -def test_post_register_error_invalid_captcha(client: TestClient): - with client as request: - response = post_register(request, captcha="invalid blah blah") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "The entered CAPTCHA answer is invalid." in content - - -def test_post_register_error_ip_banned(client: TestClient): - # 'testclient' is our fallback value in case request.client is None - # which is the case for TestClient - with db.begin(): - create(Ban, IPAddress="testclient", BanTS=datetime.now(UTC)) - - with client as request: - response = post_register(request) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert ( - "Account registration has been disabled for your IP address, " - + "probably due to sustained spam attacks. Sorry for the " - + "inconvenience." - ) in content - - -def test_post_register_error_missing_username(client: TestClient): - with client as request: - response = post_register(request, U="") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "Missing a required field." in content - - -def test_post_register_error_missing_email(client: TestClient): - with client as request: - response = post_register(request, E="") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "Missing a required field." in content - - -def test_post_register_error_invalid_username(client: TestClient): - with client as request: - # Our test config requires at least three characters for a - # valid username, so test against two characters: 'ba'. - response = post_register(request, U="ba") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "The username is invalid." in content - - -def test_post_register_invalid_password(client: TestClient): - with client as request: - response = post_register(request, P="abc", C="abc") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - expected = r"Your password must be at least \d+ characters." - assert re.search(expected, content) - - -def test_post_register_error_missing_confirm(client: TestClient): - with client as request: - response = post_register(request, C=None) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "Please confirm your new password." in content - - -def test_post_register_error_mismatched_confirm(client: TestClient): - with client as request: - response = post_register(request, C="mismatched") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "Password fields do not match." in content - - -def test_post_register_error_invalid_email(client: TestClient): - with client as request: - response = post_register(request, E="bad@email") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "The email address is invalid." in content - - -def test_post_register_invalid_backup_email(client: TestClient): - with client as request: - response = post_register(request, BE="bad@email") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "The backup email address is invalid." in content - - -def test_post_register_error_invalid_homepage(client: TestClient): - with client as request: - response = post_register(request, HP="bad") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - expected = "The home page is invalid, please specify the full HTTP(s) URL." - assert expected in content - - -def test_post_register_error_invalid_pgp_fingerprints(client: TestClient): - with client as request: - response = post_register(request, K="bad") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - expected = "The PGP key fingerprint is invalid." - assert expected in content - - pk = "z" + ("a" * 39) - with client as request: - response = post_register(request, K=pk) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - expected = "The PGP key fingerprint is invalid." - assert expected in content - - -def test_post_register_error_invalid_ssh_pubkeys(client: TestClient): - with client as request: - response = post_register(request, PK="bad") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "The SSH public key is invalid." in content - - with client as request: - response = post_register(request, PK="ssh-rsa ") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "The SSH public key is invalid." in content - - -def test_post_register_error_unsupported_language(client: TestClient): - with client as request: - response = post_register(request, L="bad") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - expected = "Language is not currently supported." - assert expected in content - - -def test_post_register_error_unsupported_timezone(client: TestClient): - with client as request: - response = post_register(request, TZ="ABCDEFGH") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - expected = "Timezone is not currently supported." - assert expected in content - - -def test_post_register_error_username_taken(client: TestClient, user: User): - with client as request: - response = post_register(request, U="test") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - expected = r"The username, .*, is already in use." - assert re.search(expected, content) - - -def test_post_register_error_email_taken(client: TestClient, user: User): - with client as request: - response = post_register(request, E="test@example.org") - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - expected = r"The address, .*, is already in use." - assert re.search(expected, content) - - -def test_post_register_error_ssh_pubkey_taken(client: TestClient, user: User): - pk = str() - - # Create a public key with ssh-keygen (this adds ssh-keygen as a - # dependency to passing this test). - with tempfile.TemporaryDirectory() as tmpdir: - with open("/dev/null", "w") as null: - proc = Popen( - ["ssh-keygen", "-f", f"{tmpdir}/test.ssh", "-N", ""], - stdout=null, - stderr=null, - ) - proc.wait() - assert proc.returncode == 0 - - # Read in the public key, then delete the temp dir we made. - pk = open(f"{tmpdir}/test.ssh.pub").read().rstrip() - - prefix, key, loc = pk.split() - norm_pk = prefix + " " + key - - # Take the sha256 fingerprint of the ssh public key, create it. - fp = get_fingerprint(norm_pk) - with db.begin(): - create(SSHPubKey, UserID=user.ID, PubKey=norm_pk, Fingerprint=fp) - - with client as request: - response = post_register(request, PK=pk) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - expected = r"The SSH public key, .*, is already in use." - assert re.search(expected, content) - - -def test_post_register_with_ssh_pubkey(client: TestClient): - pk = str() - - # Create a public key with ssh-keygen (this adds ssh-keygen as a - # dependency to passing this test). - with tempfile.TemporaryDirectory() as tmpdir: - with open("/dev/null", "w") as null: - proc = Popen( - ["ssh-keygen", "-f", f"{tmpdir}/test.ssh", "-N", ""], - stdout=null, - stderr=null, - ) - proc.wait() - assert proc.returncode == 0 - - # Read in the public key, then delete the temp dir we made. - pk = open(f"{tmpdir}/test.ssh.pub").read().rstrip() - - with client as request: - response = post_register(request, PK=pk) - - assert response.status_code == int(HTTPStatus.OK) - - # Let's create another user accidentally pasting their key twice - with db.begin(): - db.query(SSHPubKey).delete() - - pk_double = pk + "\n" + pk - with client as request: - response = post_register( - request, U="doubleKey", E="doubleKey@email.org", PK=pk_double - ) - - assert response.status_code == int(HTTPStatus.OK) - - -def test_get_account_edit_pm_as_pm(client: TestClient, pm_user: User): - """Test edit get route of another PM as a PM.""" - with db.begin(): - user2 = create_user("test2") - user2.AccountTypeID = at.PACKAGE_MAINTAINER_ID - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/account/{user2.Username}/edit" - - with client as request: - request.cookies = cookies - response = request.get(endpoint) - assert response.status_code == int(HTTPStatus.OK) - - # Verify that we have an account type selection and that the - # "{at.PACKAGE_MAINTAINER}" option is selected. - root = parse_root(response.text) - atype = root.xpath('//select[@id="id_type"]/option[@selected="selected"]') - expected = at.PACKAGE_MAINTAINER - assert atype[0].text.strip() == expected - - username = root.xpath('//input[@id="id_username"]')[0] - assert username.attrib["value"] == user2.Username - email = root.xpath('//input[@id="id_email"]')[0] - assert email.attrib["value"] == user2.Email - - -def test_get_account_edit_as_pm(client: TestClient, pm_user: User): - """Test edit get route of another user as a PM.""" - with db.begin(): - user2 = create_user("test2") - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/account/{user2.Username}/edit" - - with client as request: - request.cookies = cookies - response = request.get(endpoint) - assert response.status_code == int(HTTPStatus.OK) - - # Verify that we have an account type selection and that the - # "Normal {at.USER}" option is selected. - root = parse_root(response.text) - atype = root.xpath('//select[@id="id_type"]/option[@selected="selected"]') - expected = f"Normal {at.USER}" - assert atype[0].text.strip() == expected - - # Other fields should be available and match up. - username = root.xpath('//input[@id="id_username"]')[0] - assert username.attrib["value"] == user2.Username - email = root.xpath('//input[@id="id_email"]')[0] - assert email.attrib["value"] == user2.Email - - -def test_get_account_edit_type(client: TestClient, user: User): - """Test that users do not have an Account Type field.""" - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/account/{user.Username}/edit" - - with client as request: - request.cookies = cookies - response = request.get(endpoint) - assert response.status_code == int(HTTPStatus.OK) - assert "id_type" not in response.text - - -def test_get_account_edit_type_as_pm(client: TestClient, pm_user: User): - with db.begin(): - user2 = create_user("test_pm") - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/account/{user2.Username}/edit" - - with client as request: - request.cookies = cookies - response = request.get(endpoint) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - atype = root.xpath('//select[@id="id_type"]/option[@selected="selected"]') - assert atype[0].text.strip() == f"Normal {at.USER}" - - -def test_get_account_edit_unauthorized(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - with db.begin(): - user2 = create( - User, - Username="test2", - Email="test2@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - - endpoint = f"/account/{user2.Username}/edit" - with client as request: - # Try to edit `test2` while authenticated as `test`. - request.cookies = {"AURSID": sid} - response = request.get(endpoint) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - expected = f"/account/{user2.Username}" - assert response.headers.get("location") == expected - - -def test_get_account_edit_not_exists(client: TestClient, pm_user: User): - """Test that users do not have an Account Type field.""" - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = "/account/doesnotexist/edit" - - with client as request: - request.cookies = cookies - response = request.get(endpoint) - assert response.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_post_account_edit(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - post_data = {"U": "test", "E": "test666@example.org", "passwd": "testPassword"} - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.OK) - - expected = "The account, test, " - expected += "has been successfully modified." - assert expected in response.content.decode() - - -def test_post_account_edit_type_as_pm(client: TestClient, pm_user: User): - with db.begin(): - user2 = create_user("test_pm") - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/account/{user2.Username}/edit" - data = { - "U": user2.Username, - "E": user2.Email, - "T": at.USER_ID, - "passwd": "testPassword", - } - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.OK) - - -def test_post_account_edit_type_as_dev(client: TestClient, pm_user: User): - with db.begin(): - user2 = create_user("test2") - pm_user.AccountTypeID = at.DEVELOPER_ID - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/account/{user2.Username}/edit" - data = { - "U": user2.Username, - "E": user2.Email, - "T": at.DEVELOPER_ID, - "passwd": "testPassword", - } - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.OK) - assert user2.AccountTypeID == at.DEVELOPER_ID - - -def test_post_account_edit_invalid_type_as_pm(client: TestClient, pm_user: User): - with db.begin(): - user2 = create_user("test_pm") - pm_user.AccountTypeID = at.PACKAGE_MAINTAINER_ID - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/account/{user2.Username}/edit" - data = { - "U": user2.Username, - "E": user2.Email, - "T": at.DEVELOPER_ID, - "passwd": "testPassword", - } - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - assert user2.AccountTypeID == at.USER_ID - - errors = get_errors(resp.text) - expected = ( - "You do not have permission to change this user's " - f"account type to {at.DEVELOPER}." - ) - assert errors[0].text.strip() == expected - - -def test_post_account_edit_dev(client: TestClient, pm_user: User): - # Modify our user to be a "Package Maintainer & Developer" - name = "Package Maintainer & Developer" - pm_or_dev = query(AccountType, AccountType.AccountType == name).first() - with db.begin(): - user.AccountType = pm_or_dev - - request = Request() - sid = pm_user.login(request, "testPassword") - - post_data = {"U": "test", "E": "test666@example.org", "passwd": "testPassword"} - - endpoint = f"/account/{pm_user.Username}/edit" - with client as request: - request.cookies = {"AURSID": sid} - response = request.post(endpoint, data=post_data) - assert response.status_code == int(HTTPStatus.OK) - - expected = "The account, test, " - expected += "has been successfully modified." - assert expected in response.content.decode() - - -def test_post_account_edit_not_exists(client: TestClient, pm_user: User): - request = Request() - sid = pm_user.login(request, "testPassword") - - post_data = {"U": "test", "E": "test666@example.org", "passwd": "testPassword"} - - endpoint = "/account/doesnotexist/edit" - with client as request: - request.cookies = {"AURSID": sid} - response = request.post(endpoint, data=post_data) - assert response.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_post_account_edit_language(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - post_data = { - "U": "test", - "E": "test@example.org", - "L": "de", # German - "passwd": "testPassword", - } - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.OK) - - # Parse the response content html into an lxml root, then make - # sure we see a 'de' option selected on the page. - content = response.content.decode() - root = lxml.html.fromstring(content) - lang_nodes = root.xpath('//option[@value="de"]/@selected') - assert lang_nodes and len(lang_nodes) != 0 - assert lang_nodes[0] == "selected" - - -def test_post_account_edit_timezone(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - post_data = { - "U": "test", - "E": "test@example.org", - "TZ": "CET", - "passwd": "testPassword", - } - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.OK) - - -def test_post_account_edit_error_missing_password(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - post_data = {"U": "test", "E": "test@example.org", "TZ": "CET", "passwd": ""} - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "Invalid password." in content - - -def test_post_account_edit_error_invalid_password(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - post_data = {"U": "test", "E": "test@example.org", "TZ": "CET", "passwd": "invalid"} - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - content = response.content.decode() - assert "Invalid password." in content - - -def test_post_account_edit_suspend_unauthorized(client: TestClient, user: User): - cookies = {"AURSID": user.login(Request(), "testPassword")} - post_data = { - "U": "test", - "E": "test@example.org", - "S": True, - "passwd": "testPassword", - } - with client as request: - request.cookies = cookies - resp = request.post(f"/account/{user.Username}/edit", data=post_data) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - errors = get_errors(resp.text) - expected = "You do not have permission to suspend accounts." - assert errors[0].text.strip() == expected - - -def test_post_account_edit_inactivity(client: TestClient, user: User): - with db.begin(): - user.AccountTypeID = PACKAGE_MAINTAINER_ID - assert not user.Suspended - - cookies = {"AURSID": user.login(Request(), "testPassword")} - post_data = { - "U": "test", - "E": "test@example.org", - "J": True, - "passwd": "testPassword", - } - with client as request: - request.cookies = cookies - resp = request.post(f"/account/{user.Username}/edit", data=post_data) - assert resp.status_code == int(HTTPStatus.OK) - - # Make sure the user record got updated correctly. - assert user.InactivityTS > 0 - - post_data.update({"J": False}) - with client as request: - request.cookies = cookies - resp = request.post(f"/account/{user.Username}/edit", data=post_data) - assert resp.status_code == int(HTTPStatus.OK) - - assert user.InactivityTS == 0 - - -def test_post_account_edit_suspended(client: TestClient, user: User): - with db.begin(): - user.AccountTypeID = PACKAGE_MAINTAINER_ID - assert not user.Suspended - - cookies = {"AURSID": user.login(Request(), "testPassword")} - post_data = { - "U": "test", - "E": "test@example.org", - "S": True, - "passwd": "testPassword", - } - endpoint = f"/account/{user.Username}/edit" - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data=post_data) - assert resp.status_code == int(HTTPStatus.OK) - - # Make sure the user record got updated correctly. - assert user.Suspended - # Let's make sure the DB got updated properly. - assert user.session is None - - -def test_post_account_edit_error_unauthorized(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - with db.begin(): - user2 = create( - User, - Username="test2", - Email="test2@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - - post_data = { - "U": "test", - "E": "test@example.org", - "TZ": "CET", - "passwd": "testPassword", - } - - endpoint = f"/account/{user2.Username}/edit" - with client as request: - # Attempt to edit 'test2' while logged in as 'test'. - request.cookies = {"AURSID": sid} - response = request.post(endpoint, data=post_data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - expected = f"/account/{user2.Username}" - assert response.headers.get("location") == expected - - -def test_post_account_edit_ssh_pub_key(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - post_data = { - "U": "test", - "E": "test@example.org", - "PK": make_ssh_pubkey(), - "passwd": "testPassword", - } - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.OK) - - # Now let's update what's already there to gain coverage over that path. - post_data["PK"] = make_ssh_pubkey() - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.OK) - - # Accidentally enter the same key twice - pk = make_ssh_pubkey() - post_data["PK"] = pk + "\n" + pk - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.OK) - - -def test_post_account_edit_missing_ssh_pubkey(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - post_data = { - "U": user.Username, - "E": user.Email, - "PK": make_ssh_pubkey(), - "passwd": "testPassword", - } - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.OK) - - post_data = { - "U": user.Username, - "E": user.Email, - "PK": str(), # Pass an empty string now to walk the delete path. - "passwd": "testPassword", - } - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.OK) - - -def test_post_account_edit_invalid_ssh_pubkey(client: TestClient, user: User): - pubkey = "ssh-rsa fake key" - - data = { - "U": "test", - "E": "test@example.org", - "PK": pubkey, - "passwd": "testPassword", - } - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.post("/account/test/edit", data=data) - - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - -def test_post_account_edit_password(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - post_data = { - "U": "test", - "E": "test@example.org", - "P": "newPassword", - "C": "newPassword", - "passwd": "testPassword", - } - - with client as request: - request.cookies = {"AURSID": sid} - response = request.post( - "/account/test/edit", - data=post_data, - ) - - assert response.status_code == int(HTTPStatus.OK) - - assert user.valid_password("newPassword") - - -def test_post_account_edit_self_type_as_user(client: TestClient, user: User): - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/account/{user.Username}/edit" - - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - assert "id_type" not in resp.text - - data = { - "U": user.Username, - "E": user.Email, - "T": PACKAGE_MAINTAINER_ID, - "passwd": "testPassword", - } - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - errors = get_errors(resp.text) - expected = "You do not have permission to change account types." - assert errors[0].text.strip() == expected - - -def test_post_account_edit_other_user_as_user(client: TestClient, user: User): - with db.begin(): - user2 = create_user("test2") - - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/account/{user2.Username}/edit" - - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/account/{user2.Username}" - - -def test_post_account_edit_self_type_as_pm(client: TestClient, pm_user: User): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/account/{pm_user.Username}/edit" - - # We cannot see the Account Type field on our own edit page. - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - assert "id_type" in resp.text - - # We cannot modify our own account type. - data = { - "U": pm_user.Username, - "E": pm_user.Email, - "T": USER_ID, - "passwd": "testPassword", - } - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.OK) - - assert pm_user.AccountTypeID == USER_ID - - -def test_post_account_edit_other_user_type_as_pm( - client: TestClient, pm_user: User, caplog: pytest.LogCaptureFixture -): - caplog.set_level(DEBUG) - - with db.begin(): - user2 = create_user("test2") - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/account/{user2.Username}/edit" - - # As a PM, we can see the Account Type field for other users. - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - assert "id_type" in resp.text - - # As a PM, we can modify other user's account types. - data = { - "U": user2.Username, - "E": user2.Email, - "T": PACKAGE_MAINTAINER_ID, - "passwd": "testPassword", - } - - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.OK) - - # Let's make sure the DB got updated properly. - assert user2.AccountTypeID == PACKAGE_MAINTAINER_ID - - # and also that this got logged out at DEBUG level. - expected = ( - f"Package Maintainer '{pm_user.Username}' has " - f"modified '{user2.Username}' account's type to" - f" {PACKAGE_MAINTAINER}." - ) - assert expected in caplog.text - - -def test_post_account_edit_other_user_suspend_as_pm(client: TestClient, pm_user: User): - with db.begin(): - user = create_user("test3") - # Create a session for user - sid = user.login(Request(), "testPassword") - assert sid is not None - - # `user` needs its own TestClient, to keep its AURSID cookies - # apart from `pm_user`s during our testing. - user_client = TestClient(app=app) - user_client.headers.update(TEST_REFERER) - user_client.follow_redirects = False - - # Test that `user` can view their account edit page while logged in. - user_cookies = {"AURSID": sid} - with client as request: - endpoint = f"/account/{user.Username}/edit" - request.cookies = user_cookies - resp = request.get(endpoint) - assert resp.status_code == HTTPStatus.OK - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - assert cookies is not None # This is useless, we create the dict here ^ - # As a PM, we can see the Account for other users. - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - # As a PM, we can modify other user's account types. - data = { - "U": user.Username, - "E": user.Email, - "S": True, - "passwd": "testPassword", - } - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.OK) - - # Test that `user` no longer has a session. - with user_client as request: - request.cookies = user_cookies - resp = request.get(endpoint) - assert resp.status_code == HTTPStatus.SEE_OTHER - - # Since user is now suspended, they should not be able to login. - data = {"user": user.Username, "passwd": "testPassword", "next": "/"} - with user_client as request: - resp = request.post("/login", data=data) - assert resp.status_code == HTTPStatus.OK - errors = get_errors(resp.text) - assert errors[0].text.strip() == "Account Suspended" - - -def test_post_account_edit_other_user_type_as_pm_invalid_type( - client: TestClient, pm_user: User, caplog: pytest.LogCaptureFixture -): - with db.begin(): - user2 = create_user("test2") - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/account/{user2.Username}/edit" - - # As a PM, we can modify other user's account types. - data = {"U": user2.Username, "E": user2.Email, "T": 0, "passwd": "testPassword"} - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - errors = get_errors(resp.text) - expected = "Invalid account type provided." - assert errors[0].text.strip() == expected - - -def test_get_account(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - with client as request: - request.cookies = {"AURSID": sid} - response = request.get("/account/test") - - assert response.status_code == int(HTTPStatus.OK) - - -def test_get_account_not_found(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - with client as request: - request.cookies = {"AURSID": sid} - response = request.get("/account/not_found") - - assert response.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_get_account_unauthenticated(client: TestClient, user: User): - with client as request: - response = request.get("/account/test") - assert response.status_code == int(HTTPStatus.UNAUTHORIZED) - - content = response.content.decode() - assert "You must log in to view user information." in content - - -def test_get_accounts(client: TestClient, user: User, pm_user: User): - """Test that we can GET request /accounts and receive - a form which can be used to POST /accounts.""" - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - with client as request: - request.cookies = cookies - response = request.get("/accounts") - assert response.status_code == int(HTTPStatus.OK) - - parser = lxml.etree.HTMLParser() - root = lxml.etree.fromstring(response.text, parser=parser) - - # Get the form. - form = root.xpath('//form[contains(@class, "account-search-form")]') - - # Make sure there's only one form and it goes where it should. - assert len(form) == 1 - form = next(iter(form)) - assert form.attrib.get("method") == "post" - assert form.attrib.get("action") == "/accounts" - - def field(element): - """Return the given element string as a valid - selector in the form.""" - return f"./fieldset/p/{element}" - - username = form.xpath(field('input[@id="id_username"]')) - assert bool(username) - - account_type = form.xpath(field('select[@id="id_type"]')) - assert bool(account_type) - - suspended = form.xpath(field('input[@id="id_suspended"]')) - assert bool(suspended) - - email = form.xpath(field('input[@id="id_email"]')) - assert bool(email) - - realname = form.xpath(field('input[@id="id_realname"]')) - assert bool(realname) - - irc = form.xpath(field('input[@id="id_irc"]')) - assert bool(irc) - - sortby = form.xpath(field('select[@id="id_sortby"]')) - assert bool(sortby) - - -def parse_root(html): - parser = lxml.etree.HTMLParser() - return lxml.etree.fromstring(html, parser=parser) - - -def get_rows(html): - root = parse_root(html) - return root.xpath('//table[contains(@class, "users")]/tbody/tr') - - -def test_post_accounts(client: TestClient, user: User, pm_user: User): - # Set a PGPKey. - with db.begin(): - user.PGPKey = "5F18B20346188419750745D7335F2CB41F253D30" - - # Create a few more users. - users = [user] - with db.begin(): - for i in range(10): - _user = create_user(f"test_{i}") - users.append(_user) - - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - with client as request: - request.cookies = cookies - response = request.post("/accounts") - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 11 - - # Simulate default ascending ORDER_BY. - sorted_users = sorted(users, key=lambda u: u.Username) - for i, _user in enumerate(sorted_users): - columns = rows[i].xpath("./td") - assert len(columns) == 7 - - username, atype, suspended, real_name, irc_nick, pgp_key, edit = columns - - username = next(iter(username.xpath("./a"))) - assert username.text.strip() == _user.Username - - assert atype.text.strip() == str(_user.AccountType) - assert suspended.text.strip() == "Active" - assert real_name.text == (_user.RealName or None) - assert irc_nick.text == (_user.IRCNick or None) - assert pgp_key.text == (_user.PGPKey or None) - - edit = edit.xpath("./a") - if user.can_edit_user(_user): - edit = next(iter(edit)) - assert edit.text.strip() == "Edit" - else: - assert not edit - - logger.debug( - 'Checked user row {"id": %s, "username": "%s"}.' - % (_user.ID, _user.Username) - ) - - -def test_post_accounts_username(client: TestClient, user: User, pm_user: User): - # Test the U parameter path. - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"U": user.Username}) - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - row = next(iter(rows)) - username, type, status, realname, irc, pgp_key, edit = row - - username = next(iter(username.xpath("./a"))) - assert username.text.strip() == user.Username - - -def test_post_accounts_account_type(client: TestClient, user: User, pm_user: User): - # Check the different account type options. - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - # Make a user with the "User" role here so we can - # test the `u` parameter. - account_type = query(AccountType, AccountType.AccountType == "User").first() - with db.begin(): - create( - User, - Username="test_2", - Email="test_2@example.org", - RealName="Test User 2", - Passwd="testPassword", - AccountType=account_type, - ) - - # Expect no entries; we marked our only user as a User type. - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"T": "t"}) - assert response.status_code == int(HTTPStatus.OK) - assert len(get_rows(response.text)) == 0 - - # So, let's also ensure that specifying "u" returns our user. - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"T": "u"}) - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - row = next(iter(rows)) - username, type, status, realname, irc, pgp_key, edit = row - - assert type.text.strip() == "User" - - # Set our only user to a Package Maintainer. - with db.begin(): - user.AccountType = ( - query(AccountType).filter(AccountType.ID == PACKAGE_MAINTAINER_ID).first() - ) - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"T": "t"}) - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - row = next(iter(rows)) - username, type, status, realname, irc, pgp_key, edit = row - - assert type.text.strip() == "Package Maintainer" - - with db.begin(): - user.AccountType = ( - query(AccountType).filter(AccountType.ID == DEVELOPER_ID).first() - ) - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"T": "d"}) - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - row = next(iter(rows)) - username, type, status, realname, irc, pgp_key, edit = row - - assert type.text.strip() == "Developer" - - with db.begin(): - user.AccountType = ( - query(AccountType) - .filter(AccountType.ID == PACKAGE_MAINTAINER_AND_DEV_ID) - .first() - ) - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"T": "td"}) - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - row = next(iter(rows)) - username, type, status, realname, irc, pgp_key, edit = row - - assert type.text.strip() == "Package Maintainer & Developer" - - -def test_post_accounts_status(client: TestClient, user: User, pm_user: User): - # Test the functionality of Suspended. - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - with client as request: - request.cookies = cookies - response = request.post("/accounts") - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - row = next(iter(rows)) - username, type, status, realname, irc, pgp_key, edit = row - assert status.text.strip() == "Active" - - with db.begin(): - user.Suspended = True - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"S": True}) - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - row = next(iter(rows)) - username, type, status, realname, irc, pgp_key, edit = row - assert status.text.strip() == "Suspended" - - -def test_post_accounts_email(client: TestClient, user: User, pm_user: User): - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - # Search via email. - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"E": user.Email}) - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - -def test_post_accounts_realname(client: TestClient, user: User, pm_user: User): - # Test the R parameter path. - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"R": user.RealName}) - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - -def test_post_accounts_irc(client: TestClient, user: User, pm_user: User): - # Test the I parameter path. - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"I": user.IRCNick}) - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - -def test_post_accounts_sortby(client: TestClient, user: User, pm_user: User): - # Create a second user so we can compare sorts. - with db.begin(): - user_ = create_user("test2") - user_.AccountTypeID = DEVELOPER_ID - - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - # Show that "u" is the default search order, by username. - with client as request: - request.cookies = cookies - response = request.post("/accounts") - assert response.status_code == int(HTTPStatus.OK) - rows = get_rows(response.text) - assert len(rows) == 2 - first_rows = rows - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"SB": "u"}) - assert response.status_code == int(HTTPStatus.OK) - rows = get_rows(response.text) - assert len(rows) == 2 - - def compare_text_values(column, lhs, rhs): - return [row[column].text for row in lhs] == [row[column].text for row in rhs] - - # Test the username rows are ordered the same. - assert compare_text_values(0, first_rows, rows) is True - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"SB": "i"}) - assert response.status_code == int(HTTPStatus.OK) - rows = get_rows(response.text) - assert len(rows) == 2 - - # Test the rows are reversed when ordering by IRCNick. - assert compare_text_values(4, first_rows, reversed(rows)) is True - - # Sort by "i" -> RealName. - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"SB": "r"}) - assert response.status_code == int(HTTPStatus.OK) - rows = get_rows(response.text) - assert len(rows) == 2 - - # Test the rows are reversed when ordering by RealName. - assert compare_text_values(4, first_rows, reversed(rows)) is True - - with db.begin(): - user.AccountType = ( - query(AccountType) - .filter(AccountType.ID == PACKAGE_MAINTAINER_AND_DEV_ID) - .first() - ) - - # Fetch first_rows again with our new AccountType ordering. - with client as request: - request.cookies = cookies - response = request.post("/accounts") - assert response.status_code == int(HTTPStatus.OK) - rows = get_rows(response.text) - assert len(rows) == 2 - first_rows = rows - - # Sort by "t" -> AccountType. - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"SB": "t"}) - assert response.status_code == int(HTTPStatus.OK) - rows = get_rows(response.text) - assert len(rows) == 2 - - # Test that rows again got reversed. - assert compare_text_values(1, first_rows, reversed(rows)) - - -def test_post_accounts_pgp_key(client: TestClient, user: User, pm_user: User): - with db.begin(): - user.PGPKey = "5F18B20346188419750745D7335F2CB41F253D30" - - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - # Search via PGPKey. - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"K": user.PGPKey}) - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 1 - - -def test_post_accounts_paged(client: TestClient, user: User, pm_user: User): - # Create 150 users. - users = [user] - account_type = query(AccountType, AccountType.AccountType == "User").first() - with db.begin(): - for i in range(150): - _user = create( - User, - Username=f"test_#{i}", - Email=f"test_#{i}@example.org", - RealName=f"Test User #{i}", - Passwd="testPassword", - AccountType=account_type, - ) - users.append(_user) - - sid = user.login(Request(), "testPassword") - cookies = {"AURSID": sid} - - with client as request: - request.cookies = cookies - response = request.post("/accounts") - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 50 # `pp`, or hits per page is defined at 50. - - # Sort users in ascending default sort by order. - sorted_users = sorted(users, key=lambda u: u.Username) - - # Get the first fifty sorted users and assert that's what - # we got in the first search result page. - first_fifty = sorted_users[:50] - - for i, _user in enumerate(first_fifty): - row = rows[i] - username = row[0].xpath("./a")[0] # First column - assert username.text.strip() == _user.Username - - root = parse_root(response.text) - page_prev = root.xpath('//button[contains(@class, "page-prev")]')[0] - page_next = root.xpath('//button[contains(@class, "page-next")]')[0] - - assert page_prev.attrib["disabled"] == "disabled" - assert "disabled" not in page_next.attrib - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"O": 50}) # +50 offset. - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 50 - - second_fifty = sorted_users[50:100] - - for i, _user in enumerate(second_fifty): - row = rows[i] - username = row[0].xpath("./a")[0] # First column - assert username.text.strip() == _user.Username - - with client as request: - request.cookies = cookies - response = request.post("/accounts", data={"O": 101}) # Last page. - assert response.status_code == int(HTTPStatus.OK) - - rows = get_rows(response.text) - assert len(rows) == 50 - - root = parse_root(response.text) - page_prev = root.xpath('//button[contains(@class, "page-prev")]')[0] - page_next = root.xpath('//button[contains(@class, "page-next")]')[0] - - assert "disabled" not in page_prev.attrib - assert page_next.attrib["disabled"] == "disabled" - - -def test_get_terms_of_service(client: TestClient, user: User): - with db.begin(): - term = create( - Term, Description="Test term.", URL="http://localhost", Revision=1 - ) - - with client as request: - response = request.get("/tos") - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - request = Request() - sid = user.login(request, "testPassword") - cookies = {"AURSID": sid} - - # First of all, let's test that we get redirected to /tos - # when attempting to browse authenticated without accepting terms. - with client as request: - request.cookies = cookies - response = request.get("/") - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/tos" - - with client as request: - request.cookies = cookies - response = request.get("/tos") - assert response.status_code == int(HTTPStatus.OK) - - with db.begin(): - accepted_term = create( - AcceptedTerm, User=user, Term=term, Revision=term.Revision - ) - - with client as request: - request.cookies = cookies - response = request.get("/tos") - # We accepted the term, there's nothing left to accept. - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - # Make sure we don't get redirected to /tos when browsing "Home" - with client as request: - request.cookies = cookies - response = request.get("/") - assert response.status_code == int(HTTPStatus.OK) - - # Bump the term's revision. - with db.begin(): - term.Revision = 2 - - with client as request: - request.cookies = cookies - response = request.get("/tos") - # This time, we have a modified term Revision that hasn't - # yet been agreed to via AcceptedTerm update. - assert response.status_code == int(HTTPStatus.OK) - - with db.begin(): - accepted_term.Revision = term.Revision - - with client as request: - request.cookies = cookies - response = request.get("/tos") - # We updated the term revision, there's nothing left to accept. - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - -def test_post_terms_of_service(client: TestClient, user: User): - request = Request() - sid = user.login(request, "testPassword") - - data = {"accept": True} # POST data. - cookies = {"AURSID": sid} # Auth cookie. - - # Create a fresh Term. - with db.begin(): - term = create( - Term, Description="Test term.", URL="http://localhost", Revision=1 - ) - - # Test that the term we just created is listed. - with client as request: - request.cookies = cookies - response = request.get("/tos") - assert response.status_code == int(HTTPStatus.OK) - - # Make a POST request to /tos with the agree checkbox disabled (False). - with client as request: - request.cookies = cookies - response = request.post("/tos", data={"accept": False}) - assert response.status_code == int(HTTPStatus.OK) - - # Make a POST request to /tos with the agree checkbox enabled (True). - with client as request: - request.cookies = cookies - response = request.post("/tos", data=data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - # Query the db for the record created by the post request. - accepted_term = query(AcceptedTerm, AcceptedTerm.TermsID == term.ID).first() - assert accepted_term.User == user - assert accepted_term.Term == term - - # Update the term to revision 2. - with db.begin(): - term.Revision = 2 - - # A GET request gives us the new revision to accept. - with client as request: - request.cookies = cookies - response = request.get("/tos") - assert response.status_code == int(HTTPStatus.OK) - - # Let's POST again and agree to the new term revision. - with client as request: - request.cookies = cookies - response = request.post("/tos", data=data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - # Check that the records ended up matching. - assert accepted_term.Revision == term.Revision - - # Now, see that GET redirects us to / with no terms left to accept. - with client as request: - request.cookies = cookies - response = request.get("/tos") - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/" - - -def test_account_comments_not_found(client: TestClient, user: User): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get("/account/non-existent/comments") - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_accounts_unauthorized(client: TestClient, user: User): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get("/accounts") - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == "/" - - -def test_account_delete_self_unauthorized(client: TestClient, pm_user: User): - with db.begin(): - user = create_user("some_user") - user2 = create_user("user2") - - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/account/{user2.Username}/delete" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == HTTPStatus.UNAUTHORIZED - - resp = request.post(endpoint) - assert resp.status_code == HTTPStatus.UNAUTHORIZED - - # But a PM does have access - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with TestClient(app=app) as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == HTTPStatus.OK - - -def test_account_delete_self_not_found(client: TestClient, user: User): - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = "/account/non-existent-user/delete" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == HTTPStatus.NOT_FOUND - - resp = request.post(endpoint) - assert resp.status_code == HTTPStatus.NOT_FOUND - - -def test_account_delete_self(client: TestClient, user: User): - username = user.Username - - # Confirm that we can view our own account deletion page - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/account/{username}/delete" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == HTTPStatus.OK - - # The checkbox must be checked - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"passwd": "fakePassword", "confirm": False}, - ) - assert resp.status_code == HTTPStatus.BAD_REQUEST - errors = get_errors(resp.text) - assert ( - errors[0].text.strip() - == "The account has not been deleted, check the confirmation checkbox." - ) - - # The correct password must be supplied - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"passwd": "fakePassword", "confirm": True}, - ) - assert resp.status_code == HTTPStatus.BAD_REQUEST - errors = get_errors(resp.text) - assert errors[0].text.strip() == "Invalid password." - - # Supply everything correctly and delete ourselves - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"passwd": "testPassword", "confirm": True}, - ) - assert resp.status_code == HTTPStatus.SEE_OTHER - - # Check that our User record no longer exists in the database - record = db.query(User).filter(User.Username == username).first() - assert record is None - - -def test_account_delete_self_with_ssh_public_key(client: TestClient, user: User): - username = user.Username - - with db.begin(): - db.create( - SSHPubKey, User=user, Fingerprint="testFingerprint", PubKey="testPubKey" - ) - - # Confirm that we can view our own account deletion page - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/account/{username}/delete" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == HTTPStatus.OK - - # Supply everything correctly and delete ourselves - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"passwd": "testPassword", "confirm": True}, - ) - assert resp.status_code == HTTPStatus.SEE_OTHER - - # Check that our User record no longer exists in the database - user_record = db.query(User).filter(User.Username == username).first() - assert user_record is None - sshpubkey_record = db.query(SSHPubKey).filter(SSHPubKey.User == user).first() - assert sshpubkey_record is None - - -def test_account_delete_as_pm(client: TestClient, pm_user: User): - with db.begin(): - user = create_user("user2") - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - username = user.Username - endpoint = f"/account/{username}/delete" - - # Delete the user - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"passwd": "testPassword", "confirm": True}, - ) - assert resp.status_code == HTTPStatus.SEE_OTHER - - # Check that our User record no longer exists in the database - record = db.query(User).filter(User.Username == username).first() - assert record is None diff --git a/test/test_adduser.py b/test/test_adduser.py deleted file mode 100644 index 13648d5e..00000000 --- a/test/test_adduser.py +++ /dev/null @@ -1,74 +0,0 @@ -from unittest import mock - -import pytest - -import aurweb.models.account_type as at -from aurweb import db -from aurweb.models import User -from aurweb.scripts import adduser -from aurweb.testing.requests import Request - -TEST_SSH_PUBKEY = ( - "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAI" - "bmlzdHAyNTYAAABBBEURnkiY6JoLyqDE8Li1XuAW+LHmkmLDMW/GL5wY" - "7k4/A+Ta7bjA3MOKrF9j4EuUTvCuNXULxvpfSqheTFWZc+g= " - "kevr@volcano" -) - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def run_main(args: list[str] = []): - with mock.patch("sys.argv", ["aurweb-adduser"] + args): - adduser.main() - - -def test_adduser_no_args(): - with pytest.raises(SystemExit): - run_main() - - -def test_adduser(): - run_main(["-u", "test", "-e", "test@example.org", "-p", "abcd1234"]) - test = db.query(User).filter(User.Username == "test").first() - assert test is not None - assert test.login(Request(), "abcd1234") - - -def test_adduser_pm(): - run_main( - [ - "-u", - "test", - "-e", - "test@example.org", - "-p", - "abcd1234", - "-t", - at.PACKAGE_MAINTAINER, - ] - ) - test = db.query(User).filter(User.Username == "test").first() - assert test is not None - assert test.AccountTypeID == at.PACKAGE_MAINTAINER_ID - - -def test_adduser_ssh_pk(): - run_main( - [ - "-u", - "test", - "-e", - "test@example.org", - "-p", - "abcd1234", - "--ssh-pubkey", - TEST_SSH_PUBKEY, - ] - ) - test = db.query(User).filter(User.Username == "test").first() - assert test is not None - assert TEST_SSH_PUBKEY.startswith(test.ssh_pub_keys.first().PubKey) diff --git a/test/test_api_rate_limit.py b/test/test_api_rate_limit.py deleted file mode 100644 index c67aa57d..00000000 --- a/test/test_api_rate_limit.py +++ /dev/null @@ -1,34 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.api_rate_limit import ApiRateLimit - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_api_rate_key_creation(): - with db.begin(): - rate = db.create(ApiRateLimit, IP="127.0.0.1", Requests=10, WindowStart=1) - assert rate.IP == "127.0.0.1" - assert rate.Requests == 10 - assert rate.WindowStart == 1 - - -def test_api_rate_key_ip_default(): - with db.begin(): - api_rate_limit = db.create(ApiRateLimit, Requests=10, WindowStart=1) - assert api_rate_limit.IP == str() - - -def test_api_rate_key_null_requests_raises_exception(): - with pytest.raises(IntegrityError): - ApiRateLimit(IP="127.0.0.1", WindowStart=1) - - -def test_api_rate_key_null_window_start_raises_exception(): - with pytest.raises(IntegrityError): - ApiRateLimit(IP="127.0.0.1", Requests=1) diff --git a/test/test_asgi.py b/test/test_asgi.py deleted file mode 100644 index 840e6608..00000000 --- a/test/test_asgi.py +++ /dev/null @@ -1,243 +0,0 @@ -import http -import os -import re -from typing import Callable -from unittest import mock - -import fastapi -import pytest -from fastapi import HTTPException -from fastapi.testclient import TestClient - -import aurweb.asgi -import aurweb.aur_redis -import aurweb.config -from aurweb.exceptions import handle_form_exceptions -from aurweb.testing.requests import Request - - -@pytest.fixture -def setup(db_test, email_test): - aurweb.aur_redis.redis_connection().flushall() - yield - aurweb.aur_redis.redis_connection().flushall() - - -@pytest.fixture -def mock_glab_request(monkeypatch): - def wrapped(return_value=None, side_effect=None): - def what_to_return(*args, **kwargs): - if side_effect: - return side_effect # pragma: no cover - return return_value - - monkeypatch.setattr("requests.post", what_to_return) - - return wrapped - - -def mock_glab_config(project: str = "test/project", token: str = "test-token"): - config_get = aurweb.config.get - - def wrapper(section: str, key: str) -> str: - if section == "notifications": - if key == "error-project": - return project - elif key == "error-token": - return token - return config_get(section, key) - - return wrapper - - -@pytest.mark.asyncio -async def test_asgi_startup_session_secret_exception(monkeypatch): - """Test that we get an IOError on app_startup when we cannot - connect to options.redis_address.""" - - redis_addr = aurweb.config.get("options", "redis_address") - - def mock_get(section: str, key: str): - if section == "fastapi" and key == "session_secret": - return None - return redis_addr - - with mock.patch("aurweb.config.get", side_effect=mock_get): - with pytest.raises(Exception): - await aurweb.asgi.app_startup() - - -@pytest.mark.asyncio -async def test_asgi_startup_exception(): - # save proper session secret - prev_secret = aurweb.asgi.session_secret - - # remove secret - aurweb.asgi.session_secret = None - - # startup should fail - with pytest.raises(Exception): - await aurweb.asgi.app_startup() - - # restore previous session secret after test - aurweb.asgi.session_secret = prev_secret - - -@pytest.mark.asyncio -async def test_asgi_http_exception_handler(): - exc = HTTPException(status_code=422, detail="EXCEPTION!") - phrase = http.HTTPStatus(exc.status_code).phrase - response = await aurweb.asgi.http_exception_handler(Request(), exc) - assert response.status_code == 422 - content = response.body.decode() - assert f"{exc.status_code} - {phrase}" in content - assert "EXCEPTION!" in content - - -@pytest.mark.asyncio -async def test_asgi_app_unsupported_backends(): - config_get = aurweb.config.get - - # Test that the previously supported "sqlite" backend is now - # unsupported by FastAPI. - def mock_sqlite_backend(section: str, key: str): - if section == "database" and key == "backend": - return "sqlite" - return config_get(section, key) - - with mock.patch("aurweb.config.get", side_effect=mock_sqlite_backend): - expr = r"^.*\(sqlite\) is unsupported.*$" - with pytest.raises(ValueError, match=expr): - await aurweb.asgi.app_startup() - - -@pytest.mark.asyncio -async def test_asgi_app_disabled_metrics(caplog: pytest.LogCaptureFixture): - env = {"PROMETHEUS_MULTIPROC_DIR": str()} - with mock.patch.dict(os.environ, env): - await aurweb.asgi.app_startup() - - expected = ( - "$PROMETHEUS_MULTIPROC_DIR is not set, the /metrics " "endpoint is disabled." - ) - assert expected in caplog.text - - -@pytest.fixture -def use_traceback(): - config_getboolean = aurweb.config.getboolean - - def mock_getboolean(section: str, key: str) -> bool: - if section == "options" and key == "traceback": - return True - return config_getboolean(section, key) - - with mock.patch("aurweb.config.getboolean", side_effect=mock_getboolean): - yield - - -class FakeResponse: - def __init__(self, status_code: int = 201, text: str = "{}"): - self.status_code = status_code - self.text = text - - -def test_internal_server_error_bad_glab( - setup: None, - use_traceback: None, - mock_glab_request: Callable, - caplog: pytest.LogCaptureFixture, -): - @aurweb.asgi.app.get("/internal_server_error") - async def internal_server_error(request: fastapi.Request): - raise ValueError("test exception") - - with mock.patch("aurweb.config.get", side_effect=mock_glab_config()): - with TestClient(app=aurweb.asgi.app) as request: - mock_glab_request(FakeResponse(status_code=404)) - resp = request.get("/internal_server_error") - assert resp.status_code == int(http.HTTPStatus.INTERNAL_SERVER_ERROR) - - expr = r"ERROR.*Unable to report exception to" - assert re.search(expr, caplog.text) - - expr = r"FATAL\[.{7}\]" - assert re.search(expr, caplog.text) - - -def test_internal_server_error_no_token( - setup: None, - use_traceback: None, - mock_glab_request: Callable, - caplog: pytest.LogCaptureFixture, -): - @aurweb.asgi.app.get("/internal_server_error") - async def internal_server_error(request: fastapi.Request): - raise ValueError("test exception") - - mock_get = mock_glab_config(token="set-me") - with mock.patch("aurweb.config.get", side_effect=mock_get): - with TestClient(app=aurweb.asgi.app) as request: - mock_glab_request(FakeResponse()) - resp = request.get("/internal_server_error") - assert resp.status_code == int(http.HTTPStatus.INTERNAL_SERVER_ERROR) - - expr = r"WARNING.*Unable to report an exception found" - assert re.search(expr, caplog.text) - - expr = r"FATAL\[.{7}\]" - assert re.search(expr, caplog.text) - - -def test_internal_server_error( - setup: None, - use_traceback: None, - mock_glab_request: Callable, - caplog: pytest.LogCaptureFixture, -): - @aurweb.asgi.app.get("/internal_server_error") - async def internal_server_error(request: fastapi.Request): - raise ValueError("test exception") - - with mock.patch("aurweb.config.get", side_effect=mock_glab_config()): - with TestClient(app=aurweb.asgi.app) as request: - mock_glab_request(FakeResponse()) - # Test with a ?query=string to cover the request.url.query path. - resp = request.get("/internal_server_error?query=string") - assert resp.status_code == int(http.HTTPStatus.INTERNAL_SERVER_ERROR) - - # Assert that the exception got logged with with its traceback id. - expr = r"FATAL\[.{7}\]" - assert re.search(expr, caplog.text) - - # Let's do it again to exercise the cached path. - caplog.clear() - with mock.patch("aurweb.config.get", side_effect=mock_glab_config()): - with TestClient(app=aurweb.asgi.app) as request: - mock_glab_request(FakeResponse()) - resp = request.get("/internal_server_error") - assert resp.status_code == int(http.HTTPStatus.INTERNAL_SERVER_ERROR) - assert "FATAL" not in caplog.text - - -def test_internal_server_error_post( - setup: None, - use_traceback: None, - mock_glab_request: Callable, - caplog: pytest.LogCaptureFixture, -): - @aurweb.asgi.app.post("/internal_server_error") - @handle_form_exceptions - async def internal_server_error(request: fastapi.Request): - raise ValueError("test exception") - - data = {"some": "data"} - with mock.patch("aurweb.config.get", side_effect=mock_glab_config()): - with TestClient(app=aurweb.asgi.app) as request: - mock_glab_request(FakeResponse()) - # Test with a ?query=string to cover the request.url.query path. - resp = request.post("/internal_server_error", data=data) - assert resp.status_code == int(http.HTTPStatus.INTERNAL_SERVER_ERROR) - - expr = r"FATAL\[.{7}\]" - assert re.search(expr, caplog.text) diff --git a/test/test_aurblup.py b/test/test_aurblup.py deleted file mode 100644 index 1489677d..00000000 --- a/test/test_aurblup.py +++ /dev/null @@ -1,109 +0,0 @@ -import tempfile -from unittest import mock - -import py -import pytest - -from aurweb import config, db -from aurweb.models import OfficialProvider -from aurweb.scripts import aurblup -from aurweb.testing.alpm import AlpmDatabase - - -@pytest.fixture -def tempdir() -> str: - with tempfile.TemporaryDirectory() as name: - yield name - - -@pytest.fixture -def alpm_db(tempdir: py.path.local) -> AlpmDatabase: - yield AlpmDatabase(tempdir) - - -@pytest.fixture(autouse=True) -def setup(db_test, alpm_db: AlpmDatabase, tempdir: py.path.local) -> None: - config_get = config.get - - def mock_config_get(section: str, key: str) -> str: - value = config_get(section, key) - if section == "aurblup": - if key == "db-path": - return alpm_db.local - elif key == "server": - return f"file://{alpm_db.remote}" - elif key == "sync-dbs": - return alpm_db.repo - return value - - with mock.patch("aurweb.config.get", side_effect=mock_config_get): - config.rehash() - yield - config.rehash() - - -def test_aurblup(alpm_db: AlpmDatabase): - # Test that we can add a package. - alpm_db.add("pkg", "1.0", "x86_64", provides=["pkg2", "pkg3"]) - alpm_db.add("pkg2", "2.0", "x86_64") - aurblup.main() - - # Test that the package got added to the database. - for name in ("pkg", "pkg2"): - pkg = db.query(OfficialProvider).filter(OfficialProvider.Name == name).first() - assert pkg is not None - - # Test that we can remove the package. - alpm_db.remove("pkg") - - # Run aurblup again with forced repository update. - aurblup.main(True) - - # Expect that the database got updated accordingly. - pkg = db.query(OfficialProvider).filter(OfficialProvider.Name == "pkg").first() - assert pkg is None - pkg2 = db.query(OfficialProvider).filter(OfficialProvider.Name == "pkg2").first() - assert pkg2 is not None - - -def test_aurblup_cleanup(alpm_db: AlpmDatabase): - # Add a package and sync up the database. - alpm_db.add("pkg", "1.0", "x86_64", provides=["pkg2", "pkg3"]) - aurblup.main() - - # Now, let's insert an OfficialPackage that doesn't exist, - # then exercise the old provider deletion path. - with db.begin(): - db.create( - OfficialProvider, Name="fake package", Repo="test", Provides="package" - ) - - # Run aurblup again. - aurblup.main() - - # Expect that the fake package got deleted because it's - # not in alpm_db anymore. - providers = ( - db.query(OfficialProvider).filter(OfficialProvider.Name == "fake package").all() - ) - assert len(providers) == 0 - - -def test_aurblup_repo_change(alpm_db: AlpmDatabase): - # Add a package and sync up the database. - alpm_db.add("pkg", "1.0", "x86_64", provides=["pkg2", "pkg3"]) - aurblup.main() - - # We should find an entry with repo "test" - op = db.query(OfficialProvider).filter(OfficialProvider.Name == "pkg").first() - assert op.Repo == "test" - - # Modify the repo to something that does not exist. - op.Repo = "nonsense" - - # Run our script. - aurblup.main() - - # Repo should be set back to "test" - db.refresh(op) - assert op.Repo == "test" diff --git a/test/test_auth.py b/test/test_auth.py deleted file mode 100644 index f3502faf..00000000 --- a/test/test_auth.py +++ /dev/null @@ -1,162 +0,0 @@ -import fastapi -import pytest -from fastapi import HTTPException -from sqlalchemy.exc import IntegrityError - -from aurweb import config, db, time -from aurweb.auth import ( - AnonymousUser, - BasicAuthBackend, - _auth_required, - account_type_required, -) -from aurweb.models.account_type import USER, USER_ID -from aurweb.models.session import Session -from aurweb.models.user import User -from aurweb.testing.requests import Request - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.com", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def backend() -> BasicAuthBackend: - yield BasicAuthBackend() - - -@pytest.mark.asyncio -async def test_auth_backend_missing_sid(backend: BasicAuthBackend): - # The request has no AURSID cookie, so authentication fails, and - # AnonymousUser is returned. - _, result = await backend.authenticate(Request()) - assert not result.is_authenticated() - - -@pytest.mark.asyncio -async def test_auth_backend_invalid_sid(backend: BasicAuthBackend): - # Provide a fake AURSID that won't be found in the database. - # This results in our path going down the invalid sid route, - # which gives us an AnonymousUser. - request = Request() - request.cookies["AURSID"] = "fake" - _, result = await backend.authenticate(request) - assert not result.is_authenticated() - - -@pytest.mark.asyncio -async def test_auth_backend_invalid_user_id(): - # Create a new session with a fake user id. - now_ts = time.utcnow() - with pytest.raises(IntegrityError): - Session(UsersID=666, SessionID="realSession", LastUpdateTS=now_ts + 5) - - -@pytest.mark.asyncio -async def test_basic_auth_backend(user: User, backend: BasicAuthBackend): - # This time, everything matches up. We expect the user to - # equal the real_user. - now_ts = time.utcnow() - with db.begin(): - db.create( - Session, UsersID=user.ID, SessionID="realSession", LastUpdateTS=now_ts + 5 - ) - - request = Request() - request.cookies["AURSID"] = "realSession" - _, result = await backend.authenticate(request) - assert result == user - - -@pytest.mark.asyncio -async def test_expired_session(backend: BasicAuthBackend, user: User): - """Login, expire the session manually, then authenticate.""" - # First, build a Request with a logged in user. - request = Request() - request.user = user - sid = request.user.login(Request(), "testPassword") - request.cookies["AURSID"] = sid - - # Set Session.LastUpdateTS to 20 seconds expired. - timeout = config.getint("options", "login_timeout") - now_ts = time.utcnow() - with db.begin(): - request.user.session.LastUpdateTS = now_ts - timeout - 20 - - # Run through authentication backend and get the session - # deleted due to its expiration. - await backend.authenticate(request) - session = db.query(Session).filter(Session.SessionID == sid).first() - assert session is None - - -@pytest.mark.asyncio -async def test_auth_required_redirection_bad_referrer(): - # Create a fake route function which can be wrapped by auth_required. - def bad_referrer_route(request: fastapi.Request): - pass - - # Get down to the nitty gritty internal wrapper. - bad_referrer_route = _auth_required()(bad_referrer_route) - - # Execute the route with a "./blahblahblah" Referer, which does not - # match aur_location; `./` has been used as a prefix to attempt to - # ensure we're providing a fake referer. - with pytest.raises(HTTPException) as exc: - request = Request(method="POST", headers={"Referer": "./blahblahblah"}) - await bad_referrer_route(request) - assert exc.detail == "Bad Referer header." - - -def test_account_type_required(): - """This test merely asserts that a few different paths - do not raise exceptions.""" - # This one shouldn't raise. - account_type_required({USER}) - - # This one also shouldn't raise. - account_type_required({USER_ID}) - - # But this one should! We have no "FAKE" key. - with pytest.raises(KeyError): - account_type_required({"FAKE"}) - - -def test_is_package_maintainer(): - user_ = AnonymousUser() - assert not user_.is_package_maintainer() - - -def test_is_developer(): - user_ = AnonymousUser() - assert not user_.is_developer() - - -def test_is_elevated(): - user_ = AnonymousUser() - assert not user_.is_elevated() - - -def test_voted_for(): - user_ = AnonymousUser() - assert not user_.voted_for(None) - - -def test_notified(): - user_ = AnonymousUser() - assert not user_.notified(None) diff --git a/test/test_auth_routes.py b/test/test_auth_routes.py deleted file mode 100644 index 066457c4..00000000 --- a/test/test_auth_routes.py +++ /dev/null @@ -1,374 +0,0 @@ -import re -from http import HTTPStatus -from unittest import mock - -import pytest -from fastapi.testclient import TestClient - -import aurweb.config -from aurweb import db, time -from aurweb.asgi import app -from aurweb.models.account_type import USER_ID -from aurweb.models.session import Session -from aurweb.models.user import User -from aurweb.testing.html import get_errors - -# Some test global constants. -TEST_USERNAME = "test" -TEST_EMAIL = "test@example.org" -TEST_REFERER = { - "referer": aurweb.config.get("options", "aur_location") + "/login", -} - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def client() -> TestClient: - client = TestClient(app=app) - - # Necessary for forged login CSRF protection on the login route. Set here - # instead of only on the necessary requests for convenience. - client.headers.update(TEST_REFERER) - - # disable redirects for our tests - client.follow_redirects = False - yield client - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username=TEST_USERNAME, - Email=TEST_EMAIL, - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -def test_login_logout(client: TestClient, user: User): - post_data = {"user": "test", "passwd": "testPassword", "next": "/"} - - with client as request: - # First, let's test get /login. - response = request.get("/login") - assert response.status_code == int(HTTPStatus.OK) - - response = request.post("/login", data=post_data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - # Simulate following the redirect location from above's response. - response = request.get(response.headers.get("location")) - assert response.status_code == int(HTTPStatus.OK) - - response = request.post("/logout", data=post_data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - request.cookies = {"AURSID": response.cookies.get("AURSID")} - response = request.post( - "/logout", - data=post_data, - ) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - assert "AURSID" not in response.cookies - - -def test_login_suspended(client: TestClient, user: User): - with db.begin(): - user.Suspended = 1 - - data = {"user": user.Username, "passwd": "testPassword", "next": "/"} - with client as request: - resp = request.post("/login", data=data) - errors = get_errors(resp.text) - assert errors[0].text.strip() == "Account Suspended" - - -def test_login_email(client: TestClient, user: user): - post_data = {"user": user.Email, "passwd": "testPassword", "next": "/"} - - with client as request: - resp = request.post("/login", data=post_data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert "AURSID" in resp.cookies - - -def mock_getboolean(**overrided_configs): - mocked_config = { - tuple(config.split("__")): value for config, value in overrided_configs.items() - } - - def side_effect(*args): - return mocked_config.get(args, bool(aurweb.config.get(*args))) - - return side_effect - - -@mock.patch( - "aurweb.config.getboolean", - side_effect=mock_getboolean(options__disable_http_login=False), -) -def test_insecure_login(getboolean: mock.Mock, client: TestClient, user: User): - post_data = {"user": user.Username, "passwd": "testPassword", "next": "/"} - - # Perform a login request with the data matching our user. - with client as request: - response = request.post("/login", data=post_data) - - # Make sure we got the expected status out of it. - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - # Let's check what we got in terms of cookies for AURSID. - # Make sure that a secure cookie got passed to us. - cookie = next(c for c in response.cookies.jar if c.name == "AURSID") - assert cookie.secure is False - assert cookie.has_nonstandard_attr("HttpOnly") is False - assert cookie.has_nonstandard_attr("SameSite") is True - assert cookie.get_nonstandard_attr("SameSite") == "lax" - assert cookie.value is not None and len(cookie.value) > 0 - - -@mock.patch( - "aurweb.config.getboolean", - side_effect=mock_getboolean(options__disable_http_login=True), -) -def test_secure_login(getboolean: mock.Mock, client: TestClient, user: User): - """In this test, we check to verify the course of action taken - by starlette when providing secure=True to a response cookie. - This is achieved by mocking aurweb.config.getboolean to return - True (or 1) when looking for `options.disable_http_login`. - When we receive a response with `disable_http_login` enabled, - we check the fields in cookies received for the secure and - httponly fields, in addition to the rest of the fields given - on such a request.""" - - # Create a local TestClient here since we mocked configuration. - # client = TestClient(app) - - # Necessary for forged login CSRF protection on the login route. Set here - # instead of only on the necessary requests for convenience. - # client.headers.update(TEST_REFERER) - - # Data used for our upcoming http post request. - post_data = {"user": user.Username, "passwd": "testPassword", "next": "/"} - - # Perform a login request with the data matching our user. - with client as request: - response = request.post("/login", data=post_data) - - # Make sure we got the expected status out of it. - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - # Let's check what we got in terms of cookies for AURSID. - # Make sure that a secure cookie got passed to us. - cookie = next(c for c in response.cookies.jar if c.name == "AURSID") - assert cookie.secure is True - assert cookie.has_nonstandard_attr("HttpOnly") is True - assert cookie.has_nonstandard_attr("SameSite") is True - assert cookie.get_nonstandard_attr("SameSite") == "lax" - assert cookie.value is not None and len(cookie.value) > 0 - - # Let's make sure we actually have a session relationship - # with the AURSID we ended up with. - record = db.query(Session, Session.SessionID == cookie.value).first() - assert record is not None and record.User == user - assert user.session == record - - -def test_authenticated_login(client: TestClient, user: User): - post_data = {"user": user.Username, "passwd": "testPassword", "next": "/"} - - with client as request: - # Try to login. - response = request.post("/login", data=post_data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/" - - # Now, let's verify that we get the logged in rendering - # when requesting GET /login as an authenticated user. - # Now, let's verify that we receive 403 Forbidden when we - # try to get /login as an authenticated user. - request.cookies = response.cookies - response = request.get("/login") - - assert response.status_code == int(HTTPStatus.OK) - assert "Logged-in as: test" in response.text - - -def test_unauthenticated_logout_unauthorized(client: TestClient): - with client as request: - # Alright, let's verify that attempting to /logout when not - # authenticated returns 401 Unauthorized. - response = request.post("/logout") - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location").startswith("/login") - - -def test_login_missing_username(client: TestClient): - post_data = {"passwd": "testPassword", "next": "/"} - - with client as request: - response = request.post("/login", data=post_data) - assert "AURSID" not in response.cookies - - # Make sure password isn't prefilled and remember_me isn't checked. - content = response.content.decode() - assert post_data["passwd"] not in content - assert "checked" not in content - - -def test_login_remember_me(client: TestClient, user: User): - post_data = { - "user": "test", - "passwd": "testPassword", - "next": "/", - "remember_me": True, - } - - with client as request: - response = request.post("/login", data=post_data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert "AURSID" in response.cookies - - cookie_timeout = aurweb.config.getint("options", "persistent_cookie_timeout") - now_ts = time.utcnow() - session = db.query(Session).filter(Session.UsersID == user.ID).first() - - # Expect that LastUpdateTS is not past the cookie timeout - # for a remembered session. - assert session.LastUpdateTS > (now_ts - cookie_timeout) - - -def test_login_incorrect_password_remember_me(client: TestClient, user: User): - post_data = { - "user": "test", - "passwd": "badPassword", - "next": "/", - "remember_me": "on", - } - - with client as request: - response = request.post("/login", data=post_data) - assert "AURSID" not in response.cookies - - # Make sure username is prefilled, password isn't prefilled, - # and remember_me is checked. - assert post_data["user"] in response.text - assert post_data["passwd"] not in response.text - assert "checked" in response.text - - -def test_login_missing_password(client: TestClient): - post_data = {"user": "test", "next": "/"} - - with client as request: - response = request.post("/login", data=post_data) - assert "AURSID" not in response.cookies - - # Make sure username is prefilled and remember_me isn't checked. - assert post_data["user"] in response.text - assert "checked" not in response.text - - -def test_login_incorrect_password(client: TestClient): - post_data = {"user": "test", "passwd": "badPassword", "next": "/"} - - with client as request: - response = request.post("/login", data=post_data) - assert "AURSID" not in response.cookies - - # Make sure username is prefilled, password isn't prefilled - # and remember_me isn't checked. - assert post_data["user"] in response.text - assert post_data["passwd"] not in response.text - assert "checked" not in response.text - - -def test_login_bad_referer(client: TestClient): - post_data = { - "user": "test", - "passwd": "testPassword", - "next": "/", - } - - # Create new TestClient without a Referer header. - client = TestClient(app) - - with client as request: - response = request.post("/login", data=post_data) - assert "AURSID" not in response.cookies - - BAD_REFERER = { - "referer": aurweb.config.get("options", "aur_location") + ".mal.local", - } - with client as request: - response = request.post("/login", data=post_data, headers=BAD_REFERER) - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - assert "AURSID" not in response.cookies - - -def test_generate_unique_sid_exhausted( - client: TestClient, user: User, caplog: pytest.LogCaptureFixture -): - """ - In this test, we mock up generate_unique_sid() to infinitely return - the same SessionID given to `user`. Within that mocking, we try - to login as `user2` and expect the internal server error rendering - by our error handler. - - This exercises the bad path of /login, where we can't find a unique - SID to assign the user. - """ - now = time.utcnow() - with db.begin(): - # Create a second user; we'll login with this one. - user2 = db.create( - User, - Username="test2", - Email="test2@example.org", - ResetKey="testReset", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - - # Create a session with ID == "testSession" for `user`. - db.create(Session, User=user, SessionID="testSession", LastUpdateTS=now) - - # Mock out generate_unique_sid; always return "testSession" which - # causes us to eventually error out and raise an internal error. - def mock_generate_sid(): - return "testSession" - - # Login as `user2`; we expect an internal server error response - # with a relevent detail. - post_data = { - "user": user2.Username, - "passwd": "testPassword", - "next": "/", - } - generate_unique_sid_ = "aurweb.models.session.generate_unique_sid" - with mock.patch(generate_unique_sid_, mock_generate_sid): - with client as request: - # Set cookies = {} to remove any previous login kept by TestClient. - request.cookies = {} - response = request.post("/login", data=post_data) - assert response.status_code == int(HTTPStatus.INTERNAL_SERVER_ERROR) - - assert "500 - Internal Server Error" in response.text - - # Make sure an IntegrityError from the DB got logged out - # with a FATAL traceback ID. - expr = r"FATAL\[.{7}\]" - assert re.search(expr, caplog.text) - assert "IntegrityError" in caplog.text - - expr = r"Duplicate entry .+ for key .+SessionID.+" - assert re.search(expr, response.text) diff --git a/test/test_ban.py b/test/test_ban.py deleted file mode 100644 index f795c27c..00000000 --- a/test/test_ban.py +++ /dev/null @@ -1,56 +0,0 @@ -import warnings -from datetime import UTC, datetime, timedelta - -import pytest -from sqlalchemy import exc as sa_exc - -from aurweb import db -from aurweb.db import create -from aurweb.models.ban import Ban, is_banned -from aurweb.testing.requests import Request - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def ban() -> Ban: - ts = datetime.now(UTC) + timedelta(seconds=30) - with db.begin(): - ban = create(Ban, IPAddress="127.0.0.1", BanTS=ts) - yield ban - - -def test_ban(ban: Ban): - assert ban.IPAddress == "127.0.0.1" - assert bool(ban.BanTS) - - -def test_invalid_ban(): - with pytest.raises(sa_exc.IntegrityError): - bad_ban = Ban(BanTS=datetime.now(UTC)) - - # We're adding a ban with no primary key; this causes an - # SQLAlchemy warnings when committing to the DB. - # Ignore them. - with warnings.catch_warnings(): - warnings.simplefilter("ignore", sa_exc.SAWarning) - with db.begin(): - db.add(bad_ban) - - # Since we got a transaction failure, we need to rollback. - db.rollback() - - -def test_banned(ban: Ban): - request = Request() - request.client.host = "127.0.0.1" - assert is_banned(request) - - -def test_not_banned(ban: Ban): - request = Request() - request.client.host = "192.168.0.1" - assert not is_banned(request) diff --git a/test/test_cache.py b/test/test_cache.py deleted file mode 100644 index a599ab32..00000000 --- a/test/test_cache.py +++ /dev/null @@ -1,94 +0,0 @@ -from unittest import mock - -import pytest - -from aurweb import cache, config, db -from aurweb.models.account_type import USER_ID -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture(autouse=True) -def clear_fakeredis_cache(): - cache._redis.flushall() - - -def test_db_count_cache(user): - query = db.query(User) - - # We have no cached value yet. - assert cache._redis.get("key1") is None - - # Add to cache - assert cache.db_count_cache("key1", query) == query.count() - - # It's cached now. - assert cache._redis.get("key1") is not None - - # It does not expire - assert cache._redis.ttl("key1") == -1 - - # Cache a query with an expire. - value = cache.db_count_cache("key2", query, 100) - assert value == query.count() - - assert cache._redis.ttl("key2") == 100 - - -def test_db_query_cache(user): - query = db.query(User) - - # We have no cached value yet. - assert cache._redis.get("key1") is None - - # Add to cache - cache.db_query_cache("key1", query) - - # It's cached now. - assert cache._redis.get("key1") is not None - - # Modify our user and make sure we got a cached value - user.Username = "changed" - cached = cache.db_query_cache("key1", query) - assert cached[0].Username != query.all()[0].Username - - # It does not expire - assert cache._redis.ttl("key1") == -1 - - # Cache a query with an expire. - value = cache.db_query_cache("key2", query, 100) - assert len(value) == query.count() - assert value[0].Username == query.all()[0].Username - - assert cache._redis.ttl("key2") == 100 - - # Test "max_search_entries" options - def mock_max_search_entries(section: str, key: str, fallback: int) -> str: - if section == "cache" and key == "max_search_entries": - return 1 - return config.getint(section, key) - - with mock.patch("aurweb.config.getint", side_effect=mock_max_search_entries): - # Try to add another entry (we already have 2) - cache.db_query_cache("key3", query) - - # Make sure it was not added because it exceeds our max. - assert cache._redis.get("key3") is None diff --git a/test/test_captcha.py b/test/test_captcha.py deleted file mode 100644 index fa6fcbcc..00000000 --- a/test/test_captcha.py +++ /dev/null @@ -1,67 +0,0 @@ -import hashlib - -import pytest - -from aurweb import captcha - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_captcha_salts(): - """Make sure we can get some captcha salts.""" - salts = captcha.get_captcha_salts() - assert len(salts) == 6 - - -def test_captcha_token(): - """Make sure getting a captcha salt's token matches up against - the first three digits of the md5 hash of the salt.""" - salts = captcha.get_captcha_salts() - salt = salts[0] - - token1 = captcha.get_captcha_token(salt) - token2 = hashlib.md5(salt.encode()).hexdigest()[:3] - - assert token1 == token2 - - -def test_captcha_challenge_answer(): - """Make sure that executing the captcha challenge via shell - produces the correct result by comparing it against a straight - up token conversion.""" - salts = captcha.get_captcha_salts() - salt = salts[0] - - challenge = captcha.get_captcha_challenge(salt) - - token = captcha.get_captcha_token(salt) - challenge2 = f"LC_ALL=C pacman -V|sed -r 's#[0-9]+#{token}#g'|md5sum|cut -c1-6" - - assert challenge == challenge2 - - -def test_captcha_salt_filter(): - """Make sure captcha_salt_filter returns the first salt from - get_captcha_salts(). - - Example usage: - - """ - salt = captcha.captcha_salt_filter(None) - assert salt == captcha.get_captcha_salts()[0] - - -def test_captcha_cmdline_filter(): - """Make sure that the captcha_cmdline filter gives us the - same challenge that get_captcha_challenge does. - - Example usage: - {{ captcha_salt | captcha_cmdline }} - """ - salt = captcha.captcha_salt_filter(None) - display1 = captcha.captcha_cmdline_filter(None, salt) - display2 = captcha.get_captcha_challenge(salt) - assert display1 == display2 diff --git a/test/test_config.py b/test/test_config.py deleted file mode 100644 index c7a3610e..00000000 --- a/test/test_config.py +++ /dev/null @@ -1,175 +0,0 @@ -import configparser -import io -import os -import re -from unittest import mock - -import py - -from aurweb import config -from aurweb.scripts.config import main - - -def noop(*args, **kwargs) -> None: - return - - -def test_get(): - assert config.get("options", "disable_http_login") == "0" - - -def test_getboolean(): - assert not config.getboolean("options", "disable_http_login") - - -def test_getint(): - assert config.getint("options", "disable_http_login") == 0 - - -def mock_config_get(): - config_get = config.get - - def _mock_config_get(section: str, option: str): - if section == "options": - if option == "salt_rounds": - return "666" - return config_get(section, option) - - return _mock_config_get - - -@mock.patch("aurweb.config.get", side_effect=mock_config_get()) -def test_config_main_get(get: str): - stdout = io.StringIO() - args = ["aurweb-config", "get", "options", "salt_rounds"] - with mock.patch("sys.argv", args): - with mock.patch("sys.stdout", stdout): - main() - - expected = "666" - assert stdout.getvalue().strip() == expected - - -@mock.patch("aurweb.config.get", side_effect=mock_config_get()) -def test_config_main_get_unknown_section(get: str): - stderr = io.StringIO() - args = ["aurweb-config", "get", "fakeblahblah", "salt_rounds"] - with mock.patch("sys.argv", args): - with mock.patch("sys.stderr", stderr): - main() - - # With an invalid section, we should get a usage error. - expected = r"^error: no section found$" - assert re.match(expected, stderr.getvalue().strip()) - - -@mock.patch("aurweb.config.get", side_effect=mock_config_get()) -def test_config_main_get_unknown_option(get: str): - stderr = io.StringIO() - args = ["aurweb-config", "get", "options", "fakeblahblah"] - with mock.patch("sys.argv", args): - with mock.patch("sys.stderr", stderr): - main() - - expected = "error: no option found" - assert stderr.getvalue().strip() == expected - - -@mock.patch("aurweb.config.save", side_effect=noop) -def test_config_main_set(save: None): - data = None - - def set_option(section: str, option: str, value: str) -> None: - nonlocal data - data = value - - args = ["aurweb-config", "set", "options", "salt_rounds", "666"] - with mock.patch("sys.argv", args): - with mock.patch("aurweb.config.set_option", side_effect=set_option): - main() - - expected = "666" - assert data == expected - - -def test_config_main_set_real(tmpdir: py.path.local): - """ - Test a real set_option path. - """ - - # Copy AUR_CONFIG to {tmpdir}/aur.config. - aur_config = os.environ.get("AUR_CONFIG") - tmp_aur_config = os.path.join(str(tmpdir), "aur.config") - with open(aur_config) as f: - with open(tmp_aur_config, "w") as o: - o.write(f.read()) - - # Force reset the parser. This should NOT be done publicly. - config._parser = None - - value = 666 - args = ["aurweb-config", "set", "options", "fake-key", str(value)] - with mock.patch.dict("os.environ", {"AUR_CONFIG": tmp_aur_config}): - with mock.patch("sys.argv", args): - # Run aurweb.config.main(). - main() - - # Update the config; fake-key should be set. - config.rehash() - assert config.getint("options", "fake-key") == 666 - - # Restore config back to normal. - args = ["aurweb-config", "unset", "options", "fake-key"] - with mock.patch("sys.argv", args): - main() - - # Return the config back to normal. - config.rehash() - - # fake-key should no longer exist. - assert config.getint("options", "fake-key") is None - - -def test_config_main_set_immutable(): - data = None - - def mock_set_option(section: str, option: str, value: str) -> None: - nonlocal data - data = value - - args = ["aurweb-config", "set", "options", "salt_rounds", "666"] - with mock.patch.dict(os.environ, {"AUR_CONFIG_IMMUTABLE": "1"}): - with mock.patch("sys.argv", args): - with mock.patch("aurweb.config.set_option", side_effect=mock_set_option): - main() - - expected = None - assert data == expected - - -def test_config_main_set_invalid_value(): - stderr = io.StringIO() - - args = ["aurweb-config", "set", "options", "salt_rounds"] - with mock.patch("sys.argv", args): - with mock.patch("sys.stderr", stderr): - main() - - expected = "error: no value provided" - assert stderr.getvalue().strip() == expected - - -@mock.patch("aurweb.config.save", side_effect=noop) -def test_config_main_set_unknown_section(save: None): - stderr = io.StringIO() - - def mock_set_option(section: str, option: str, value: str) -> None: - raise configparser.NoSectionError(section=section) - - args = ["aurweb-config", "set", "options", "salt_rounds", "666"] - with mock.patch("sys.argv", args): - with mock.patch("sys.stderr", stderr): - with mock.patch("aurweb.config.set_option", side_effect=mock_set_option): - main() - - assert stderr.getvalue().strip() == "error: no section found" diff --git a/test/test_cookies.py b/test/test_cookies.py deleted file mode 100644 index dd4143cb..00000000 --- a/test/test_cookies.py +++ /dev/null @@ -1,151 +0,0 @@ -from datetime import datetime -from http import HTTPStatus - -import pytest -from fastapi.testclient import TestClient - -from aurweb import config, db -from aurweb.asgi import app -from aurweb.models.account_type import USER_ID -from aurweb.models.user import User -from aurweb.testing.requests import Request - -# Some test global constants. -TEST_USERNAME = "test" -TEST_EMAIL = "test@example.org" -TEST_REFERER = { - "referer": config.get("options", "aur_location") + "/login", -} - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def client() -> TestClient: - client = TestClient(app=app) - - # Necessary for forged login CSRF protection on the login route. Set here - # instead of only on the necessary requests for convenience. - client.headers.update(TEST_REFERER) - - # disable redirects for our tests - client.follow_redirects = False - yield client - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username=TEST_USERNAME, - Email=TEST_EMAIL, - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -def test_cookies_login(client: TestClient, user: User): - # Log in with "Remember me" disabled - data = {"user": user.Username, "passwd": "testPassword", "next": "/"} - with client as request: - resp = request.post("/login", data=data) - - local_time = int(datetime.now().timestamp()) - expected_permanent = local_time + config.getint( - "options", "permanent_cookie_timeout" - ) - - # Check if we got permanent cookies with expected expiry date. - # Allow 1 second difference to account for timing issues - # between the request and current time. - # AURSID should be a session cookie (no expiry date) - assert "AURSID", "AURREMEMBER" in resp.cookies - for cookie in resp.cookies.jar: - if cookie.name == "AURSID": - assert cookie.expires is None - - if cookie.name == "AURREMEMBER": - assert abs(cookie.expires - expected_permanent) < 2 - assert cookie.value == "False" - - # Log out - with client as request: - request.cookies = resp.cookies - resp = request.post("/logout", data=data) - - # Make sure AURSID cookie is removed after logout - assert "AURSID" not in resp.cookies - - # Log in with "Remember me" enabled - data = { - "user": user.Username, - "passwd": "testPassword", - "next": "/", - "remember_me": "True", - } - with client as request: - resp = request.post("/login", data=data) - - # Check if we got a permanent cookie with expected expiry date. - # Allow 1 second difference to account for timing issues - # between the request and current time. - # AURSID should be a persistent cookie - expected_persistent = local_time + config.getint( - "options", "persistent_cookie_timeout" - ) - assert "AURSID", "AURREMEMBER" in resp.cookies - for cookie in resp.cookies.jar: - if cookie.name in "AURSID": - assert abs(cookie.expires - expected_persistent) < 2 - - if cookie.name == "AURREMEMBER": - assert abs(cookie.expires - expected_permanent) < 2 - assert cookie.value == "True" - - # log in again even though we already have a session - with client as request: - resp = request.post("/login", data=data) - - # we are logged in already and should have been redirected - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == "/" - - -def test_cookie_language(client: TestClient, user: User): - # Unauthenticated reqeuests should set AURLANG cookie - data = {"set_lang": "en", "next": "/"} - with client as request: - resp = request.post("/language", data=data) - - local_time = int(datetime.now().timestamp()) - expected_permanent = local_time + config.getint( - "options", "permanent_cookie_timeout" - ) - - # Make sure we got an AURLANG cookie - assert "AURLANG" in resp.cookies - assert resp.cookies.get("AURLANG") == "en" - - # Check if we got a permanent cookie with expected expiry date. - # Allow 1 second difference to account for timing issues - # between the request and current time. - for cookie in resp.cookies.jar: - if cookie.name in "AURLANG": - assert abs(cookie.expires - expected_permanent) < 2 - - # Login and change the language - # We should not get a cookie since we store - # our language setting in the DB anyways - sid = user.login(Request(), "testPassword") - data = {"set_lang": "en", "next": "/"} - with client as request: - request.cookies = {"AURSID": sid} - resp = request.post("/language", data=data) - - assert "AURLANG" not in resp.cookies diff --git a/test/test_db.py b/test/test_db.py deleted file mode 100644 index 22dbdd36..00000000 --- a/test/test_db.py +++ /dev/null @@ -1,248 +0,0 @@ -import os -import re -import sqlite3 -import tempfile -from unittest import mock - -import pytest -from sqlalchemy.exc import OperationalError - -import aurweb.config -import aurweb.initdb -from aurweb import db -from aurweb.models.account_type import AccountType - - -class Args: - """Stub arguments used for running aurweb.initdb.""" - - use_alembic = True - verbose = True - - -class DBCursor: - """A fake database cursor object used in tests.""" - - items = [] - - def execute(self, *args, **kwargs): - self.items = list(args) - return self - - def fetchall(self): - return self.items - - -class DBConnection: - """A fake database connection object used in tests.""" - - @staticmethod - def cursor(): - return DBCursor() - - @staticmethod - def create_function(name, num_args, func): - pass - - -def make_temp_config(*replacements): - """Generate a temporary config file with a set of replacements. - - :param *replacements: A variable number of tuple regex replacement pairs - :return: A tuple containing (temp directory, temp config file) - """ - aurwebdir = aurweb.config.get("options", "aurwebdir") - config_file = os.path.join(aurwebdir, "conf", "config.dev") - config_defaults = os.path.join(aurwebdir, "conf", "config.defaults") - - db_name = aurweb.config.get("database", "name") - db_host = aurweb.config.get_with_fallback("database", "host", "localhost") - db_port = aurweb.config.get_with_fallback("database", "port", "3306") - db_user = aurweb.config.get_with_fallback("database", "user", "root") - db_password = aurweb.config.get_with_fallback("database", "password", None) - - # Replacements to perform before *replacements. - # These serve as generic replacements in config.dev - perform = ( - (r"name = .+", f"name = {db_name}"), - (r"host = .+", f"host = {db_host}"), - (r";port = .+", f";port = {db_port}"), - (r"user = .+", f"user = {db_user}"), - (r"password = .+", f"password = {db_password}"), - ("YOUR_AUR_ROOT", aurwebdir), - ) - - tmpdir = tempfile.TemporaryDirectory() - tmp = os.path.join(tmpdir.name, "config.tmp") - with open(config_file) as f: - config = f.read() - for repl in tuple(perform + replacements): - config = re.sub(repl[0], repl[1], config) - with open(tmp, "w") as o: - o.write(config) - with open(config_defaults) as i: - with open(f"{tmp}.defaults", "w") as o: - o.write(i.read()) - return tmpdir, tmp - - -def make_temp_sqlite_config(): - return make_temp_config( - (r"backend = .*", "backend = sqlite"), - (r"name = .*", "name = /tmp/aurweb.sqlite3"), - ) - - -def make_temp_mysql_config(): - return make_temp_config( - (r"backend = .*", "backend = mysql"), (r"name = .*", "name = aurweb_test") - ) - - -@pytest.fixture(autouse=True) -def setup(db_test): - if os.path.exists("/tmp/aurweb.sqlite3"): - os.remove("/tmp/aurweb.sqlite3") - - -def test_sqlalchemy_sqlite_url(): - tmpctx, tmp = make_temp_sqlite_config() - with tmpctx: - with mock.patch.dict(os.environ, {"AUR_CONFIG": tmp}): - aurweb.config.rehash() - assert db.get_sqlalchemy_url() - aurweb.config.rehash() - - -def test_sqlalchemy_mysql_url(): - tmpctx, tmp = make_temp_mysql_config() - with tmpctx: - with mock.patch.dict(os.environ, {"AUR_CONFIG": tmp}): - aurweb.config.rehash() - assert db.get_sqlalchemy_url() - aurweb.config.rehash() - - -def test_sqlalchemy_mysql_port_url(): - tmpctx, tmp = make_temp_config((r";port = 3306", "port = 3306")) - - with tmpctx: - with mock.patch.dict(os.environ, {"AUR_CONFIG": tmp}): - aurweb.config.rehash() - assert db.get_sqlalchemy_url() - aurweb.config.rehash() - - -def test_sqlalchemy_mysql_socket_url(): - tmpctx, tmp = make_temp_config() - - with tmpctx: - with mock.patch.dict(os.environ, {"AUR_CONFIG": tmp}): - aurweb.config.rehash() - assert db.get_sqlalchemy_url() - aurweb.config.rehash() - - -def test_sqlalchemy_unknown_backend(): - tmpctx, tmp = make_temp_config((r"backend = .+", "backend = blah")) - - with tmpctx: - with mock.patch.dict(os.environ, {"AUR_CONFIG": tmp}): - aurweb.config.rehash() - with pytest.raises(ValueError): - db.get_sqlalchemy_url() - aurweb.config.rehash() - - -def test_db_connects_without_fail(): - """This only tests the actual config supplied to pytest.""" - db.connect() - - -def test_connection_class_unsupported_backend(): - tmpctx, tmp = make_temp_config((r"backend = .+", "backend = blah")) - - with tmpctx: - with mock.patch.dict(os.environ, {"AUR_CONFIG": tmp}): - aurweb.config.rehash() - with pytest.raises(ValueError): - db.Connection() - aurweb.config.rehash() - - -@mock.patch("MySQLdb.connect", mock.MagicMock(return_value=True)) -def test_connection_mysql(): - tmpctx, tmp = make_temp_mysql_config() - with tmpctx: - with mock.patch.dict(os.environ, {"AUR_CONFIG": tmp}): - aurweb.config.rehash() - db.Connection() - aurweb.config.rehash() - - -def test_create_delete(): - with db.begin(): - account_type = db.create(AccountType, AccountType="test") - - record = db.query(AccountType, AccountType.AccountType == "test").first() - assert record is not None - - with db.begin(): - db.delete(account_type) - - record = db.query(AccountType, AccountType.AccountType == "test").first() - assert record is None - - -def test_add_commit(): - # Use db.add and db.commit to add a temporary record. - account_type = AccountType(AccountType="test") - with db.begin(): - db.add(account_type) - - # Assert it got created in the DB. - assert bool(account_type.ID) - - # Query the DB for it and compare the record with our object. - record = db.query(AccountType, AccountType.AccountType == "test").first() - assert record == account_type - - # Remove the record. - with db.begin(): - db.delete(account_type) - - -def test_connection_executor_mysql_paramstyle(): - executor = db.ConnectionExecutor(None, backend="mysql") - assert executor.paramstyle() == "format" - - -@mock.patch("sqlite3.paramstyle", "pyformat") -def test_connection_executor_sqlite_paramstyle(): - executor = db.ConnectionExecutor(None, backend="sqlite") - assert executor.paramstyle() == sqlite3.paramstyle - - -def test_name_without_pytest_current_test(): - with mock.patch.dict("os.environ", {}, clear=True): - dbname = aurweb.db.name() - assert dbname == aurweb.config.get("database", "name") - - -def test_retry_deadlock(): - @db.retry_deadlock - def func(): - raise OperationalError("Deadlock found", tuple(), "") - - with pytest.raises(OperationalError): - func() - - -@pytest.mark.asyncio -async def test_async_retry_deadlock(): - @db.async_retry_deadlock - async def func(): - raise OperationalError("Deadlock found", tuple(), "") - - with pytest.raises(OperationalError): - await func() diff --git a/test/test_defaults.py b/test/test_defaults.py deleted file mode 100644 index 4803fb5a..00000000 --- a/test/test_defaults.py +++ /dev/null @@ -1,14 +0,0 @@ -from aurweb import defaults - - -def test_fallback_pp(): - assert defaults.fallback_pp(75) == defaults.PP - assert defaults.fallback_pp(100) == 100 - - -def test_pp(): - assert defaults.PP == 50 - - -def test_o(): - assert defaults.O == 0 diff --git a/test/test_dependency_type.py b/test/test_dependency_type.py deleted file mode 100644 index e172782b..00000000 --- a/test/test_dependency_type.py +++ /dev/null @@ -1,33 +0,0 @@ -import pytest - -from aurweb.db import begin, create, delete, query -from aurweb.models.dependency_type import DependencyType - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_dependency_types(): - dep_types = ["depends", "makedepends", "checkdepends", "optdepends"] - for dep_type in dep_types: - dependency_type = query(DependencyType, DependencyType.Name == dep_type).first() - assert dependency_type is not None - - -def test_dependency_type_creation(): - with begin(): - dependency_type = create(DependencyType, Name="Test Type") - assert bool(dependency_type.ID) - assert dependency_type.Name == "Test Type" - with begin(): - delete(dependency_type) - - -def test_dependency_type_null_name_uses_default(): - with begin(): - dependency_type = create(DependencyType) - assert dependency_type.Name == str() - with begin(): - delete(dependency_type) diff --git a/test/test_email.py b/test/test_email.py deleted file mode 100644 index 81abd507..00000000 --- a/test/test_email.py +++ /dev/null @@ -1,58 +0,0 @@ -import io -from subprocess import PIPE, Popen - -import pytest - -from aurweb import config -from aurweb.testing.email import Email - - -@pytest.fixture(autouse=True) -def setup(email_test): - return - - -def sendmail(from_: str, to_: str, content: str) -> Email: - binary = config.get("notifications", "sendmail") - proc = Popen(binary, stdin=PIPE, stdout=PIPE, stderr=PIPE) - content = f"From: {from_}\nTo: {to_}\n\n{content}" - proc.communicate(content.encode()) - proc.wait() - assert proc.returncode == 0 - - -def test_email_glue(): - """Test that Email.glue() decodes both base64 and decoded content.""" - body = "Test email." - sendmail("test@example.org", "test@example.org", body) - assert Email.count() == 1 - - email1 = Email(1) - email2 = Email(1) - assert email1.glue() == email2.glue() - - -def test_email_dump(): - """Test that Email.dump() dumps a single email.""" - body = "Test email." - sendmail("test@example.org", "test@example.org", body) - assert Email.count() == 1 - - stdout = io.StringIO() - Email.dump(file=stdout) - content = stdout.getvalue() - assert "== Email #1 ==" in content - - -def test_email_dump_multiple(): - """Test that Email.dump() dumps multiple emails.""" - body = "Test email." - sendmail("test@example.org", "test@example.org", body) - sendmail("test2@example.org", "test2@example.org", body) - assert Email.count() == 2 - - stdout = io.StringIO() - Email.dump(file=stdout) - content = stdout.getvalue() - assert "== Email #1 ==" in content - assert "== Email #2 ==" in content diff --git a/test/test_exceptions.py b/test/test_exceptions.py deleted file mode 100644 index e43cd645..00000000 --- a/test/test_exceptions.py +++ /dev/null @@ -1,106 +0,0 @@ -from aurweb import exceptions - - -def test_aurweb_exception(): - try: - raise exceptions.AurwebException("test") - except exceptions.AurwebException as exc: - assert str(exc) == "test" - - -def test_maintenance_exception(): - try: - raise exceptions.MaintenanceException("test") - except exceptions.MaintenanceException as exc: - assert str(exc) == "test" - - -def test_banned_exception(): - try: - raise exceptions.BannedException("test") - except exceptions.BannedException as exc: - assert str(exc) == "test" - - -def test_already_voted_exception(): - try: - raise exceptions.AlreadyVotedException("test") - except exceptions.AlreadyVotedException as exc: - assert str(exc) == "already voted for package base: test" - - -def test_broken_update_hook_exception(): - try: - raise exceptions.BrokenUpdateHookException("test") - except exceptions.BrokenUpdateHookException as exc: - assert str(exc) == "broken update hook: test" - - -def test_invalid_arguments_exception(): - try: - raise exceptions.InvalidArgumentsException("test") - except exceptions.InvalidArgumentsException as exc: - assert str(exc) == "test" - - -def test_invalid_packagebase_exception(): - try: - raise exceptions.InvalidPackageBaseException("test") - except exceptions.InvalidPackageBaseException as exc: - assert str(exc) == "package base not found: test" - - -def test_invalid_comment_exception(): - try: - raise exceptions.InvalidCommentException("test") - except exceptions.InvalidCommentException as exc: - assert str(exc) == "comment is too short: test" - - -def test_invalid_reason_exception(): - try: - raise exceptions.InvalidReasonException("test") - except exceptions.InvalidReasonException as exc: - assert str(exc) == "invalid reason: test" - - -def test_invalid_user_exception(): - try: - raise exceptions.InvalidUserException("test") - except exceptions.InvalidUserException as exc: - assert str(exc) == "unknown user: test" - - -def test_not_voted_exception(): - try: - raise exceptions.NotVotedException("test") - except exceptions.NotVotedException as exc: - assert str(exc) == "missing vote for package base: test" - - -def test_packagebase_exists_exception(): - try: - raise exceptions.PackageBaseExistsException("test") - except exceptions.PackageBaseExistsException as exc: - assert str(exc) == "package base already exists: test" - - -def test_permission_denied_exception(): - try: - raise exceptions.PermissionDeniedException("test") - except exceptions.PermissionDeniedException as exc: - assert str(exc) == "permission denied: test" - - -def test_repository_name_exception(): - try: - raise exceptions.InvalidRepositoryNameException("test") - except exceptions.InvalidRepositoryNameException as exc: - assert str(exc) == "invalid repository name: test" - - -def test_invariant_error(): - try: - raise exceptions.InvariantError("test") - except exceptions.InvariantError as exc: - assert str(exc) == "test" diff --git a/test/test_filelock.py b/test/test_filelock.py deleted file mode 100644 index c0580642..00000000 --- a/test/test_filelock.py +++ /dev/null @@ -1,25 +0,0 @@ -import py -from _pytest.logging import LogCaptureFixture - -from aurweb.testing.filelock import FileLock - - -def test_filelock(tmpdir: py.path.local): - cb_path = None - - def setup(path: str): - nonlocal cb_path - cb_path = str(path) - - flock = FileLock(tmpdir, "test") - assert not flock.lock(on_create=setup) - assert cb_path == str(tmpdir / "test") - assert flock.lock() - - -def test_filelock_default(caplog: LogCaptureFixture, tmpdir: py.path.local): - # Test default_on_create here. - flock = FileLock(tmpdir, "test") - assert not flock.lock() - assert caplog.messages[0] == f"Filelock at {flock.path} acquired." - assert flock.lock() diff --git a/test/test_filters.py b/test/test_filters.py deleted file mode 100644 index ea0fa58b..00000000 --- a/test/test_filters.py +++ /dev/null @@ -1,53 +0,0 @@ -from datetime import UTC, datetime -from zoneinfo import ZoneInfo - -import pytest - -from aurweb import filters, time - - -def test_timestamp_to_datetime(): - ts = time.utcnow() - dt = datetime.fromtimestamp(ts, UTC) - assert filters.timestamp_to_datetime(ts) == dt - - -def test_as_timezone(): - ts = time.utcnow() - dt = filters.timestamp_to_datetime(ts) - assert filters.as_timezone(dt, "UTC") == dt.astimezone(tz=ZoneInfo("UTC")) - - -def test_number_format(): - assert filters.number_format(0.222, 2) == "0.22" - assert filters.number_format(0.226, 2) == "0.23" - - -def test_extend_query(): - """Test extension of a query via extend_query.""" - query = {"a": "b"} - extended = filters.extend_query(query, ("a", "c"), ("b", "d")) - assert extended.get("a") == "c" - assert extended.get("b") == "d" - - -def test_to_qs(): - """Test conversion from a query dictionary to a query string.""" - query = {"a": "b", "c": [1, 2, 3]} - qs = filters.to_qs(query) - assert qs == "a=b&c=1&c=2&c=3" - - -@pytest.mark.parametrize( - "value, args, expected", - [ - ("", (), ""), - ("a", (), "a"), - ("a", (1,), "a"), - ("%s", ("a",), "a"), - ("%s", ("ab",), "ab"), - ("%s%d", ("a", 1), "a1"), - ], -) -def test_safe_format(value: str, args: tuple, expected: str): - assert filters.safe_format(value, *args) == expected diff --git a/test/test_git_archives.py b/test/test_git_archives.py deleted file mode 100644 index c90706a4..00000000 --- a/test/test_git_archives.py +++ /dev/null @@ -1,242 +0,0 @@ -from http import HTTPStatus -from typing import Tuple -from unittest import mock - -import py -import pygit2 -import pytest -from fastapi.testclient import TestClient - -from aurweb import asgi, config, db -from aurweb.archives.spec.base import GitInfo, SpecBase -from aurweb.models import Package, PackageBase, User -from aurweb.scripts import git_archive -from aurweb.testing.requests import Request - - -@pytest.fixture -def mock_metadata_archive( - tmp_path: py.path.local, -) -> Tuple[py.path.local, py.path.local]: - metadata_path = tmp_path / "metadata.git" - - get_ = config.get - - def mock_config(section: str, option: str) -> str: - if section == "git-archive": - if option == "metadata-repo": - return str(metadata_path) - return get_(section, option) - - with mock.patch("aurweb.config.get", side_effect=mock_config): - yield metadata_path - - -@pytest.fixture -def mock_users_archive(tmp_path: py.path.local) -> py.path.local: - users_path = tmp_path / "users.git" - - get_ = config.get - - def mock_config(section: str, option: str) -> str: - if section == "git-archive": - if option == "users-repo": - return str(users_path) - return get_(section, option) - - with mock.patch("aurweb.config.get", side_effect=mock_config): - yield users_path - - -@pytest.fixture -def mock_pkgbases_archive(tmp_path: py.path.local) -> py.path.local: - pkgbases_path = tmp_path / "pkgbases.git" - - get_ = config.get - - def mock_config(section: str, option: str) -> str: - if section == "git-archive": - if option == "pkgbases-repo": - return str(pkgbases_path) - return get_(section, option) - - with mock.patch("aurweb.config.get", side_effect=mock_config): - yield pkgbases_path - - -@pytest.fixture -def mock_pkgnames_archive(tmp_path: py.path.local) -> py.path.local: - pkgnames_path = tmp_path / "pkgnames.git" - - get_ = config.get - - def mock_config(section: str, option: str) -> str: - if section == "git-archive": - if option == "pkgnames-repo": - return str(pkgnames_path) - return get_(section, option) - - with mock.patch("aurweb.config.get", side_effect=mock_config): - yield pkgnames_path - - -@pytest.fixture -def metadata(mock_metadata_archive: py.path.local) -> py.path.local: - args = [__name__, "--spec", "metadata"] - with mock.patch("sys.argv", args): - yield mock_metadata_archive - - -@pytest.fixture -def users(mock_users_archive: py.path.local) -> py.path.local: - args = [__name__, "--spec", "users"] - with mock.patch("sys.argv", args): - yield mock_users_archive - - -@pytest.fixture -def pkgbases(mock_pkgbases_archive: py.path.local) -> py.path.local: - args = [__name__, "--spec", "pkgbases"] - with mock.patch("sys.argv", args): - yield mock_pkgbases_archive - - -@pytest.fixture -def pkgnames(mock_pkgnames_archive: py.path.local) -> py.path.local: - args = [__name__, "--spec", "pkgnames"] - with mock.patch("sys.argv", args): - yield mock_pkgnames_archive - - -@pytest.fixture -def client() -> TestClient: - yield TestClient(app=asgi.app) - - -@pytest.fixture -def user(db_test: None) -> User: - with db.begin(): - user_ = db.create( - User, - Username="test", - Email="test@example.org", - Passwd="testPassword", - ) - - yield user_ - - -@pytest.fixture -def package(user: User) -> Package: - with db.begin(): - pkgbase_ = db.create( - PackageBase, - Name="test", - Maintainer=user, - Packager=user, - ) - - pkg_ = db.create( - Package, - PackageBase=pkgbase_, - Name="test", - ) - - yield pkg_ - - -def commit_count(repo: pygit2.Repository) -> int: - commits = 0 - for _ in repo.walk(repo.head.target): - commits += 1 - return commits - - -def test_specbase_raises_notimplementederror(): - spec = SpecBase() - with pytest.raises(NotImplementedError): - spec.generate() - - -def test_gitinfo_config(tmpdir: py.path.local): - path = tmpdir / "test.git" - git_info = GitInfo(path, {"user.name": "Test Person"}) - git_archive.init_repository(git_info) - - repo = pygit2.Repository(path) - assert repo.config["user.name"] == "Test Person" - - -def test_metadata(metadata: py.path.local, package: Package): - # Run main(), which creates mock_metadata_archive and commits current - # package data to it, exercising the "diff detected, committing" path - assert git_archive.main() == 0 - repo = pygit2.Repository(metadata) - assert commit_count(repo) == 1 - - # Run main() again to exercise the "no diff detected" path - assert git_archive.main() == 0 - repo = pygit2.Repository(metadata) - assert commit_count(repo) == 1 - - -def test_metadata_change( - client: TestClient, metadata: py.path.local, user: User, package: Package -): - """Test that metadata changes via aurweb cause git_archive to produce diffs.""" - # Run main(), which creates mock_metadata_archive and commits current - # package data to it, exercising the "diff detected, committing" path - assert git_archive.main() == 0 - repo = pygit2.Repository(metadata) - assert commit_count(repo) == 1 - - # Now, we modify `package`-related metadata via aurweb POST. - pkgbasename = package.PackageBase.Name - cookies = {"AURSID": user.login(Request(), "testPassword")} - - with client as request: - endp = f"/pkgbase/{pkgbasename}/keywords" - post_data = {"keywords": "abc def"} - request.cookies = cookies - resp = request.post(endp, data=post_data) - assert resp.status_code == HTTPStatus.OK - - # Run main() again, which should now produce a new commit with the - # keyword changes we just made - assert git_archive.main() == 0 - repo = pygit2.Repository(metadata) - assert commit_count(repo) == 2 - - -def test_metadata_delete(client: TestClient, metadata: py.path.local, package: Package): - # Run main(), which creates mock_metadata_archive and commits current - # package data to it, exercising the "diff detected, committing" path - assert git_archive.main() == 0 - repo = pygit2.Repository(metadata) - assert commit_count(repo) == 1 - - with db.begin(): - db.delete(package) - - # The deletion here should have caused a diff to be produced in git - assert git_archive.main() == 0 - repo = pygit2.Repository(metadata) - assert commit_count(repo) == 2 - - -def test_users(users: py.path.local, user: User): - assert git_archive.main() == 0 - repo = pygit2.Repository(users) - assert commit_count(repo) == 1 - - -def test_pkgbases(pkgbases: py.path.local, package: Package): - assert git_archive.main() == 0 - repo = pygit2.Repository(pkgbases) - assert commit_count(repo) == 1 - - -def test_pkgnames(pkgnames: py.path.local, package: Package): - assert git_archive.main() == 0 - repo = pygit2.Repository(pkgnames) - assert commit_count(repo) == 1 diff --git a/test/test_git_update.py b/test/test_git_update.py deleted file mode 100644 index 55db70b0..00000000 --- a/test/test_git_update.py +++ /dev/null @@ -1,203 +0,0 @@ -import json - -import pytest -from srcinfo import parse - -from aurweb.git.update import extract_arch_fields, parse_dep, size_humanize - -SRCINFO = """ -pkgbase = ponies -pkgdesc = Test parse -pkgver = 1.0.0 -pkgrel = 1 -url = https://example.com -arch = x86_64 -arch = aarch64 -arch = armv7h -license = GPL -depends = curl -depends = openssl -optdepends = unicorns: Extends ponies forehead with a horn -provides = horse -conflicts = horse -options = !strip -options = staticlibs -source = ponies.service -source = ponies.sysusers -source = ponies.tmpfiles -sha256sums = 9d8f9d73e5fa2b2877dde010c0d8ca6fbf47f03eb1f01b02f846026a949a0dcf -sha256sums = d005fcd009ec5404e1ec88246c31e664167f5551d6cabc35f68eb41750bfe590 -sha256sums = 64022e15565a609f449090f02d53ee90ef95cffec52ae14f99e4e2132b6cffe1 -source_x86_64 = filea -source_x86_64 = fileb -sha256sums_x86_64 = f486f8528292c067620e9d495f66b0af2ad55dd4dc2e9d35b11aa7dd656d487b -sha256sums_x86_64 = f486f8528292c067620e9d495f66b0af2ad55dd4dc2e9d35b11aa7dd656d487c -source_aarch64 = filex -sha256sums_aarch64 = 1f72deec0a9af5059e1350d7b5a5a93bc4d2fbef6eeaa363fda764eb9c472b7b -source_armv7h = filey -sha256sums_armv7h = 8229b4bbf43563d8b688d19a514fb0fa0a1ef0eadbd96233882a4b496fa4c8c8 -pkgname = ponies -""" - -EXPECTED = """ -{ - "packages": { - "ponies": {} - }, - "pkgbase": "ponies", - "pkgdesc": "Test parse", - "pkgver": "1.0.0", - "pkgrel": "1", - "url": "https://example.com", - "arch": [ - "x86_64", - "aarch64", - "armv7h" - ], - "license": [ - "GPL" - ], - "depends": [ - "curl", - "openssl" - ], - "optdepends": [ - "unicorns: Extends ponies forehead with a horn" - ], - "provides": [ - "horse" - ], - "conflicts": [ - "horse" - ], - "options": [ - "!strip", - "staticlibs" - ], - "source": [ - "ponies.service", - "ponies.sysusers", - "ponies.tmpfiles" - ], - "sha256sums": [ - "9d8f9d73e5fa2b2877dde010c0d8ca6fbf47f03eb1f01b02f846026a949a0dcf", - "d005fcd009ec5404e1ec88246c31e664167f5551d6cabc35f68eb41750bfe590", - "64022e15565a609f449090f02d53ee90ef95cffec52ae14f99e4e2132b6cffe1" - ], - "source_x86_64": [ - "filea", - "fileb" - ], - "sha256sums_x86_64": [ - "f486f8528292c067620e9d495f66b0af2ad55dd4dc2e9d35b11aa7dd656d487b", - "f486f8528292c067620e9d495f66b0af2ad55dd4dc2e9d35b11aa7dd656d487c" - ], - "source_aarch64": [ - "filex" - ], - "sha256sums_aarch64": [ - "1f72deec0a9af5059e1350d7b5a5a93bc4d2fbef6eeaa363fda764eb9c472b7b" - ], - "source_armv7h": [ - "filey" - ], - "sha256sums_armv7h": [ - "8229b4bbf43563d8b688d19a514fb0fa0a1ef0eadbd96233882a4b496fa4c8c8" - ] -} -""" - - -def test_srcinfo_parse(): - (info, error) = parse.parse_srcinfo(SRCINFO) - - assert not error - - # Check if parsing function returns what we expect - assert json.loads(EXPECTED) == info - - -def test_git_update_extract_arch_fields(): - (info, error) = parse.parse_srcinfo(SRCINFO) - - assert not error - - # check arrays - sources = extract_arch_fields(info, "source") - - # We expect 7 source files - assert len(sources) == 7 - - # First one should be our service file - assert sources[0]["value"] == "ponies.service" - - # add more... - - -@pytest.mark.parametrize( - "size, expected", - [ - (1024, "1024B"), - (1024.5, "1024.50B"), - (256000, "250.00KiB"), - (25600000, "24.41MiB"), - (2560000000, "2.38GiB"), - (2560000000000, "2.33TiB"), - (2560000000000000, "2.27PiB"), - (2560000000000000000, "2.22EiB"), - (2560000000000000000000, "2.17ZiB"), - (2560000000000000000000000, "2.12YiB"), - ], -) -def test_size_humanize(size: any, expected: str): - assert size_humanize(size) == expected - - -@pytest.mark.parametrize( - "depstring, exp_depname, exp_depdesc, exp_depcond", - [ - ( - "my-little-pony: optional kids support", - "my-little-pony", - "optional kids support", - "", - ), - ( - "my-little-pony>7", - "my-little-pony", - "", - ">7", - ), - ( - "my-little-pony=7", - "my-little-pony", - "", - "=7", - ), - ( - "my-little-pony<7", - "my-little-pony", - "", - "<7", - ), - ( - "my-little-pony=<7", - "my-little-pony", - "", - "=<7", - ), - ( - "my-little-pony>=7.1: optional kids support", - "my-little-pony", - "optional kids support", - ">=7.1", - ), - ], -) -def test_parse_dep( - depstring: str, exp_depname: str, exp_depdesc: str, exp_depcond: str -): - depname, depdesc, depcond = parse_dep(depstring) - assert depname == exp_depname - assert depdesc == exp_depdesc - assert depcond == exp_depcond diff --git a/test/test_group.py b/test/test_group.py deleted file mode 100644 index a1c563b6..00000000 --- a/test/test_group.py +++ /dev/null @@ -1,22 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.group import Group - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_group_creation(): - with db.begin(): - group = db.create(Group, Name="Test Group") - assert bool(group.ID) - assert group.Name == "Test Group" - - -def test_group_null_name_raises_exception(): - with pytest.raises(IntegrityError): - Group() diff --git a/test/test_homepage.py b/test/test_homepage.py deleted file mode 100644 index fc5eb17e..00000000 --- a/test/test_homepage.py +++ /dev/null @@ -1,331 +0,0 @@ -import re -from http import HTTPStatus -from unittest.mock import patch - -import pytest -from fastapi.testclient import TestClient - -from aurweb import db, time -from aurweb.asgi import app -from aurweb.aur_redis import redis_connection -from aurweb.models.account_type import USER_ID -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_comaintainer import PackageComaintainer -from aurweb.models.package_request import PackageRequest -from aurweb.models.request_type import DELETION_ID, RequestType -from aurweb.models.user import User -from aurweb.testing.html import parse_root -from aurweb.testing.requests import Request - -client = TestClient(app) - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user(): - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def user2(): - with db.begin(): - user = db.create( - User, - Username="test2", - Email="test2@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def redis(): - redis = redis_connection() - - def delete_keys(): - # Cleanup keys if they exist. - for key in ( - "package_count", - "orphan_count", - "user_count", - "package_maintainer_count", - "seven_days_old_added", - "seven_days_old_updated", - "year_old_updated", - "never_updated", - "package_updates", - ): - if redis.get(key) is not None: - redis.delete(key) - - delete_keys() - yield redis - delete_keys() - - -@pytest.fixture -def package(user: User) -> Package: - now = time.utcnow() - with db.begin(): - pkgbase = db.create( - PackageBase, - Name="test-pkg", - Maintainer=user, - Packager=user, - SubmittedTS=now, - ModifiedTS=now, - ) - pkg = db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - yield pkg - - -@pytest.fixture -def packages(user): - """Yield a list of num_packages Package objects maintained by user.""" - num_packages = 50 # Tunable - - # For i..num_packages, create a package named pkg_{i}. - pkgs = [] - now = time.utcnow() - with db.begin(): - for i in range(num_packages): - pkgbase = db.create( - PackageBase, - Name=f"pkg_{i}", - Maintainer=user, - Packager=user, - SubmittedTS=now, - ModifiedTS=now, - ) - pkg = db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - pkgs.append(pkg) - now += 1 - - yield pkgs - - -def test_homepage(): - with client as request: - response = request.get("/") - assert response.status_code == int(HTTPStatus.OK) - - -@patch("aurweb.util.get_ssh_fingerprints") -def test_homepage_ssh_fingerprints(get_ssh_fingerprints_mock, user): - fingerprints = {"Ed25519": "SHA256:RFzBCUItH9LZS0cKB5UE6ceAYhBD5C8GeOBip8Z11+4"} - get_ssh_fingerprints_mock.return_value = fingerprints - - # without authentication (Home) - with client as request: - response = request.get("/") - - # with authentication (Dashboard) - with client as auth_request: - auth_request.cookies = {"AURSID": user.login(Request(), "testPassword")} - auth_response = auth_request.get("/") - - for resp in [response, auth_response]: - for key, value in fingerprints.items(): - assert key in resp.content.decode() - assert value in resp.content.decode() - assert ( - "The following SSH fingerprints are used for the AUR" - in resp.content.decode() - ) - - -@patch("aurweb.util.get_ssh_fingerprints") -def test_homepage_no_ssh_fingerprints(get_ssh_fingerprints_mock, user): - get_ssh_fingerprints_mock.return_value = {} - - # without authentication (Home) - with client as request: - response = request.get("/") - - # with authentication (Dashboard) - with client as auth_request: - auth_request.cookies = {"AURSID": user.login(Request(), "testPassword")} - auth_response = auth_request.get("/") - - for resp in [response, auth_response]: - assert ( - "The following SSH fingerprints are used for the AUR" - not in resp.content.decode() - ) - - -def test_homepage_stats(redis, packages): - with client as request: - response = request.get("/") - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - - expectations = [ - ("Packages", r"\d+"), - ("Orphan Packages", r"\d+"), - ("Packages added in the past 7 days", r"\d+"), - ("Packages updated in the past 7 days", r"\d+"), - ("Packages updated in the past year", r"\d+"), - ("Packages never updated", r"\d+"), - ("Registered Users", r"\d+"), - ("Package Maintainers", r"\d+"), - ] - - stats = root.xpath('//div[@id="pkg-stats"]//tr') - for i, expected in enumerate(expectations): - expected_key, expected_regex = expected - key, value = stats[i].xpath("./td") - assert key.text.strip() == expected_key - assert re.match(expected_regex, value.text.strip()) - - -def test_homepage_updates(redis, packages): - with client as request: - response = request.get("/") - assert response.status_code == int(HTTPStatus.OK) - # Run the request a second time to exercise the Redis path. - response = request.get("/") - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - - # We expect to see the latest 15 packages, which happens to be - # pkg_49 .. pkg_34. So, create a list of expectations using a range - # starting at 49, stepping down to 49 - 15, -1 step at a time. - expectations = [f"pkg_{i}" for i in range(50 - 1, 50 - 1 - 15, -1)] - updates = root.xpath('//div[@id="pkg-updates"]/table/tbody/tr') - for i, expected in enumerate(expectations): - pkgname = updates[i].xpath("./td/a").pop(0) - assert pkgname.text.strip() == expected - - -def test_homepage_dashboard(redis, packages, user): - # Create Comaintainer records for all of the packages. - with db.begin(): - for pkg in packages: - db.create( - PackageComaintainer, PackageBase=pkg.PackageBase, User=user, Priority=1 - ) - - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/") - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - - # Assert some expectations that we end up getting all fifty - # packages in the "My Packages" table. - expectations = [f"pkg_{i}" for i in range(50 - 1, 0, -1)] - my_packages = root.xpath('//table[@id="my-packages"]/tbody/tr') - for i, expected in enumerate(expectations): - name, version, votes, pop, voted, notify, desc, maint = my_packages[i].xpath( - "./td" - ) - assert name.xpath("./a").pop(0).text.strip() == expected - - # Do the same for the Comaintained Packages table. - my_packages = root.xpath('//table[@id="comaintained-packages"]/tbody/tr') - for i, expected in enumerate(expectations): - name, version, votes, pop, voted, notify, desc, maint = my_packages[i].xpath( - "./td" - ) - assert name.xpath("./a").pop(0).text.strip() == expected - - -def test_homepage_dashboard_requests(redis, packages, user): - now = time.utcnow() - - pkg = packages[0] - reqtype = db.query(RequestType, RequestType.ID == DELETION_ID).first() - with db.begin(): - pkgreq = db.create( - PackageRequest, - PackageBase=pkg.PackageBase, - PackageBaseName=pkg.PackageBase.Name, - User=user, - Comments=str(), - ClosureComment=str(), - RequestTS=now, - RequestType=reqtype, - ) - - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/") - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - request = root.xpath('//table[@id="pkgreq-results"]/tbody/tr').pop(0) - pkgname = request.xpath("./td/a").pop(0) - assert pkgname.text.strip() == pkgreq.PackageBaseName - - -def test_homepage_dashboard_flagged_packages(redis, packages, user): - # Set the first Package flagged by setting its OutOfDateTS column. - pkg = packages[0] - with db.begin(): - pkg.PackageBase.OutOfDateTS = time.utcnow() - - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/") - assert response.status_code == int(HTTPStatus.OK) - - # Check to see that the package showed up in the Flagged Packages table. - root = parse_root(response.text) - flagged_pkg = root.xpath('//table[@id="flagged-packages"]/tbody/tr').pop(0) - flagged_name = flagged_pkg.xpath("./td/a").pop(0) - assert flagged_name.text.strip() == pkg.Name - - -def test_homepage_dashboard_flagged(user: User, user2: User, package: Package): - pkgbase = package.PackageBase - - now = time.utcnow() - with db.begin(): - db.create(PackageComaintainer, User=user2, PackageBase=pkgbase, Priority=1) - pkgbase.OutOfDateTS = now - 5 - pkgbase.Flagger = user - - # Test that a comaintainer viewing the dashboard shows them their - # flagged co-maintained packages. - comaint_cookies = {"AURSID": user2.login(Request(), "testPassword")} - with client as request: - request.cookies = comaint_cookies - resp = request.get("/") - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - flagged = root.xpath('//table[@id="flagged-packages"]//tr/td/a')[0] - assert flagged.text.strip() == package.Name - - # Test that a maintainer viewing the dashboard shows them their - # flagged maintained packages. - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get("/") - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - flagged = root.xpath('//table[@id="flagged-packages"]//tr/td/a')[0] - assert flagged.text.strip() == package.Name diff --git a/test/test_html.py b/test/test_html.py deleted file mode 100644 index 602ee26c..00000000 --- a/test/test_html.py +++ /dev/null @@ -1,238 +0,0 @@ -""" A test suite used to test HTML renders in different cases. """ - -import hashlib -import os -import tempfile -from http import HTTPStatus -from unittest import mock - -import fastapi -import pytest -from fastapi import HTTPException -from fastapi.testclient import TestClient - -from aurweb import asgi, config, db -from aurweb.models import PackageBase -from aurweb.models.account_type import PACKAGE_MAINTAINER_ID, USER_ID -from aurweb.models.user import User -from aurweb.testing.html import get_errors, get_successes, parse_root -from aurweb.testing.requests import Request - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def client() -> TestClient: - yield TestClient(app=asgi.app) - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def package_maintainer(user: User) -> User: - with db.begin(): - user.AccountTypeID = PACKAGE_MAINTAINER_ID - yield user - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-pkg", Maintainer=user) - yield pkgbase - - -def test_archdev_navbar(client: TestClient): - expected = ["AUR Home", "Packages", "Register", "Login"] - with client as request: - resp = request.get("/") - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - items = root.xpath('//div[@id="archdev-navbar"]/ul/li/a') - for i, item in enumerate(items): - assert item.text.strip() == expected[i] - - -def test_archdev_navbar_authenticated(client: TestClient, user: User): - expected = ["Dashboard", "Packages", "Requests", "My Account", "Logout"] - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get("/") - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - items = root.xpath('//div[@id="archdev-navbar"]/ul/li/a') - for i, item in enumerate(items): - assert item.text.strip() == expected[i] - - -def test_archdev_navbar_authenticated_pm(client: TestClient, package_maintainer: User): - expected = [ - "Dashboard", - "Packages", - "Requests", - "Accounts", - "My Account", - "Package Maintainer", - "Logout", - ] - cookies = {"AURSID": package_maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get("/") - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - items = root.xpath('//div[@id="archdev-navbar"]/ul/li/a') - for i, item in enumerate(items): - assert item.text.strip() == expected[i] - - -def test_get_errors(): - html = """ -
    -
  • Test
  • -
-""" - errors = get_errors(html) - assert errors[0].text.strip() == "Test" - - -def test_get_successes(): - html = """ -
    -
  • Test
  • -
-""" - successes = get_successes(html) - assert successes[0].text.strip() == "Test" - - -def test_archive_sig(client: TestClient): - hash_value = hashlib.sha256(b"test").hexdigest() - - with tempfile.TemporaryDirectory() as tmpdir: - packages_sha256 = os.path.join(tmpdir, "packages.gz.sha256") - with open(packages_sha256, "w") as f: - f.write(hash_value) - - config_get = config.get - - def mock_config(section: str, key: str): - if key == "archivedir": - return tmpdir - return config_get(section, key) - - with mock.patch("aurweb.config.get", side_effect=mock_config): - with client as request: - resp = request.get("/packages.gz.sha256") - - assert resp.status_code == int(HTTPStatus.OK) - assert resp.text == hash_value - - -def test_archive_sig_404(client: TestClient): - with client as request: - resp = request.get("/blah.gz.sha256") - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_metrics(client: TestClient): - with tempfile.TemporaryDirectory() as tmpdir: - env = {"PROMETHEUS_MULTIPROC_DIR": tmpdir} - with mock.patch.dict(os.environ, env): - with client as request: - resp = request.get("/metrics") - assert resp.status_code == int(HTTPStatus.OK) - assert resp.headers.get("Content-Type").startswith("text/plain") - - -def test_disabled_metrics(client: TestClient): - env = {"PROMETHEUS_MULTIPROC_DIR": str()} - with mock.patch.dict(os.environ, env): - with client as request: - resp = request.get("/metrics") - assert resp.status_code == int(HTTPStatus.SERVICE_UNAVAILABLE) - - -def test_rtl(client: TestClient): - responses = {} - expected = [[], [], ["rtl"], ["rtl"]] - with client as request: - responses["default"] = request.get("/") - request.cookies = {"AURLANG": "de"} - responses["de"] = request.get("/") - request.cookies = {"AURLANG": "he"} - responses["he"] = request.get("/") - request.cookies = {"AURLANG": "ar"} - responses["ar"] = request.get("/") - for i, (lang, resp) in enumerate(responses.items()): - assert resp.status_code == int(HTTPStatus.OK) - t = parse_root(resp.text) - assert t.xpath("//html/@dir") == expected[i] - - -def test_404_with_valid_pkgbase(client: TestClient, pkgbase: PackageBase): - """Test HTTPException with status_code == 404 and valid pkgbase.""" - endpoint = f"/{pkgbase.Name}" - with client as request: - response = request.get(endpoint) - assert response.status_code == int(HTTPStatus.NOT_FOUND) - - body = response.text - assert "404 - Page Not Found" in body - assert "To clone the Git repository" in body - - -def test_404(client: TestClient, user): - """Test HTTPException with status_code == 404 without a valid pkgbase.""" - with client as request: - response = request.get("/nonexistentroute") - assert response.status_code == int(HTTPStatus.NOT_FOUND) - - body = response.text - assert "404 - Page Not Found" in body - # No `pkgbase` is provided here; we don't see the extra info. - assert "To clone the Git repository" not in body - - # Create a pkgbase named "pkgbase" - # Should NOT return extra info for "pkgbase" - with db.begin(): - db.create(PackageBase, Name="pkgbase", Maintainer=user) - - with client as request: - response = request.get("/pkgbase/doesnotexist") - assert response.status_code == int(HTTPStatus.NOT_FOUND) - - body = response.text - assert "404 - Page Not Found" in body - # No `pkgbase` is provided here; we don't see the extra info. - assert "To clone the Git repository" not in body - - -def test_503(client: TestClient): - """Test HTTPException with status_code == 503 (Service Unavailable).""" - - @asgi.app.get("/raise-503") - async def raise_503(request: fastapi.Request): - raise HTTPException(status_code=HTTPStatus.SERVICE_UNAVAILABLE) - - with TestClient(app=asgi.app) as request: - response = request.get("/raise-503") - assert response.status_code == int(HTTPStatus.SERVICE_UNAVAILABLE) diff --git a/test/test_initdb.py b/test/test_initdb.py deleted file mode 100644 index db5edf74..00000000 --- a/test/test_initdb.py +++ /dev/null @@ -1,28 +0,0 @@ -import pytest - -import aurweb.config -import aurweb.db -import aurweb.initdb -from aurweb.models.account_type import AccountType - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -class Args: - use_alembic = True - verbose = True - - -def test_run(): - from aurweb.schema import metadata - - aurweb.db.kill_engine() - metadata.drop_all(aurweb.db.get_engine()) - aurweb.initdb.run(Args()) - - # Check that constant table rows got added via initdb. - record = aurweb.db.query(AccountType, AccountType.AccountType == "User").first() - assert record is not None diff --git a/test/test_l10n.py b/test/test_l10n.py deleted file mode 100644 index e1b5ac3f..00000000 --- a/test/test_l10n.py +++ /dev/null @@ -1,92 +0,0 @@ -""" Test our l10n module. """ - -from aurweb import config, filters, l10n -from aurweb.testing.requests import Request - - -def test_translator(): - """Test creating l10n translation tools.""" - de_home = l10n.translator.translate("Home", "de") - assert de_home == "Startseite" - - -def test_get_request_language(): - """Test getting the language setting from a request.""" - # Default language - default_lang = config.get("options", "default_lang") - request = Request() - assert l10n.get_request_language(request) == default_lang - - # Language setting from cookie: de - request.cookies["AURLANG"] = "de" - assert l10n.get_request_language(request) == "de" - - # Language setting from cookie: nonsense - # Should fallback to default lang - request.cookies["AURLANG"] = "nonsense" - assert l10n.get_request_language(request) == default_lang - - # Language setting from query param: de - request.cookies = {} - request.query_params = {"language": "de"} - assert l10n.get_request_language(request) == "de" - - # Language setting from query param: nonsense - # Should fallback to default lang - request.query_params = {"language": "nonsense"} - assert l10n.get_request_language(request) == default_lang - - # Language setting from query param: de and cookie - # Query param should have precedence - request.query_params = {"language": "de"} - request.cookies["AURLANG"] = "fr" - assert l10n.get_request_language(request) == "de" - - # Language setting from authenticated user - request.cookies = {} - request.query_params = {} - request.user.authenticated = True - request.user.LangPreference = "de" - assert l10n.get_request_language(request) == "de" - - # Language setting from authenticated user with query param - # Query param should have precedence - request.query_params = {"language": "fr"} - assert l10n.get_request_language(request) == "fr" - - # Language setting from authenticated user with cookie - # DB setting should have precedence - request.query_params = {} - request.cookies["AURLANG"] = "fr" - assert l10n.get_request_language(request) == "de" - - -def test_get_raw_translator_for_request(): - """Make sure that get_raw_translator_for_request is giving us - the translator we expect.""" - request = Request() - request.cookies["AURLANG"] = "de" - translator = l10n.get_raw_translator_for_request(request) - assert translator.gettext("Home") == l10n.translator.translate("Home", "de") - - -def test_get_translator_for_request(): - """Make sure that get_translator_for_request is giving us back - our expected translation function.""" - request = Request() - request.cookies["AURLANG"] = "de" - - translate = l10n.get_translator_for_request(request) - assert translate("Home") == "Startseite" - - -def test_tn_filter(): - request = Request() - request.cookies["AURLANG"] = "en" - context = {"language": "en", "request": request} - - translated = filters.tn(context, 1, "%d package found.", "%d packages found.") - assert translated == "%d package found." - - translated = filters.tn(context, 2, "%d package found.", "%d packages found.") - assert translated == "%d packages found." diff --git a/test/test_license.py b/test/test_license.py deleted file mode 100644 index cea76e7d..00000000 --- a/test/test_license.py +++ /dev/null @@ -1,22 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.license import License - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_license_creation(): - with db.begin(): - license = db.create(License, Name="Test License") - assert bool(license.ID) - assert license.Name == "Test License" - - -def test_license_null_name_raises_exception(): - with pytest.raises(IntegrityError): - License() diff --git a/test/test_logging.py b/test/test_logging.py deleted file mode 100644 index 90d13c93..00000000 --- a/test/test_logging.py +++ /dev/null @@ -1,16 +0,0 @@ -from aurweb import aur_logging - -logger = aur_logging.get_logger(__name__) - - -def test_logging(caplog): - logger.info("Test log.") - - # Test that we logged once. - assert len(caplog.records) == 1 - - # Test that our log record was of INFO level. - assert caplog.records[0].levelname == "INFO" - - # Test that our message got logged. - assert "Test log." in caplog.text diff --git a/test/test_metrics.py b/test/test_metrics.py deleted file mode 100644 index c9f3d617..00000000 --- a/test/test_metrics.py +++ /dev/null @@ -1,39 +0,0 @@ -import pytest -from prometheus_client import REGISTRY, generate_latest - -from aurweb import db -from aurweb.cache import db_query_cache -from aurweb.models.account_type import USER_ID -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test, prometheus_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -def test_search_cache_metrics(user: User): - # Fire off 3 identical queries for caching - for _ in range(3): - db_query_cache("key", db.query(User)) - - # Get metrics - metrics = str(generate_latest(REGISTRY)) - - # We should have 1 miss and 2 hits - assert 'search_requests_total{cache="miss"} 1.0' in metrics - assert 'search_requests_total{cache="hit"} 2.0' in metrics diff --git a/test/test_mkpkglists.py b/test/test_mkpkglists.py deleted file mode 100644 index 310d9b04..00000000 --- a/test/test_mkpkglists.py +++ /dev/null @@ -1,241 +0,0 @@ -import gzip -import json -import os -from unittest import mock - -import py -import pytest - -from aurweb import config, db -from aurweb.models import ( - License, - Package, - PackageBase, - PackageComaintainer, - PackageDependency, - PackageLicense, - User, -) -from aurweb.models.account_type import USER_ID -from aurweb.models.dependency_type import DEPENDS_ID - -META_KEYS = [ - "ID", - "Name", - "PackageBaseID", - "PackageBase", - "Version", - "Description", - "URL", - "NumVotes", - "Popularity", - "OutOfDate", - "Maintainer", - "Submitter", - "FirstSubmitted", - "LastModified", - "URLPath", -] - - -@pytest.fixture(autouse=True) -def setup(db_test): - config.rehash() - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def packages(user: User) -> list[Package]: - output = [] - with db.begin(): - lic = db.create(License, Name="GPL") - for i in range(5): - # Create the package. - pkgbase = db.create( - PackageBase, - Name=f"pkgbase_{i}", - Packager=user, - Submitter=user, - ) - pkg = db.create(Package, PackageBase=pkgbase, Name=f"pkg_{i}") - - # Create some related records. - db.create(PackageLicense, Package=pkg, License=lic) - db.create( - PackageDependency, - DepTypeID=DEPENDS_ID, - Package=pkg, - DepName=f"dep_{i}", - DepCondition=">=1.0", - ) - db.create(PackageComaintainer, User=user, PackageBase=pkgbase, Priority=1) - - # Add the package to our output list. - output.append(pkg) - - # Sort output by the package name and return it. - yield sorted(output, key=lambda k: k.Name) - - -@pytest.fixture -def config_mock(tmpdir: py.path.local) -> None: - config_get = config.get - archivedir = config.get("mkpkglists", "archivedir") - - def mock_config(section: str, key: str) -> str: - if section == "mkpkglists": - if key == "archivedir": - return str(tmpdir) - return config_get(section, key).replace(archivedir, str(tmpdir)) - return config_get(section, key) - - with mock.patch("aurweb.config.get", side_effect=mock_config): - config.rehash() - yield - config.rehash() - - -def test_mkpkglists( - tmpdir: py.path.local, config_mock: None, user: User, packages: list[Package] -): - from aurweb.scripts import mkpkglists - - mkpkglists.main() - - PACKAGES = config.get("mkpkglists", "packagesfile") - META = config.get("mkpkglists", "packagesmetafile") - PKGBASE = config.get("mkpkglists", "pkgbasefile") - USERS = config.get("mkpkglists", "userfile") - - expectations = [ - ( - PACKAGES, - "pkg_0\npkg_1\npkg_2\npkg_3\npkg_4\n", - ), - ( - PKGBASE, - "pkgbase_0\npkgbase_1\npkgbase_2\npkgbase_3\npkgbase_4\n", - ), - (USERS, "test\n"), - ] - - for file, expected_content in expectations: - with gzip.open(file, "r") as f: - file_content = f.read().decode() - assert file_content == expected_content - - with gzip.open(META) as f: - metadata = json.load(f) - - assert len(metadata) == len(packages) - for pkg in metadata: - for key in META_KEYS: - assert key in pkg, f"{pkg=} record does not have {key=}" - - for file in (PACKAGES, PKGBASE, USERS, META): - with open(f"{file}.sha256") as f: - file_sig_content = f.read() - expected_prefix = f"SHA256 ({os.path.basename(file)}) = " - assert file_sig_content.startswith(expected_prefix) - assert len(file_sig_content) == len(expected_prefix) + 64 - - -@mock.patch("sys.argv", ["mkpkglists", "--extended"]) -def test_mkpkglists_extended_empty(config_mock: None): - from aurweb.scripts import mkpkglists - - mkpkglists.main() - - PACKAGES = config.get("mkpkglists", "packagesfile") - META = config.get("mkpkglists", "packagesmetafile") - META_EXT = config.get("mkpkglists", "packagesmetaextfile") - PKGBASE = config.get("mkpkglists", "pkgbasefile") - USERS = config.get("mkpkglists", "userfile") - - expectations = [ - (PACKAGES, ""), - (PKGBASE, ""), - (USERS, ""), - (META, "[\n]"), - (META_EXT, "[\n]"), - ] - - for file, expected_content in expectations: - with gzip.open(file, "r") as f: - file_content = f.read().decode() - assert file_content == expected_content, f"{file=} contents malformed" - - for file in (PACKAGES, PKGBASE, USERS, META, META_EXT): - with open(f"{file}.sha256") as f: - file_sig_content = f.read() - expected_prefix = f"SHA256 ({os.path.basename(file)}) = " - assert file_sig_content.startswith(expected_prefix) - assert len(file_sig_content) == len(expected_prefix) + 64 - - -@mock.patch("sys.argv", ["mkpkglists", "--extended"]) -def test_mkpkglists_extended(config_mock: None, user: User, packages: list[Package]): - from aurweb.scripts import mkpkglists - - mkpkglists.main() - - PACKAGES = config.get("mkpkglists", "packagesfile") - META = config.get("mkpkglists", "packagesmetafile") - META_EXT = config.get("mkpkglists", "packagesmetaextfile") - PKGBASE = config.get("mkpkglists", "pkgbasefile") - USERS = config.get("mkpkglists", "userfile") - - expectations = [ - ( - PACKAGES, - "pkg_0\npkg_1\npkg_2\npkg_3\npkg_4\n", - ), - ( - PKGBASE, - "pkgbase_0\npkgbase_1\npkgbase_2\npkgbase_3\npkgbase_4\n", - ), - (USERS, "test\n"), - ] - - for file, expected_content in expectations: - with gzip.open(file, "r") as f: - file_content = f.read().decode() - assert file_content == expected_content - - with gzip.open(META) as f: - metadata = json.load(f) - - assert len(metadata) == len(packages) - for pkg in metadata: - for key in META_KEYS: - assert key in pkg, f"{pkg=} record does not have {key=}" - - with gzip.open(META_EXT) as f: - extended_metadata = json.load(f) - - assert len(extended_metadata) == len(packages) - for pkg in extended_metadata: - for key in META_KEYS: - assert key in pkg, f"{pkg=} record does not have {key=}" - assert isinstance(pkg["Depends"], list) - assert isinstance(pkg["License"], list) - assert isinstance(pkg["CoMaintainers"], list) - - for file in (PACKAGES, PKGBASE, USERS, META, META_EXT): - with open(f"{file}.sha256") as f: - file_sig_content = f.read() - expected_prefix = f"SHA256 ({os.path.basename(file)}) = " - assert file_sig_content.startswith(expected_prefix) - assert len(file_sig_content) == len(expected_prefix) + 64 diff --git a/test/test_notify.py b/test/test_notify.py deleted file mode 100644 index 3d773bc2..00000000 --- a/test/test_notify.py +++ /dev/null @@ -1,761 +0,0 @@ -from logging import ERROR -from unittest import mock - -import pytest - -from aurweb import config, db, models, time -from aurweb.models import Package, PackageBase, PackageRequest, User -from aurweb.models.account_type import PACKAGE_MAINTAINER_ID, USER_ID -from aurweb.models.request_type import ORPHAN_ID -from aurweb.scripts import notify, rendercomment -from aurweb.testing.email import Email -from aurweb.testing.smtp import FakeSMTP, FakeSMTP_SSL - -aur_location = config.get("options", "aur_location") -aur_request_ml = config.get("options", "aur_request_ml") - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - Passwd=str(), - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def user1() -> User: - with db.begin(): - user1 = db.create( - User, - Username="user1", - Email="user1@example.org", - Passwd=str(), - AccountTypeID=USER_ID, - ) - yield user1 - - -@pytest.fixture -def user2() -> User: - with db.begin(): - user2 = db.create( - User, - Username="user2", - Email="user2@example.org", - Passwd=str(), - AccountTypeID=USER_ID, - ) - yield user2 - - -@pytest.fixture -def pkgbases(user: User) -> list[PackageBase]: - now = time.utcnow() - - output = [] - with db.begin(): - for i in range(5): - output.append( - db.create( - PackageBase, - Name=f"pkgbase_{i}", - Maintainer=user, - SubmittedTS=now, - ModifiedTS=now, - ) - ) - db.create(models.PackageNotification, PackageBase=output[-1], User=user) - yield output - - -@pytest.fixture -def pkgreq(user2: User, pkgbases: list[PackageBase]): - pkgbase = pkgbases[0] - with db.begin(): - pkgreq_ = db.create( - PackageRequest, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - User=user2, - ReqTypeID=ORPHAN_ID, - Comments="This is a request test comment.", - ClosureComment=str(), - ) - yield pkgreq_ - - -@pytest.fixture -def packages(pkgbases: list[PackageBase]) -> list[Package]: - output = [] - with db.begin(): - for i, pkgbase in enumerate(pkgbases): - output.append( - db.create( - Package, PackageBase=pkgbase, Name=f"pkg_{i}", Version=f"{i}.0" - ) - ) - yield output - - -def test_out_of_date(user: User, user1: User, user2: User, pkgbases: list[PackageBase]): - pkgbase = pkgbases[0] - # Create two comaintainers. We'll pass the maintainer uid to - # FlagNotification, so we should expect to get two emails. - with db.begin(): - db.create( - models.PackageComaintainer, PackageBase=pkgbase, User=user1, Priority=1 - ) - db.create( - models.PackageComaintainer, PackageBase=pkgbase, User=user2, Priority=2 - ) - - # Send the notification for pkgbases[0]. - notif = notify.FlagNotification(user.ID, pkgbases[0].ID) - notif.send() - - # Should've gotten three emails: maintainer + the two comaintainers. - assert Email.count() == 3 - - # Maintainer. - first = Email(1).parse() - assert first.headers.get("To") == user.Email - - expected = f"AUR Out-of-date Notification for {pkgbase.Name}" - assert first.headers.get("Subject") == expected - - # Comaintainer 1. - second = Email(2).parse() - assert second.headers.get("To") == user1.Email - - # Comaintainer 2. - third = Email(3).parse() - assert third.headers.get("To") == user2.Email - - -def test_reset(user: User): - with db.begin(): - user.ResetKey = "12345678901234567890123456789012" - - notif = notify.ResetKeyNotification(user.ID) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - expected = "AUR Password Reset" - assert email.headers.get("Subject") == expected - - expected = f"""\ -A password reset request was submitted for the account test associated -with your email address. If you wish to reset your password follow the -link [1] below, otherwise ignore this message and nothing will happen. - -[1] {aur_location}/passreset/?resetkey=12345678901234567890123456789012\ -""" - assert email.body == expected - - -def test_welcome(user: User): - with db.begin(): - user.ResetKey = "12345678901234567890123456789012" - - notif = notify.WelcomeNotification(user.ID) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - expected = "Welcome to the Arch User Repository" - assert email.headers.get("Subject") == expected - - expected = f"""\ -Welcome to the Arch User Repository! In order to set an initial -password for your new account, please click the link [1] below. If the -link does not work, try copying and pasting it into your browser. - -[1] {aur_location}/passreset/?resetkey=12345678901234567890123456789012\ -""" - assert email.body == expected - - -def test_comment(user: User, user2: User, pkgbases: list[PackageBase]): - pkgbase = pkgbases[0] - - with db.begin(): - comment = db.create( - models.PackageComment, - PackageBase=pkgbase, - User=user2, - Comments="This is a test comment.", - ) - rendercomment.update_comment_render_fastapi(comment) - - notif = notify.CommentNotification(user2.ID, pkgbase.ID, comment.ID) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - expected = f"AUR Comment for {pkgbase.Name}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -{user2.Username} [1] added the following comment to {pkgbase.Name} [2]: - -This is a test comment. - --- -If you no longer wish to receive notifications about this package, -please go to the package page [2] and select "Disable notifications". - -[1] {aur_location}/account/{user2.Username}/ -[2] {aur_location}/pkgbase/{pkgbase.Name}/\ -""" - assert expected == email.body - - -def test_update(user: User, user2: User, pkgbases: list[PackageBase]): - pkgbase = pkgbases[0] - with db.begin(): - user.UpdateNotify = 1 - - notif = notify.UpdateNotification(user2.ID, pkgbase.ID) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - expected = f"AUR Package Update: {pkgbase.Name}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -{user2.Username} [1] pushed a new commit to {pkgbase.Name} [2]. - --- -If you no longer wish to receive notifications about this package, -please go to the package page [2] and select "Disable notifications". - -[1] {aur_location}/account/{user2.Username}/ -[2] {aur_location}/pkgbase/{pkgbase.Name}/\ -""" - assert expected == email.body - - -def test_adopt(user: User, user2: User, pkgbases: list[PackageBase]): - pkgbase = pkgbases[0] - notif = notify.AdoptNotification(user2.ID, pkgbase.ID) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - expected = f"AUR Ownership Notification for {pkgbase.Name}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -The package {pkgbase.Name} [1] was adopted by {user2.Username} [2]. - -[1] {aur_location}/pkgbase/{pkgbase.Name}/ -[2] {aur_location}/account/{user2.Username}/\ -""" - assert email.body == expected - - -def test_disown(user: User, user2: User, pkgbases: list[PackageBase]): - pkgbase = pkgbases[0] - notif = notify.DisownNotification(user2.ID, pkgbase.ID) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - expected = f"AUR Ownership Notification for {pkgbase.Name}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -The package {pkgbase.Name} [1] was disowned by {user2.Username} [2]. - -[1] {aur_location}/pkgbase/{pkgbase.Name}/ -[2] {aur_location}/account/{user2.Username}/\ -""" - assert email.body == expected - - -def test_comaintainer_addition(user: User, pkgbases: list[PackageBase]): - pkgbase = pkgbases[0] - notif = notify.ComaintainerAddNotification(user.ID, pkgbase.ID) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - expected = f"AUR Co-Maintainer Notification for {pkgbase.Name}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -You were added to the co-maintainer list of {pkgbase.Name} [1]. - -[1] {aur_location}/pkgbase/{pkgbase.Name}/\ -""" - assert email.body == expected - - -def test_comaintainer_removal(user: User, pkgbases: list[PackageBase]): - pkgbase = pkgbases[0] - notif = notify.ComaintainerRemoveNotification(user.ID, pkgbase.ID) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - expected = f"AUR Co-Maintainer Notification for {pkgbase.Name}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -You were removed from the co-maintainer list of {pkgbase.Name} [1]. - -[1] {aur_location}/pkgbase/{pkgbase.Name}/\ -""" - assert email.body == expected - - -def test_suspended_ownership_change(user: User, pkgbases: list[PackageBase]): - with db.begin(): - user.Suspended = 1 - - pkgbase = pkgbases[0] - notif = notify.ComaintainerAddNotification(user.ID, pkgbase.ID) - notif.send() - assert Email.count() == 1 - - Email.reset() # Clear the Email pool - notif = notify.ComaintainerRemoveNotification(user.ID, pkgbase.ID) - notif.send() - assert Email.count() == 1 - - -def test_delete(user: User, user2: User, pkgbases: list[PackageBase]): - pkgbase = pkgbases[0] - notif = notify.DeleteNotification(user2.ID, pkgbase.ID) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - expected = f"AUR Package deleted: {pkgbase.Name}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -{user2.Username} [1] deleted {pkgbase.Name} [2]. - -You will no longer receive notifications about this package. - -[1] {aur_location}/account/{user2.Username}/ -[2] {aur_location}/pkgbase/{pkgbase.Name}/\ -""" - assert email.body == expected - - -def test_merge(user: User, user2: User, pkgbases: list[PackageBase]): - source, target = pkgbases[:2] - notif = notify.DeleteNotification(user2.ID, source.ID, target.ID) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - expected = f"AUR Package deleted: {source.Name}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -{user2.Username} [1] merged {source.Name} [2] into {target.Name} [3]. - --- -If you no longer wish receive notifications about the new package, -please go to [3] and click "Disable notifications". - -[1] {aur_location}/account/{user2.Username}/ -[2] {aur_location}/pkgbase/{source.Name}/ -[3] {aur_location}/pkgbase/{target.Name}/\ -""" - assert email.body == expected - - -def set_pm(users: list[User]) -> User: - with db.begin(): - for user in users: - user.AccountTypeID = PACKAGE_MAINTAINER_ID - - -def test_open_close_request( - user: User, user2: User, pkgreq: PackageRequest, pkgbases: list[PackageBase] -): - set_pm([user]) - pkgbase = pkgbases[0] - - # Send an open request notification. - notif = notify.RequestOpenNotification( - user2.ID, pkgreq.ID, pkgreq.RequestType.Name, pkgbase.ID - ) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == aur_request_ml - assert email.headers.get("Cc") == ", ".join([user.Email, user2.Email]) - expected = f"[PRQ#{pkgreq.ID}] Orphan Request for {pkgbase.Name}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -{user2.Username} [1] filed an orphan request for {pkgbase.Name} [2]: - -This is a request test comment. - -[1] {aur_location}/account/{user2.Username}/ -[2] {aur_location}/pkgbase/{pkgbase.Name}/\ -""" - assert email.body == expected - - # Now send a closure notification on the pkgbase we just opened. - notif = notify.RequestCloseNotification(user2.ID, pkgreq.ID, "rejected") - notif.send() - assert Email.count() == 2 - - email = Email(2).parse() - assert email.headers.get("To") == aur_request_ml - assert email.headers.get("Cc") == ", ".join([user.Email, user2.Email]) - expected = f"[PRQ#{pkgreq.ID}] Orphan Request for {pkgbase.Name} Rejected" - assert email.headers.get("Subject") == expected - - expected = f"""\ -Request #{pkgreq.ID} has been rejected by {user2.Username} [1]. - -[1] {aur_location}/account/{user2.Username}/\ -""" - assert email.body == expected - - # Test auto-accept. - notif = notify.RequestCloseNotification(0, pkgreq.ID, "accepted") - notif.send() - assert Email.count() == 3 - - email = Email(3).parse() - assert email.headers.get("To") == aur_request_ml - assert email.headers.get("Cc") == ", ".join([user.Email, user2.Email]) - expected = f"[PRQ#{pkgreq.ID}] Orphan Request for " f"{pkgbase.Name} Accepted" - assert email.headers.get("Subject") == expected - - expected = ( - f"Request #{pkgreq.ID} has been accepted automatically " - "by the Arch User Repository\npackage request system." - ) - assert email.body == expected - - -def test_close_request_comaintainer_cc( - user: User, user2: User, pkgreq: PackageRequest, pkgbases: list[PackageBase] -): - pkgbase = pkgbases[0] - with db.begin(): - db.create( - models.PackageComaintainer, PackageBase=pkgbase, User=user2, Priority=1 - ) - - notif = notify.RequestCloseNotification(0, pkgreq.ID, "accepted") - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == aur_request_ml - assert email.headers.get("Cc") == ", ".join([user.Email, user2.Email]) - - -def test_open_close_request_hidden_email( - user2: User, pkgreq: PackageRequest, pkgbases: list[PackageBase] -): - pkgbase = pkgbases[0] - - # Enable the "HideEmail" option for our requester - with db.begin(): - user2.HideEmail = 1 - - # Send an open request notification. - notif = notify.RequestOpenNotification( - user2.ID, pkgreq.ID, pkgreq.RequestType.Name, pkgbase.ID - ) - - # Make sure our address got added to the bcc list - assert user2.Email in notif.get_bcc() - - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - # Make sure we don't have our address in the Cc header - assert user2.Email not in email.headers.get("Cc") - - # Create a closure notification on the pkgbase we just opened. - notif = notify.RequestCloseNotification(user2.ID, pkgreq.ID, "rejected") - - # Make sure our address got added to the bcc list - assert user2.Email in notif.get_bcc() - - notif.send() - assert Email.count() == 2 - - email = Email(2).parse() - # Make sure we don't have our address in the Cc header - assert user2.Email not in email.headers.get("Cc") - - -def test_close_request_closure_comment( - user: User, user2: User, pkgreq: PackageRequest, pkgbases: list[PackageBase] -): - pkgbase = pkgbases[0] - with db.begin(): - pkgreq.ClosureComment = "This is a test closure comment." - - notif = notify.RequestCloseNotification(user2.ID, pkgreq.ID, "accepted") - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == aur_request_ml - assert email.headers.get("Cc") == ", ".join([user.Email, user2.Email]) - expected = f"[PRQ#{pkgreq.ID}] Orphan Request for {pkgbase.Name} Accepted" - assert email.headers.get("Subject") == expected - - expected = f"""\ -Request #{pkgreq.ID} has been accepted by {user2.Username} [1]: - -This is a test closure comment. - -[1] {aur_location}/account/{user2.Username}/\ -""" - assert email.body == expected - - -def test_vote_reminders(user: User): - set_pm([user]) - - vote_id = 1 - notif = notify.VoteReminderNotification(vote_id) - notif.send() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - expected = f"Package Maintainer Vote Reminder: Proposal {vote_id}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -Please remember to cast your vote on proposal {vote_id} [1]. The voting period -ends in less than 48 hours. - -[1] {aur_location}/package-maintainer/?id={vote_id}\ -""" - assert email.body == expected - - -def test_notify_main(user: User): - """Test PM vote reminder through aurweb.notify.main().""" - set_pm([user]) - - vote_id = 1 - args = ["aurweb-notify", "vote-reminder", str(vote_id)] - with mock.patch("sys.argv", args): - notify.main() - - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - expected = f"Package Maintainer Vote Reminder: Proposal {vote_id}" - assert email.headers.get("Subject") == expected - - expected = f"""\ -Please remember to cast your vote on proposal {vote_id} [1]. The voting period -ends in less than 48 hours. - -[1] {aur_location}/package-maintainer/?id={vote_id}\ -""" - assert email.body == expected - - -# Save original config.get; we're going to mock it and need -# to be able to fallback when we are not overriding. -config_get = config.get - - -def mock_smtp_config(cls): - def _mock_smtp_config(section: str, key: str): - if section == "notifications": - if key == "sendmail": - return cls() - elif key == "smtp-use-ssl": - return cls(0) - elif key == "smtp-use-starttls": - return cls(0) - elif key == "smtp-user": - return cls() - elif key == "smtp-password": - return cls() - return cls(config_get(section, key)) - - return _mock_smtp_config - - -def test_smtp(user: User): - with db.begin(): - user.ResetKey = "12345678901234567890123456789012" - - smtp = FakeSMTP() - - get = "aurweb.config.get" - getboolean = "aurweb.config.getboolean" - with mock.patch(get, side_effect=mock_smtp_config(str)): - with mock.patch(getboolean, side_effect=mock_smtp_config(bool)): - with mock.patch("smtplib.SMTP", side_effect=smtp): - config.rehash() - notif = notify.WelcomeNotification(user.ID) - notif.send() - config.rehash() - assert len(smtp.emails) == 1 - - -def mock_smtp_starttls_config(cls): - def _mock_smtp_starttls_config(section: str, key: str): - if section == "notifications": - if key == "sendmail": - return cls() - elif key == "smtp-use-ssl": - return cls(0) - elif key == "smtp-use-starttls": - return cls(1) - elif key == "smtp-user": - return cls("test") - elif key == "smtp-password": - return cls("password") - return cls(config_get(section, key)) - - return _mock_smtp_starttls_config - - -def test_smtp_starttls(user: User): - # This test does two things: test starttls path and test - # path where we have a backup email. - - with db.begin(): - user.ResetKey = "12345678901234567890123456789012" - user.BackupEmail = "backup@example.org" - - smtp = FakeSMTP() - - get = "aurweb.config.get" - getboolean = "aurweb.config.getboolean" - with mock.patch(get, side_effect=mock_smtp_starttls_config(str)): - with mock.patch(getboolean, side_effect=mock_smtp_starttls_config(bool)): - with mock.patch("smtplib.SMTP", side_effect=smtp): - notif = notify.WelcomeNotification(user.ID) - notif.send() - assert smtp.starttls_enabled - assert smtp.user - assert smtp.passwd - - assert len(smtp.emails) == 2 - to = smtp.emails[0][1] - assert to == [user.Email] - - to = smtp.emails[1][1] - assert to == [user.BackupEmail] - - -def mock_smtp_ssl_config(cls): - def _mock_smtp_ssl_config(section: str, key: str): - if section == "notifications": - if key == "sendmail": - return cls() - elif key == "smtp-use-ssl": - return cls(1) - elif key == "smtp-use-starttls": - return cls(0) - elif key == "smtp-user": - return cls("test") - elif key == "smtp-password": - return cls("password") - return cls(config_get(section, key)) - - return _mock_smtp_ssl_config - - -def test_smtp_ssl(user: User): - with db.begin(): - user.ResetKey = "12345678901234567890123456789012" - - smtp = FakeSMTP_SSL() - - get = "aurweb.config.get" - getboolean = "aurweb.config.getboolean" - with mock.patch(get, side_effect=mock_smtp_ssl_config(str)): - with mock.patch(getboolean, side_effect=mock_smtp_ssl_config(bool)): - with mock.patch("smtplib.SMTP_SSL", side_effect=smtp): - notif = notify.WelcomeNotification(user.ID) - notif.send() - assert len(smtp.emails) == 1 - assert smtp.use_ssl - assert smtp.user - assert smtp.passwd - - -def test_notification_defaults(): - notif = notify.Notification() - assert notif.get_refs() == tuple() - assert notif.get_headers() == dict() - assert notif.get_cc() == list() - - -def test_notification_oserror(user: User, caplog: pytest.LogCaptureFixture): - """Try sending a notification with a bad SMTP configuration.""" - caplog.set_level(ERROR) - config_get = config.get - config_getint = config.getint - - mocked_options = { - "sendmail": str(), - "smtp-server": "mail.server.xyz", - "smtp-port": "587", - "smtp-user": "notify@server.xyz", - "smtp-password": "notify_server_xyz", - "smtp-timeout": 1, - "sender": "notify@server.xyz", - "reply-to": "no-reply@server.xyz", - } - - def mock_config_get(section: str, key: str) -> str: - if section == "notifications": - if key in mocked_options: - return mocked_options.get(key) - return config_get(section, key) - - def mock_config_getint(section: str, key: str) -> str: - if section == "notifications": - if key in mocked_options: - return mocked_options.get(key) - return config_getint(section, key) - - notif = notify.WelcomeNotification(user.ID) - with mock.patch("aurweb.config.getint", side_effect=mock_config_getint): - with mock.patch("aurweb.config.get", side_effect=mock_config_get): - notif.send() - - expected = "Unable to emit notification due to an OSError" - assert expected in caplog.text diff --git a/test/test_official_provider.py b/test/test_official_provider.py deleted file mode 100644 index b36fff5a..00000000 --- a/test/test_official_provider.py +++ /dev/null @@ -1,70 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.official_provider import OfficialProvider - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_official_provider_creation(): - with db.begin(): - oprovider = db.create( - OfficialProvider, - Name="some-name", - Repo="some-repo", - Provides="some-provides", - ) - assert bool(oprovider.ID) - assert oprovider.Name == "some-name" - assert oprovider.Repo == "some-repo" - assert oprovider.Provides == "some-provides" - - -def test_official_provider_cs(): - """Test case sensitivity of the database table.""" - with db.begin(): - oprovider = db.create( - OfficialProvider, - Name="some-name", - Repo="some-repo", - Provides="some-provides", - ) - assert bool(oprovider.ID) - - with db.begin(): - oprovider_cs = db.create( - OfficialProvider, - Name="SOME-NAME", - Repo="SOME-REPO", - Provides="SOME-PROVIDES", - ) - assert bool(oprovider_cs.ID) - - assert oprovider.ID != oprovider_cs.ID - - assert oprovider.Name == "some-name" - assert oprovider.Repo == "some-repo" - assert oprovider.Provides == "some-provides" - - assert oprovider_cs.Name == "SOME-NAME" - assert oprovider_cs.Repo == "SOME-REPO" - assert oprovider_cs.Provides == "SOME-PROVIDES" - - -def test_official_provider_null_name_raises_exception(): - with pytest.raises(IntegrityError): - OfficialProvider(Repo="some-repo", Provides="some-provides") - - -def test_official_provider_null_repo_raises_exception(): - with pytest.raises(IntegrityError): - OfficialProvider(Name="some-name", Provides="some-provides") - - -def test_official_provider_null_provides_raises_exception(): - with pytest.raises(IntegrityError): - OfficialProvider(Name="some-name", Repo="some-repo") diff --git a/test/test_package.py b/test/test_package.py deleted file mode 100644 index 83dd8d54..00000000 --- a/test/test_package.py +++ /dev/null @@ -1,80 +0,0 @@ -import pytest -from sqlalchemy import and_ -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def package(user: User) -> Package: - with db.begin(): - pkgbase = db.create(PackageBase, Name="beautiful-package", Maintainer=user) - package = db.create( - Package, - PackageBase=pkgbase, - Name=pkgbase.Name, - Description="Test description.", - URL="https://test.package", - ) - yield package - - -def test_package(package: Package): - assert package.Name == "beautiful-package" - assert package.Description == "Test description." - assert package.Version == str() # Default version. - assert package.URL == "https://test.package" - - # Update package Version. - with db.begin(): - package.Version = "1.2.3" - - # Make sure it got updated in the database. - record = ( - db.query(Package) - .filter(and_(Package.ID == package.ID, Package.Version == "1.2.3")) - .first() - ) - assert record is not None - - -def test_package_null_pkgbase_raises(): - with pytest.raises(IntegrityError): - Package( - Name="some-package", - Description="Some description.", - URL="https://some.package", - ) - - -def test_package_null_name_raises(package: Package): - pkgbase = package.PackageBase - with pytest.raises(IntegrityError): - Package( - PackageBase=pkgbase, - Description="Some description.", - URL="https://some.package", - ) diff --git a/test/test_package_base.py b/test/test_package_base.py deleted file mode 100644 index feea8183..00000000 --- a/test/test_package_base.py +++ /dev/null @@ -1,70 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.package_base import PackageBase -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - with db.begin(): - pkgbase = db.create(PackageBase, Name="beautiful-package", Maintainer=user) - yield pkgbase - - -def test_package_base(user: User, pkgbase: PackageBase): - assert pkgbase in user.maintained_bases - assert not pkgbase.OutOfDateTS - assert pkgbase.SubmittedTS > 0 - assert pkgbase.ModifiedTS > 0 - - # Set Popularity to a string, then get it by attribute to - # exercise the string -> float conversion path. - with db.begin(): - pkgbase.Popularity = "0.0" - assert pkgbase.Popularity == 0.0 - - -def test_package_base_ci(user: User, pkgbase: PackageBase): - """Test case insensitivity of the database table.""" - with pytest.raises(IntegrityError): - with db.begin(): - db.create(PackageBase, Name=pkgbase.Name.upper(), Maintainer=user) - db.rollback() - - -def test_package_base_relationships(user: User, pkgbase: PackageBase): - with db.begin(): - pkgbase.Flagger = user - pkgbase.Submitter = user - pkgbase.Packager = user - assert pkgbase in user.flagged_bases - assert pkgbase in user.maintained_bases - assert pkgbase in user.submitted_bases - assert pkgbase in user.package_bases - - -def test_package_base_null_name_raises_exception(): - with pytest.raises(IntegrityError): - PackageBase() diff --git a/test/test_package_blacklist.py b/test/test_package_blacklist.py deleted file mode 100644 index 44de1830..00000000 --- a/test/test_package_blacklist.py +++ /dev/null @@ -1,22 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.package_blacklist import PackageBlacklist - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_package_blacklist_creation(): - with db.begin(): - package_blacklist = db.create(PackageBlacklist, Name="evil-package") - assert bool(package_blacklist.ID) - assert package_blacklist.Name == "evil-package" - - -def test_package_blacklist_null_name_raises_exception(): - with pytest.raises(IntegrityError): - PackageBlacklist() diff --git a/test/test_package_comaintainer.py b/test/test_package_comaintainer.py deleted file mode 100644 index 52075887..00000000 --- a/test/test_package_comaintainer.py +++ /dev/null @@ -1,60 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.package_base import PackageBase -from aurweb.models.package_comaintainer import PackageComaintainer -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-package", Maintainer=user) - yield pkgbase - - -def test_package_comaintainer_creation(user: User, pkgbase: PackageBase): - with db.begin(): - package_comaintainer = db.create( - PackageComaintainer, User=user, PackageBase=pkgbase, Priority=5 - ) - assert bool(package_comaintainer) - assert package_comaintainer.User == user - assert package_comaintainer.PackageBase == pkgbase - assert package_comaintainer.Priority == 5 - - -def test_package_comaintainer_null_user_raises(pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageComaintainer(PackageBase=pkgbase, Priority=1) - - -def test_package_comaintainer_null_pkgbase_raises(user: User): - with pytest.raises(IntegrityError): - PackageComaintainer(User=user, Priority=1) - - -def test_package_comaintainer_null_priority_raises(user: User, pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageComaintainer(User=user, PackageBase=pkgbase) diff --git a/test/test_package_comment.py b/test/test_package_comment.py deleted file mode 100644 index 74f2895d..00000000 --- a/test/test_package_comment.py +++ /dev/null @@ -1,81 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.package_base import PackageBase -from aurweb.models.package_comment import PackageComment -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-package", Maintainer=user) - yield pkgbase - - -def test_package_comment_creation(user: User, pkgbase: PackageBase): - with db.begin(): - package_comment = db.create( - PackageComment, - PackageBase=pkgbase, - User=user, - Comments="Test comment.", - RenderedComment="Test rendered comment.", - ) - assert bool(package_comment.ID) - - -def test_package_comment_null_pkgbase_raises(user: User): - with pytest.raises(IntegrityError): - PackageComment( - User=user, - Comments="Test comment.", - RenderedComment="Test rendered comment.", - ) - - -def test_package_comment_null_user_raises(pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageComment( - PackageBase=pkgbase, - Comments="Test comment.", - RenderedComment="Test rendered comment.", - ) - - -def test_package_comment_null_comments_raises(user: User, pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageComment( - PackageBase=pkgbase, User=user, RenderedComment="Test rendered comment." - ) - - -def test_package_comment_null_renderedcomment_defaults( - user: User, pkgbase: PackageBase -): - with db.begin(): - record = db.create( - PackageComment, PackageBase=pkgbase, User=user, Comments="Test comment." - ) - assert record.RenderedComment == str() diff --git a/test/test_package_dependency.py b/test/test_package_dependency.py deleted file mode 100644 index 1cd2d305..00000000 --- a/test/test_package_dependency.py +++ /dev/null @@ -1,92 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.dependency_type import DEPENDS_ID -from aurweb.models.official_provider import OfficialProvider -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_dependency import PackageDependency -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd=str(), - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def package(user: User) -> Package: - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-package", Maintainer=user) - package = db.create( - Package, - PackageBase=pkgbase, - Name=pkgbase.Name, - Description="Test description.", - URL="https://test.package", - ) - yield package - - -def test_package_dependencies(user: User, package: Package): - with db.begin(): - pkgdep = db.create( - PackageDependency, Package=package, DepTypeID=DEPENDS_ID, DepName="test-dep" - ) - assert pkgdep.DepName == "test-dep" - assert pkgdep.Package == package - assert pkgdep in package.package_dependencies - assert not pkgdep.is_package() - - with db.begin(): - base = db.create(PackageBase, Name=pkgdep.DepName, Maintainer=user) - db.create(Package, PackageBase=base, Name=pkgdep.DepName) - - assert pkgdep.is_package() - assert pkgdep.is_aur_package() - - # Test with OfficialProvider - with db.begin(): - pkgdep = db.create( - PackageDependency, - Package=package, - DepTypeID=DEPENDS_ID, - DepName="test-repo-pkg", - ) - db.create( - OfficialProvider, Name=pkgdep.DepName, Repo="extra", Provides=pkgdep.DepName - ) - - assert pkgdep.is_package() - assert not pkgdep.is_aur_package() - - -def test_package_dependencies_null_package_raises(): - with pytest.raises(IntegrityError): - PackageDependency(DepTypeID=DEPENDS_ID, DepName="test-dep") - - -def test_package_dependencies_null_dependency_type_raises(package: Package): - with pytest.raises(IntegrityError): - PackageDependency(Package=package, DepName="test-dep") - - -def test_package_dependencies_null_depname_raises(package: Package): - with pytest.raises(IntegrityError): - PackageDependency(DepTypeID=DEPENDS_ID, Package=package) diff --git a/test/test_package_group.py b/test/test_package_group.py deleted file mode 100644 index 163f693d..00000000 --- a/test/test_package_group.py +++ /dev/null @@ -1,61 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.group import Group -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_group import PackageGroup -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def group() -> Group: - with db.begin(): - group = db.create(Group, Name="Test Group") - yield group - - -@pytest.fixture -def package(user: User) -> Package: - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-package", Maintainer=user) - package = db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - yield package - - -def test_package_group(package: Package, group: Group): - with db.begin(): - package_group = db.create(PackageGroup, Package=package, Group=group) - assert package_group.Group == group - assert package_group.Package == package - - -def test_package_group_null_package_raises(group: Group): - with pytest.raises(IntegrityError): - PackageGroup(Group=group) - - -def test_package_group_null_group_raises(package: Package): - with pytest.raises(IntegrityError): - PackageGroup(Package=package) diff --git a/test/test_package_keyword.py b/test/test_package_keyword.py deleted file mode 100644 index b52547f9..00000000 --- a/test/test_package_keyword.py +++ /dev/null @@ -1,46 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.package_base import PackageBase -from aurweb.models.package_keyword import PackageKeyword -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - with db.begin(): - pkgbase = db.create(PackageBase, Name="beautiful-package", Maintainer=user) - yield pkgbase - - -def test_package_keyword(pkgbase: PackageBase): - with db.begin(): - pkg_keyword = db.create(PackageKeyword, PackageBase=pkgbase, Keyword="test") - assert pkg_keyword in pkgbase.keywords - assert pkgbase == pkg_keyword.PackageBase - - -def test_package_keyword_null_pkgbase_raises_exception(): - with pytest.raises(IntegrityError): - PackageKeyword(Keyword="test") diff --git a/test/test_package_license.py b/test/test_package_license.py deleted file mode 100644 index b9242647..00000000 --- a/test/test_package_license.py +++ /dev/null @@ -1,61 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.license import License -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_license import PackageLicense -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def license() -> License: - with db.begin(): - license = db.create(License, Name="Test License") - yield license - - -@pytest.fixture -def package(user: User, license: License): - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-package", Maintainer=user) - package = db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - yield package - - -def test_package_license(license: License, package: Package): - with db.begin(): - package_license = db.create(PackageLicense, Package=package, License=license) - assert package_license.License == license - assert package_license.Package == package - - -def test_package_license_null_package_raises(license: License): - with pytest.raises(IntegrityError): - PackageLicense(License=license) - - -def test_package_license_null_license_raises(package: Package): - with pytest.raises(IntegrityError): - PackageLicense(Package=package) diff --git a/test/test_package_maintainer_routes.py b/test/test_package_maintainer_routes.py deleted file mode 100644 index 1824556b..00000000 --- a/test/test_package_maintainer_routes.py +++ /dev/null @@ -1,991 +0,0 @@ -import re -from http import HTTPStatus -from io import StringIO -from typing import Tuple - -import lxml.etree -import pytest -from fastapi.testclient import TestClient - -from aurweb import config, db, filters, time -from aurweb.models.account_type import DEVELOPER_ID, PACKAGE_MAINTAINER_ID, AccountType -from aurweb.models.user import User -from aurweb.models.vote import Vote -from aurweb.models.voteinfo import VoteInfo -from aurweb.testing.requests import Request - -DATETIME_REGEX = r"^[0-9]{4}-[0-9]{2}-[0-9]{2} \(.+\)$" -PARTICIPATION_REGEX = r"^1?[0-9]{2}[%]$" # 0% - 100% - - -def parse_root(html): - parser = lxml.etree.HTMLParser(recover=True) - tree = lxml.etree.parse(StringIO(html), parser) - return tree.getroot() - - -def get_table(root, class_name): - table = root.xpath(f'//table[contains(@class, "{class_name}")]')[0] - return table - - -def get_table_rows(table): - tbody = table.xpath("./tbody")[0] - return tbody.xpath("./tr") - - -def get_pkglist_directions(table): - stats = table.getparent().xpath("./div[@class='pkglist-stats']")[0] - nav = stats.xpath("./p[@class='pkglist-nav']")[0] - return nav.xpath("./a") - - -def get_a(node): - return node.xpath("./a")[0].text.strip() - - -def get_span(node): - return node.xpath("./span")[0].text.strip() - - -def assert_current_vote_html(row, expected): - columns = row.xpath("./td") - proposal, start, end, user, voted = columns - p, s, e, u, v = expected # Column expectations. - assert re.match(p, get_a(proposal)) is not None - assert re.match(s, start.text) is not None - assert re.match(e, end.text) is not None - assert re.match(u, get_a(user)) is not None - assert re.match(v, get_span(voted)) is not None - - -def assert_past_vote_html(row, expected): - columns = row.xpath("./td") - proposal, start, end, user, yes, no, voted = columns # Real columns. - p, s, e, u, y, n, v = expected # Column expectations. - assert re.match(p, get_a(proposal)) is not None - assert re.match(s, start.text) is not None - assert re.match(e, end.text) is not None - assert re.match(u, get_a(user)) is not None - assert re.match(y, yes.text) is not None - assert re.match(n, no.text) is not None - assert re.match(v, get_span(voted)) is not None - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def client(): - from aurweb.asgi import app - - client = TestClient(app=app) - - # disable redirects for our tests - client.follow_redirects = False - yield client - - -@pytest.fixture -def pm_user(): - pm_type = db.query( - AccountType, AccountType.AccountType == "Package Maintainer" - ).first() - with db.begin(): - pm_user = db.create( - User, - Username="test_pm", - Email="test_pm@example.org", - RealName="Test PM", - Passwd="testPassword", - AccountType=pm_type, - ) - yield pm_user - - -@pytest.fixture -def pm_user2(): - with db.begin(): - pm_user2 = db.create( - User, - Username="test_pm2", - Email="test_pm2@example.org", - RealName="Test PM 2", - Passwd="testPassword", - AccountTypeID=PACKAGE_MAINTAINER_ID, - ) - yield pm_user2 - - -@pytest.fixture -def user(): - user_type = db.query(AccountType, AccountType.AccountType == "User").first() - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountType=user_type, - ) - yield user - - -@pytest.fixture -def proposal(user, pm_user): - ts = time.utcnow() - agenda = "Test proposal." - start = ts - 5 - end = ts + 1000 - - with db.begin(): - voteinfo = db.create( - VoteInfo, - Agenda=agenda, - Quorum=0.0, - User=user.Username, - Submitter=pm_user, - Submitted=start, - End=end, - ) - yield (pm_user, user, voteinfo) - - -def test_pm_index_guest(client): - headers = {"referer": config.get("options", "aur_location") + "/package-maintainer"} - with client as request: - response = request.get("/package-maintainer", headers=headers) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - params = filters.urlencode({"next": "/package-maintainer"}) - assert response.headers.get("location") == f"/login?{params}" - - -def test_pm_index_unauthorized(client: TestClient, user: User): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - # Login as a normal user, not a TU. - request.cookies = cookies - response = request.get("/package-maintainer") - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/" - - -def test_pm_empty_index(client, pm_user): - """Check an empty index when we don't create any records.""" - - # Make a default get request to /package-maintainer. - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/package-maintainer") - assert response.status_code == int(HTTPStatus.OK) - - # Parse lxml root. - root = parse_root(response.text) - - # Check that .current-votes does not exist. - tables = root.xpath('//table[contains(@class, "current-votes")]') - assert len(tables) == 0 - - # Check that .past-votes has does not exist. - tables = root.xpath('//table[contains(@class, "current-votes")]') - assert len(tables) == 0 - - -def test_pm_index(client, pm_user): - ts = time.utcnow() - - # Create some test votes: (Agenda, Start, End). - votes = [ - ("Test agenda 1", ts - 5, ts + 1000), # Still running. - ("Test agenda 2", ts - 1000, ts - 5), # Not running anymore. - ] - vote_records = [] - with db.begin(): - for vote in votes: - agenda, start, end = vote - vote_records.append( - db.create( - VoteInfo, - Agenda=agenda, - User=pm_user.Username, - Submitted=start, - End=end, - Quorum=0.0, - Submitter=pm_user, - ) - ) - - with db.begin(): - # Vote on an ended proposal. - vote_record = vote_records[1] - vote_record.Yes += 1 - vote_record.ActiveUsers += 1 - db.create(Vote, VoteInfo=vote_record, User=pm_user) - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - # Pass an invalid cby and pby; let them default to "desc". - request.cookies = cookies - response = request.get( - "/package-maintainer", - params={"cby": "BAD!", "pby": "blah"}, - ) - - assert response.status_code == int(HTTPStatus.OK) - - # Rows we expect to exist in HTML produced by /package-maintainer for current votes. - expected_rows = [ - ( - r"Test agenda 1", - DATETIME_REGEX, - DATETIME_REGEX, - pm_user.Username, - r"^(Yes|No)$", - ) - ] - - # Assert that we are matching the number of current votes. - current_votes = [c for c in votes if c[2] > ts] - assert len(current_votes) == len(expected_rows) - - # Parse lxml.etree root. - root = parse_root(response.text) - - table = get_table(root, "current-votes") - rows = get_table_rows(table) - for i, row in enumerate(rows): - assert_current_vote_html(row, expected_rows[i]) - - # Assert that we are matching the number of past votes. - past_votes = [c for c in votes if c[2] <= ts] - assert len(past_votes) == len(expected_rows) - - # Rows we expect to exist in HTML produced by /package-maintainer for past votes. - expected_rows = [ - ( - r"Test agenda 2", - DATETIME_REGEX, - DATETIME_REGEX, - pm_user.Username, - r"^\d+$", - r"^\d+$", - r"^(Yes|No)$", - ) - ] - - table = get_table(root, "past-votes") - rows = get_table_rows(table) - for i, row in enumerate(rows): - assert_past_vote_html(row, expected_rows[i]) - - # Get the .last-votes table and check that our vote shows up. - table = get_table(root, "last-votes") - rows = get_table_rows(table) - assert len(rows) == 1 - - # Check to see the rows match up to our user and related vote. - username, vote_id = rows[0] - username = username.xpath("./a")[0] - vote_id = vote_id.xpath("./a")[0] - assert username.text.strip() == pm_user.Username - assert int(vote_id.text.strip()) == vote_records[1].ID - - -def test_pm_stats(client: TestClient, pm_user: User): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/package-maintainer") - assert response.status_code == HTTPStatus.OK - - root = parse_root(response.text) - stats = root.xpath('//table[@class="no-width"]')[0] - rows = stats.xpath("./tbody/tr") - - # We have one package maintainer. - total = rows[0] - label, count = total.xpath("./td") - assert int(count.text.strip()) == 1 - - # And we have one active PM. - active = rows[1] - label, count = active.xpath("./td") - assert int(count.text.strip()) == 1 - - with db.begin(): - pm_user.InactivityTS = time.utcnow() - - with client as request: - request.cookies = cookies - response = request.get("/package-maintainer") - assert response.status_code == HTTPStatus.OK - - root = parse_root(response.text) - stats = root.xpath('//table[@class="no-width"]')[0] - rows = stats.xpath("./tbody/tr") - - # We have one package maintainer. - total = rows[0] - label, count = total.xpath("./td") - assert int(count.text.strip()) == 1 - - # But we have no more active PMs. - active = rows[1] - label, count = active.xpath("./td") - assert int(count.text.strip()) == 0 - - -def test_pm_index_table_paging(client, pm_user): - ts = time.utcnow() - - with db.begin(): - for i in range(25): - # Create 25 current votes. - db.create( - VoteInfo, - Agenda=f"Agenda #{i}", - User=pm_user.Username, - Submitted=(ts - 5), - End=(ts + 1000), - Quorum=0.0, - Submitter=pm_user, - ) - - for i in range(25): - # Create 25 past votes. - db.create( - VoteInfo, - Agenda=f"Agenda #{25 + i}", - User=pm_user.Username, - Submitted=(ts - 1000), - End=(ts - 5), - Quorum=0.0, - Submitter=pm_user, - ) - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/package-maintainer") - assert response.status_code == int(HTTPStatus.OK) - - # Parse lxml.etree root. - root = parse_root(response.text) - - table = get_table(root, "current-votes") - rows = get_table_rows(table) - assert len(rows) == 10 - - def make_expectation(offset, i): - return [ - f"Agenda #{offset + i}", - DATETIME_REGEX, - DATETIME_REGEX, - pm_user.Username, - r"^(Yes|No)$", - ] - - for i, row in enumerate(rows): - assert_current_vote_html(row, make_expectation(0, i)) - - # Parse out Back/Next buttons. - directions = get_pkglist_directions(table) - assert len(directions) == 1 - assert "Next" in directions[0].text - - # Now, get the next page of current votes. - offset = 10 # Specify coff=10 - with client as request: - request.cookies = cookies - response = request.get("package-maintainer", params={"coff": offset}) - assert response.status_code == int(HTTPStatus.OK) - - old_rows = rows - root = parse_root(response.text) - - table = get_table(root, "current-votes") - rows = get_table_rows(table) - assert rows != old_rows - - for i, row in enumerate(rows): - assert_current_vote_html(row, make_expectation(offset, i)) - - # Parse out Back/Next buttons. - directions = get_pkglist_directions(table) - assert len(directions) == 2 - assert "Back" in directions[0].text - assert "Next" in directions[1].text - - # Make sure past-votes' Back/Next were not affected. - past_votes = get_table(root, "past-votes") - past_directions = get_pkglist_directions(past_votes) - assert len(past_directions) == 1 - assert "Next" in past_directions[0].text - - offset = 20 # Specify coff=10 - with client as request: - request.cookies = cookies - response = request.get("/package-maintainer", params={"coff": offset}) - assert response.status_code == int(HTTPStatus.OK) - - # Do it again, we only have five left. - old_rows = rows - root = parse_root(response.text) - - table = get_table(root, "current-votes") - rows = get_table_rows(table) - assert rows != old_rows - for i, row in enumerate(rows): - assert_current_vote_html(row, make_expectation(offset, i)) - - # Parse out Back/Next buttons. - directions = get_pkglist_directions(table) - assert len(directions) == 1 - assert "Back" in directions[0].text - - # Make sure past-votes' Back/Next were not affected. - past_votes = get_table(root, "past-votes") - past_directions = get_pkglist_directions(past_votes) - assert len(past_directions) == 1 - assert "Next" in past_directions[0].text - - -def test_pm_index_sorting(client, pm_user): - ts = time.utcnow() - - with db.begin(): - for i in range(2): - # Create 'Agenda #1' and 'Agenda #2'. - db.create( - VoteInfo, - Agenda=f"Agenda #{i + 1}", - User=pm_user.Username, - Submitted=(ts + 5), - End=(ts + 1000), - Quorum=0.0, - Submitter=pm_user, - ) - - # Let's order each vote one day after the other. - # This will allow us to test the sorting nature - # of the tables. - ts += 86405 - - # Make a default request to /package-maintainer. - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/package-maintainer") - assert response.status_code == int(HTTPStatus.OK) - - # Get lxml handles of the document. - root = parse_root(response.text) - table = get_table(root, "current-votes") - rows = get_table_rows(table) - - # The latest Agenda is at the top by default. - expected = ["Agenda #2", "Agenda #1"] - - assert len(rows) == len(expected) - for i, row in enumerate(rows): - assert_current_vote_html( - row, - [ - expected[i], - DATETIME_REGEX, - DATETIME_REGEX, - pm_user.Username, - r"^(Yes|No)$", - ], - ) - - # Make another request; one that sorts the current votes - # in ascending order instead of the default descending order. - with client as request: - request.cookies = cookies - response = request.get("/package-maintainer", params={"cby": "asc"}) - assert response.status_code == int(HTTPStatus.OK) - - # Get lxml handles of the document. - root = parse_root(response.text) - table = get_table(root, "current-votes") - rows = get_table_rows(table) - - # Reverse our expectations and assert that the proposals got flipped. - rev_expected = list(reversed(expected)) - assert len(rows) == len(rev_expected) - for i, row in enumerate(rows): - assert_current_vote_html( - row, - [ - rev_expected[i], - DATETIME_REGEX, - DATETIME_REGEX, - pm_user.Username, - r"^(Yes|No)$", - ], - ) - - -def test_pm_index_last_votes( - client: TestClient, pm_user: User, pm_user2: User, user: User -): - ts = time.utcnow() - - with db.begin(): - # Create a proposal which has ended. - voteinfo = db.create( - VoteInfo, - Agenda="Test agenda", - User=user.Username, - Submitted=(ts - 1000), - End=(ts - 5), - Yes=1, - No=1, - ActiveUsers=1, - Quorum=0.0, - Submitter=pm_user, - ) - - # Create a vote on it from pm_user. - db.create(Vote, VoteInfo=voteinfo, User=pm_user) - db.create(Vote, VoteInfo=voteinfo, User=pm_user2) - - # Now, check that pm_user got populated in the .last-votes table. - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/package-maintainer") - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - table = get_table(root, "last-votes") - rows = get_table_rows(table) - assert len(rows) == 2 - - last_vote = rows[0] - user, vote_id = last_vote.xpath("./td/a") - assert user.text.strip() == pm_user.Username - assert int(vote_id.text.strip()) == voteinfo.ID - - last_vote = rows[1] - user, vote_id = last_vote.xpath("./td/a") - assert int(vote_id.text.strip()) == voteinfo.ID - assert user.text.strip() == pm_user2.Username - - -def test_pm_proposal_not_found(client, pm_user): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get( - "/package-maintainer", params={"id": 1}, follow_redirects=True - ) - assert response.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pm_proposal_unauthorized( - client: TestClient, user: User, proposal: Tuple[User, User, VoteInfo] -): - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/package-maintainer/{proposal[2].ID}" - with client as request: - request.cookies = cookies - response = request.get(endpoint) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/package-maintainer" - - with client as request: - request.cookies = cookies - response = request.post(endpoint, data={"decision": False}) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/package-maintainer" - - -def test_pm_running_proposal(client: TestClient, proposal: Tuple[User, User, VoteInfo]): - pm_user, user, voteinfo = proposal - with db.begin(): - voteinfo.ActiveUsers = 1 - - # Initiate an authenticated GET request to /package-maintainer/{proposal_id}. - proposal_id = voteinfo.ID - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get(f"/package-maintainer/{proposal_id}") - assert response.status_code == int(HTTPStatus.OK) - - # Alright, now let's continue on to verifying some markup. - # First, let's verify that the proposal details match. - root = parse_root(response.text) - details = root.xpath('//div[@class="proposal details"]')[0] - - vote_running = root.xpath('//p[contains(@class, "vote-running")]')[0] - assert vote_running.text.strip() == "This vote is still running." - - # Verify User field. - username = details.xpath('./div[contains(@class, "user")]/strong/a/text()')[0] - assert username.strip() == user.Username - - active = details.xpath('./div[contains(@class, "field")]')[1] - content = active.text.strip() - assert "Active Package Maintainers assigned:" in content - assert "1" in content - - submitted = details.xpath('./div[contains(@class, "submitted")]/text()')[0] - assert ( - re.match( - r"^Submitted: \d{4}-\d{2}-\d{2} \d{2}:\d{2} \(.+\) by$", submitted.strip() - ) - is not None - ) - submitter = details.xpath('./div[contains(@class, "submitted")]/a')[0] - assert submitter.text.strip() == pm_user.Username - assert submitter.attrib["href"] == f"/account/{pm_user.Username}" - - end = details.xpath('./div[contains(@class, "end")]')[0] - end_label = end.xpath("./text()")[0] - assert end_label.strip() == "End:" - - end_datetime = end.xpath("./strong/text()")[0] - assert ( - re.match(r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2} \(.+\)$", end_datetime.strip()) - is not None - ) - - # We have not voted yet. Assert that our voting form is shown. - form = root.xpath('//form[contains(@class, "action-form")]')[0] - fields = form.xpath("./fieldset")[0] - buttons = fields.xpath('./button[@name="decision"]') - assert len(buttons) == 3 - - # Check the button names and values. - yes, no, abstain = buttons - - # Yes - assert yes.attrib["name"] == "decision" - assert yes.attrib["value"] == "Yes" - - # No - assert no.attrib["name"] == "decision" - assert no.attrib["value"] == "No" - - # Abstain - assert abstain.attrib["name"] == "decision" - assert abstain.attrib["value"] == "Abstain" - - # Create a vote. - with db.begin(): - db.create(Vote, VoteInfo=voteinfo, User=pm_user) - voteinfo.ActiveUsers += 1 - voteinfo.Yes += 1 - - # Make another request now that we've voted. - with client as request: - request.cookies = cookies - response = request.get( - "/package-maintainer", params={"id": voteinfo.ID}, follow_redirects=True - ) - assert response.status_code == int(HTTPStatus.OK) - - # Parse our new root. - root = parse_root(response.text) - - # Check that we no longer have a voting form. - form = root.xpath('//form[contains(@class, "action-form")]') - assert not form - - # Check that we're told we've voted. - status = root.xpath('//span[contains(@class, "status")]/text()')[0] - assert status == "You've already voted for this proposal." - - -def test_pm_ended_proposal(client, proposal): - pm_user, user, voteinfo = proposal - - ts = time.utcnow() - with db.begin(): - voteinfo.End = ts - 5 # 5 seconds ago. - - # Initiate an authenticated GET request to /package-maintainer/{proposal_id}. - proposal_id = voteinfo.ID - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get(f"/package-maintainer/{proposal_id}") - assert response.status_code == int(HTTPStatus.OK) - - # Alright, now let's continue on to verifying some markup. - # First, let's verify that the proposal details match. - root = parse_root(response.text) - details = root.xpath('//div[@class="proposal details"]')[0] - - vote_running = root.xpath('//p[contains(@class, "vote-running")]') - assert not vote_running - - result_node = details.xpath('./div[contains(@class, "result")]')[0] - result_label = result_node.xpath("./text()")[0] - assert result_label.strip() == "Result:" - - result = result_node.xpath("./span/text()")[0] - assert result.strip() == "unknown" - - # Check that voting has ended. - form = root.xpath('//form[contains(@class, "action-form")]') - assert not form - - # We should see a status about it. - status = root.xpath('//span[contains(@class, "status")]/text()')[0] - assert status == "Voting is closed for this proposal." - - -def test_pm_proposal_vote_not_found(client, pm_user): - """Test POST request to a missing vote.""" - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - data = {"decision": "Yes"} - request.cookies = cookies - response = request.post("/package-maintainer/1", data=data) - assert response.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pm_proposal_vote(client, proposal): - pm_user, user, voteinfo = proposal - - # Store the current related values. - yes = voteinfo.Yes - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - data = {"decision": "Yes"} - request.cookies = cookies - response = request.post(f"/package-maintainer/{voteinfo.ID}", data=data) - assert response.status_code == int(HTTPStatus.OK) - - # Check that the proposal record got updated. - assert voteinfo.Yes == yes + 1 - - # Check that the new PMVote exists. - vote = db.query(Vote, Vote.VoteInfo == voteinfo, Vote.User == pm_user).first() - assert vote is not None - - root = parse_root(response.text) - - # Check that we're told we've voted. - status = root.xpath('//span[contains(@class, "status")]/text()')[0] - assert status == "You've already voted for this proposal." - - -def test_pm_proposal_vote_unauthorized( - client: TestClient, proposal: Tuple[User, User, VoteInfo] -): - pm_user, user, voteinfo = proposal - - with db.begin(): - pm_user.AccountTypeID = DEVELOPER_ID - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - data = {"decision": "Yes"} - request.cookies = cookies - response = request.post(f"package-maintainer/{voteinfo.ID}", data=data) - assert response.status_code == int(HTTPStatus.UNAUTHORIZED) - - root = parse_root(response.text) - status = root.xpath('//span[contains(@class, "status")]/text()')[0] - assert status == "Only Package Maintainers are allowed to vote." - - with client as request: - data = {"decision": "Yes"} - request.cookies = cookies - response = request.get(f"/package-maintainer/{voteinfo.ID}", params=data) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - status = root.xpath('//span[contains(@class, "status")]/text()')[0] - assert status == "Only Package Maintainers are allowed to vote." - - -def test_pm_proposal_vote_cant_self_vote(client, proposal): - pm_user, user, voteinfo = proposal - - # Update voteinfo.User. - with db.begin(): - voteinfo.User = pm_user.Username - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - data = {"decision": "Yes"} - request.cookies = cookies - response = request.post(f"/package-maintainer/{voteinfo.ID}", data=data) - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - root = parse_root(response.text) - status = root.xpath('//span[contains(@class, "status")]/text()')[0] - assert status == "You cannot vote in an proposal about you." - - with client as request: - data = {"decision": "Yes"} - request.cookies = cookies - response = request.get(f"/package-maintainer/{voteinfo.ID}", params=data) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - status = root.xpath('//span[contains(@class, "status")]/text()')[0] - assert status == "You cannot vote in an proposal about you." - - -def test_pm_proposal_vote_already_voted(client, proposal): - pm_user, user, voteinfo = proposal - - with db.begin(): - db.create(Vote, VoteInfo=voteinfo, User=pm_user) - voteinfo.Yes += 1 - voteinfo.ActiveUsers += 1 - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - data = {"decision": "Yes"} - request.cookies = cookies - response = request.post(f"/package-maintainer/{voteinfo.ID}", data=data) - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - root = parse_root(response.text) - status = root.xpath('//span[contains(@class, "status")]/text()')[0] - assert status == "You've already voted for this proposal." - - with client as request: - data = {"decision": "Yes"} - request.cookies = cookies - response = request.get(f"/package-maintainer/{voteinfo.ID}", params=data) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - status = root.xpath('//span[contains(@class, "status")]/text()')[0] - assert status == "You've already voted for this proposal." - - -def test_pm_proposal_vote_invalid_decision(client, proposal): - pm_user, user, voteinfo = proposal - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - data = {"decision": "EVIL"} - request.cookies = cookies - response = request.post(f"package-maintainer/{voteinfo.ID}", data=data) - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - assert response.text == "Invalid 'decision' value." - - -def test_pm_addvote(client: TestClient, pm_user: User): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/addvote") - assert response.status_code == int(HTTPStatus.OK) - - -def test_pm_addvote_unauthorized( - client: TestClient, user: User, proposal: Tuple[User, User, VoteInfo] -): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/addvote") - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/package-maintainer" - - with client as request: - request.cookies = cookies - response = request.post("/addvote") - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert response.headers.get("location") == "/package-maintainer" - - -def test_pm_addvote_invalid_type(client: TestClient, pm_user: User): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get("/addvote", params={"type": "faketype"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - error = root.xpath('//*[contains(@class, "error")]/text()')[0] - assert error.strip() == "Invalid type." - - -def test_pm_addvote_post(client: TestClient, pm_user: User, user: User): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - - data = {"user": user.Username, "type": "add_pm", "agenda": "Blah"} - - with client as request: - request.cookies = cookies - response = request.post("/addvote", data=data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - voteinfo = db.query(VoteInfo, VoteInfo.Agenda == "Blah").first() - assert voteinfo is not None - - -def test_pm_addvote_post_cant_duplicate_username( - client: TestClient, pm_user: User, user: User -): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - - data = {"user": user.Username, "type": "add_pm", "agenda": "Blah"} - - with client as request: - request.cookies = cookies - response = request.post("/addvote", data=data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - voteinfo = db.query(VoteInfo, VoteInfo.Agenda == "Blah").first() - assert voteinfo is not None - - with client as request: - request.cookies = cookies - response = request.post("/addvote", data=data) - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - -def test_pm_addvote_post_invalid_username(client: TestClient, pm_user: User): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - data = {"user": "fakeusername"} - with client as request: - request.cookies = cookies - response = request.post("/addvote", data=data) - assert response.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pm_addvote_post_invalid_type(client: TestClient, pm_user: User, user: User): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - data = {"user": user.Username} - with client as request: - request.cookies = cookies - response = request.post("/addvote", data=data) - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - -def test_pm_addvote_post_invalid_agenda(client: TestClient, pm_user: User, user: User): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - data = {"user": user.Username, "type": "add_pm"} - with client as request: - request.cookies = cookies - response = request.post("/addvote", data=data) - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - -def test_pm_addvote_post_bylaws(client: TestClient, pm_user: User): - # Bylaws votes do not need a user specified. - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - data = {"type": "bylaws", "agenda": "Blah blah!"} - with client as request: - request.cookies = cookies - response = request.post("/addvote", data=data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) diff --git a/test/test_package_notification.py b/test/test_package_notification.py deleted file mode 100644 index 27a03e84..00000000 --- a/test/test_package_notification.py +++ /dev/null @@ -1,52 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.package_base import PackageBase -from aurweb.models.package_notification import PackageNotification -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - ) - yield user - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-package", Maintainer=user) - yield pkgbase - - -def test_package_notification_creation(user: User, pkgbase: PackageBase): - with db.begin(): - package_notification = db.create( - PackageNotification, User=user, PackageBase=pkgbase - ) - assert bool(package_notification) - assert package_notification.User == user - assert package_notification.PackageBase == pkgbase - - -def test_package_notification_null_user_raises(pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageNotification(PackageBase=pkgbase) - - -def test_package_notification_null_pkgbase_raises(user: User): - with pytest.raises(IntegrityError): - PackageNotification(User=user) diff --git a/test/test_package_relation.py b/test/test_package_relation.py deleted file mode 100644 index c20b1394..00000000 --- a/test/test_package_relation.py +++ /dev/null @@ -1,78 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_relation import PackageRelation -from aurweb.models.relation_type import CONFLICTS_ID, PROVIDES_ID, REPLACES_ID -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def package(user: User) -> Package: - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-package", Maintainer=user) - package = db.create( - Package, - PackageBase=pkgbase, - Name=pkgbase.Name, - Description="Test description.", - URL="https://test.package", - ) - yield package - - -def test_package_relation(package: Package): - with db.begin(): - pkgrel = db.create( - PackageRelation, - Package=package, - RelTypeID=CONFLICTS_ID, - RelName="test-relation", - ) - - assert pkgrel.RelName == "test-relation" - assert pkgrel.Package == package - assert pkgrel in package.package_relations - - with db.begin(): - pkgrel.RelTypeID = PROVIDES_ID - - with db.begin(): - pkgrel.RelTypeID = REPLACES_ID - - -def test_package_relation_null_package_raises(): - with pytest.raises(IntegrityError): - PackageRelation(RelTypeID=CONFLICTS_ID, RelName="test-relation") - - -def test_package_relation_null_relation_type_raises(package: Package): - with pytest.raises(IntegrityError): - PackageRelation(Package=package, RelName="test-relation") - - -def test_package_relation_null_relname_raises(package: Package): - with pytest.raises(IntegrityError): - PackageRelation(Package=package, RelTypeID=CONFLICTS_ID) diff --git a/test/test_package_request.py b/test/test_package_request.py deleted file mode 100644 index 2bbf56c2..00000000 --- a/test/test_package_request.py +++ /dev/null @@ -1,230 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import config, db, time -from aurweb.models.account_type import USER_ID -from aurweb.models.package_base import PackageBase -from aurweb.models.package_request import ( - ACCEPTED, - ACCEPTED_ID, - CLOSED, - CLOSED_ID, - PENDING, - PENDING_ID, - REJECTED, - REJECTED_ID, - PackageRequest, -) -from aurweb.models.request_type import MERGE_ID -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-package", Maintainer=user) - yield pkgbase - - -def test_package_request_creation(user: User, pkgbase: PackageBase): - with db.begin(): - package_request = db.create( - PackageRequest, - ReqTypeID=MERGE_ID, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Comments=str(), - ClosureComment=str(), - ) - - assert bool(package_request.ID) - assert package_request.User == user - assert package_request.PackageBase == pkgbase - assert package_request.PackageBaseName == pkgbase.Name - assert package_request.Comments == str() - assert package_request.ClosureComment == str() - - # Make sure that everything is cross-referenced with relationships. - assert package_request in user.package_requests - assert package_request in pkgbase.requests - - -def test_package_request_closed(user: User, pkgbase: PackageBase): - ts = time.utcnow() - with db.begin(): - package_request = db.create( - PackageRequest, - ReqTypeID=MERGE_ID, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Closer=user, - ClosedTS=ts, - Comments=str(), - ClosureComment=str(), - ) - - assert package_request.Closer == user - assert package_request.ClosedTS == ts - - # Test relationships. - assert package_request in user.closed_requests - - -def test_package_request_null_request_type_raises(user: User, pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageRequest( - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Comments=str(), - ClosureComment=str(), - ) - - -def test_package_request_null_user_raises(pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageRequest( - ReqTypeID=MERGE_ID, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Comments=str(), - ClosureComment=str(), - ) - - -def test_package_request_null_package_base_raises(user: User, pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageRequest( - ReqTypeID=MERGE_ID, - User=user, - PackageBaseName=pkgbase.Name, - Comments=str(), - ClosureComment=str(), - ) - - -def test_package_request_null_package_base_name_raises( - user: User, pkgbase: PackageBase -): - with pytest.raises(IntegrityError): - PackageRequest( - ReqTypeID=MERGE_ID, - User=user, - PackageBase=pkgbase, - Comments=str(), - ClosureComment=str(), - ) - - -def test_package_request_null_comments_raises(user: User, pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageRequest( - ReqTypeID=MERGE_ID, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - ClosureComment=str(), - ) - - -def test_package_request_null_closure_comment_raises(user: User, pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageRequest( - ReqTypeID=MERGE_ID, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Comments=str(), - ) - - -def test_package_request_status_display(user: User, pkgbase: PackageBase): - """Test status_display() based on the Status column value.""" - with db.begin(): - pkgreq = db.create( - PackageRequest, - ReqTypeID=MERGE_ID, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Comments=str(), - ClosureComment=str(), - Status=PENDING_ID, - ) - assert pkgreq.status_display() == PENDING - - with db.begin(): - pkgreq.Status = CLOSED_ID - assert pkgreq.status_display() == CLOSED - - with db.begin(): - pkgreq.Status = ACCEPTED_ID - assert pkgreq.status_display() == ACCEPTED - - with db.begin(): - pkgreq.Status = REJECTED_ID - assert pkgreq.status_display() == REJECTED - - with db.begin(): - pkgreq.Status = 124 - with pytest.raises(KeyError): - pkgreq.status_display() - - -def test_package_request_ml_message_id_hash(user: User, pkgbase: PackageBase): - with db.begin(): - pkgreq = db.create( - PackageRequest, - ID=1, - ReqTypeID=MERGE_ID, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Comments=str(), - ClosureComment=str(), - Status=PENDING_ID, - ) - - # A hash composed with ID=1 should result in BNNNRWOFDRSQP4LVPT77FF2GUFR45KW5 - assert pkgreq.ml_message_id_hash() == "BNNNRWOFDRSQP4LVPT77FF2GUFR45KW5" - - -def test_package_request_ml_message_url(user: User, pkgbase: PackageBase): - with db.begin(): - pkgreq = db.create( - PackageRequest, - ID=1, - ReqTypeID=MERGE_ID, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Comments=str(), - ClosureComment=str(), - Status=PENDING_ID, - ) - - assert ( - config.get("options", "ml_thread_url") % (pkgreq.ml_message_id_hash()) - == pkgreq.ml_message_url() - ) diff --git a/test/test_package_source.py b/test/test_package_source.py deleted file mode 100644 index 06230580..00000000 --- a/test/test_package_source.py +++ /dev/null @@ -1,50 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_source import PackageSource -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def package(user: User) -> Package: - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-package", Maintainer=user) - package = db.create(Package, PackageBase=pkgbase, Name="test-package") - yield package - - -def test_package_source(package: Package): - with db.begin(): - pkgsource = db.create(PackageSource, Package=package) - assert pkgsource.Package == package - # By default, PackageSources.Source assigns the string '/dev/null'. - assert pkgsource.Source == "/dev/null" - assert pkgsource.SourceArch is None - - -def test_package_source_null_package_raises(): - with pytest.raises(IntegrityError): - PackageSource() diff --git a/test/test_package_vote.py b/test/test_package_vote.py deleted file mode 100644 index 9a868262..00000000 --- a/test/test_package_vote.py +++ /dev/null @@ -1,60 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db, time -from aurweb.models.account_type import USER_ID -from aurweb.models.package_base import PackageBase -from aurweb.models.package_vote import PackageVote -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd=str(), - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - with db.begin(): - pkgbase = db.create(PackageBase, Name="test-package", Maintainer=user) - yield pkgbase - - -def test_package_vote_creation(user: User, pkgbase: PackageBase): - ts = time.utcnow() - - with db.begin(): - package_vote = db.create(PackageVote, User=user, PackageBase=pkgbase, VoteTS=ts) - assert bool(package_vote) - assert package_vote.User == user - assert package_vote.PackageBase == pkgbase - assert package_vote.VoteTS == ts - - -def test_package_vote_null_user_raises(pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageVote(PackageBase=pkgbase, VoteTS=1) - - -def test_package_vote_null_pkgbase_raises(user: User): - with pytest.raises(IntegrityError): - PackageVote(User=user, VoteTS=1) - - -def test_package_vote_null_votets_raises(user: User, pkgbase: PackageBase): - with pytest.raises(IntegrityError): - PackageVote(User=user, PackageBase=pkgbase) diff --git a/test/test_packages_routes.py b/test/test_packages_routes.py deleted file mode 100644 index 4bf7a5ae..00000000 --- a/test/test_packages_routes.py +++ /dev/null @@ -1,1726 +0,0 @@ -import re -from http import HTTPStatus -from unittest import mock - -import pytest -from fastapi.testclient import TestClient - -from aurweb import asgi, cache, config, db, time -from aurweb.filters import datetime_display -from aurweb.models import License, PackageLicense -from aurweb.models.account_type import USER_ID, AccountType -from aurweb.models.dependency_type import DependencyType -from aurweb.models.official_provider import OfficialProvider -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_comaintainer import PackageComaintainer -from aurweb.models.package_comment import PackageComment -from aurweb.models.package_dependency import PackageDependency -from aurweb.models.package_keyword import PackageKeyword -from aurweb.models.package_notification import PackageNotification -from aurweb.models.package_relation import PackageRelation -from aurweb.models.package_request import PackageRequest -from aurweb.models.package_vote import PackageVote -from aurweb.models.relation_type import ( - CONFLICTS_ID, - PROVIDES_ID, - REPLACES_ID, - RelationType, -) -from aurweb.models.request_type import DELETION_ID, RequestType -from aurweb.models.user import User -from aurweb.testing.html import get_errors, get_successes, parse_root -from aurweb.testing.requests import Request - - -def package_endpoint(package: Package) -> str: - return f"/packages/{package.Name}" - - -def create_package(pkgname: str, maintainer: User) -> Package: - pkgbase = db.create(PackageBase, Name=pkgname, Maintainer=maintainer) - return db.create(Package, Name=pkgbase.Name, PackageBase=pkgbase) - - -def create_package_dep( - package: Package, depname: str, dep_type_name: str = "depends" -) -> PackageDependency: - dep_type = db.query(DependencyType, DependencyType.Name == dep_type_name).first() - return db.create( - PackageDependency, DependencyType=dep_type, Package=package, DepName=depname - ) - - -def create_package_rel(package: Package, relname: str) -> PackageRelation: - rel_type = db.query(RelationType, RelationType.ID == PROVIDES_ID).first() - return db.create( - PackageRelation, RelationType=rel_type, Package=package, RelName=relname - ) - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture(autouse=True) -def clear_fakeredis_cache(): - cache._redis.flushall() - - -@pytest.fixture -def client() -> TestClient: - """Yield a FastAPI TestClient.""" - client = TestClient(app=asgi.app) - - # disable redirects for our tests - client.follow_redirects = False - yield client - - -def create_user(username: str) -> User: - with db.begin(): - user = db.create( - User, - Username=username, - Email=f"{username}@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - return user - - -@pytest.fixture -def user() -> User: - """Yield a user.""" - user = create_user("test") - yield user - - -@pytest.fixture -def maintainer() -> User: - """Yield a specific User used to maintain packages.""" - account_type = db.query(AccountType, AccountType.ID == USER_ID).first() - with db.begin(): - maintainer = db.create( - User, - Username="test_maintainer", - Email="test_maintainer@example.org", - Passwd="testPassword", - AccountType=account_type, - ) - yield maintainer - - -@pytest.fixture -def pm_user(): - pm_type = db.query( - AccountType, AccountType.AccountType == "Package Maintainer" - ).first() - with db.begin(): - pm_user = db.create( - User, - Username="test_pm", - Email="test_pm@example.org", - RealName="Test PM", - Passwd="testPassword", - AccountType=pm_type, - ) - yield pm_user - - -@pytest.fixture -def user_who_hates_grey_comments() -> User: - """Yield a specific User who doesn't like grey comments.""" - account_type = db.query(AccountType, AccountType.ID == USER_ID).first() - with db.begin(): - user_who_hates_grey_comments = db.create( - User, - Username="test_hater", - Email="test_hater@example.org", - Passwd="testPassword", - AccountType=account_type, - HideDeletedComments=True, - ) - yield user_who_hates_grey_comments - - -@pytest.fixture -def package(maintainer: User) -> Package: - """Yield a Package created by user.""" - now = time.utcnow() - with db.begin(): - pkgbase = db.create( - PackageBase, - Name="test-package", - Maintainer=maintainer, - Packager=maintainer, - Submitter=maintainer, - ModifiedTS=now, - ) - package = db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - yield package - - -@pytest.fixture -def pkgbase(package: Package) -> PackageBase: - yield package.PackageBase - - -@pytest.fixture -def target(maintainer: User) -> PackageBase: - """Merge target.""" - now = time.utcnow() - with db.begin(): - pkgbase = db.create( - PackageBase, - Name="target-package", - Maintainer=maintainer, - Packager=maintainer, - Submitter=maintainer, - ModifiedTS=now, - ) - db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - yield pkgbase - - -@pytest.fixture -def pkgreq(user: User, pkgbase: PackageBase) -> PackageRequest: - """Yield a PackageRequest related to `pkgbase`.""" - with db.begin(): - pkgreq = db.create( - PackageRequest, - ReqTypeID=DELETION_ID, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Comments=f"Deletion request for {pkgbase.Name}", - ClosureComment=str(), - ) - yield pkgreq - - -@pytest.fixture -def comment(user: User, package: Package) -> PackageComment: - pkgbase = package.PackageBase - now = time.utcnow() - with db.begin(): - comment = db.create( - PackageComment, - User=user, - PackageBase=pkgbase, - Comments="Test comment.", - RenderedComment=str(), - CommentTS=now, - ) - yield comment - - -@pytest.fixture -def deleted_comment(user: User, package: Package) -> PackageComment: - pkgbase = package.PackageBase - now = time.utcnow() - with db.begin(): - comment = db.create( - PackageComment, - User=user, - PackageBase=pkgbase, - Comments="Test comment.", - RenderedComment=str(), - CommentTS=now, - DelTS=now, - ) - yield comment - - -@pytest.fixture -def packages(maintainer: User) -> list[Package]: - """Yield 55 packages named pkg_0 .. pkg_54.""" - packages_ = [] - now = time.utcnow() - with db.begin(): - for i in range(55): - pkgbase = db.create( - PackageBase, - Name=f"pkg_{i}", - Maintainer=maintainer, - Packager=maintainer, - Submitter=maintainer, - ModifiedTS=now, - ) - package = db.create(Package, PackageBase=pkgbase, Name=f"pkg_{i}") - packages_.append(package) - - yield packages_ - - -def test_package_not_found(client: TestClient): - with client as request: - resp = request.get("/packages/not_found") - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_package(client: TestClient, package: Package): - """Test a single / packages / {name} route.""" - - with db.begin(): - db.create( - PackageRelation, - PackageID=package.ID, - RelTypeID=PROVIDES_ID, - RelName="test_provider1", - ) - db.create( - PackageRelation, - PackageID=package.ID, - RelTypeID=PROVIDES_ID, - RelName="test_provider2", - ) - - db.create( - PackageRelation, - PackageID=package.ID, - RelTypeID=REPLACES_ID, - RelName="test_replacer1", - ) - db.create( - PackageRelation, - PackageID=package.ID, - RelTypeID=REPLACES_ID, - RelName="test_replacer2", - ) - - db.create( - PackageRelation, - PackageID=package.ID, - RelTypeID=CONFLICTS_ID, - RelName="test_conflict1", - ) - db.create( - PackageRelation, - PackageID=package.ID, - RelTypeID=CONFLICTS_ID, - RelName="test_conflict2", - ) - - # Create some licenses. - licenses = [ - db.create(License, Name="test_license1"), - db.create(License, Name="test_license2"), - ] - - db.create(PackageLicense, PackageID=package.ID, License=licenses[0]) - db.create(PackageLicense, PackageID=package.ID, License=licenses[1]) - - # Create some keywords - keywords = ["test1", "test2"] - for keyword in keywords: - db.create( - PackageKeyword, PackageBaseID=package.PackageBaseID, Keyword=keyword - ) - - with client as request: - resp = request.get(package_endpoint(package)) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - h2 = root.find('.//div[@id="pkgdetails"]/h2') - - sections = h2.text.split(":") - assert sections[0] == "Package Details" - - name, version = sections[1].lstrip().split(" ") - assert name == package.Name - version == package.Version - - rows = root.findall('.//table[@id="pkginfo"]//tr') - row = rows[1] # Second row is our target. - - pkgbase = row.find("./td/a") - assert pkgbase.text.strip() == package.PackageBase.Name - - licenses = root.xpath('//tr[@id="licenses"]/td') - expected = ["test_license1", "test_license2"] - assert licenses[0].text.strip() == ", ".join(expected) - - provides = root.xpath('//tr[@id="provides"]/td') - expected = ["test_provider1", "test_provider2"] - assert provides[0].text.strip() == ", ".join(expected) - - replaces = root.xpath('//tr[@id="replaces"]/td') - expected = ["test_replacer1", "test_replacer2"] - assert replaces[0].text.strip() == ", ".join(expected) - - conflicts = root.xpath('//tr[@id="conflicts"]/td') - expected = ["test_conflict1", "test_conflict2"] - assert conflicts[0].text.strip() == ", ".join(expected) - - keywords = root.xpath('//a[@class="keyword"]') - expected = ["test1", "test2"] - for i, keyword in enumerate(expected): - assert keywords[i].text.strip() == keyword - - -def test_package_split_description(client: TestClient, user: User): - with db.begin(): - pkgbase = db.create( - PackageBase, - Name="pkgbase", - Maintainer=user, - Packager=user, - ) - - pkg_a = db.create( - Package, - PackageBase=pkgbase, - Name="pkg_a", - Description="pkg_a desc", - ) - pkg_b = db.create( - Package, - PackageBase=pkgbase, - Name="pkg_b", - Description="pkg_b desc", - ) - - # Check pkg_a - with client as request: - endp = f"/packages/{pkg_a.Name}" - resp = request.get(endp) - assert resp.status_code == HTTPStatus.OK - - root = parse_root(resp.text) - row = root.xpath('//tr[@id="pkg-description"]/td')[0] - assert row.text == pkg_a.Description - - # Check pkg_b - with client as request: - endp = f"/packages/{pkg_b.Name}" - resp = request.get(endp) - assert resp.status_code == HTTPStatus.OK - - root = parse_root(resp.text) - row = root.xpath('//tr[@id="pkg-description"]/td')[0] - assert row.text == pkg_b.Description - - -def test_paged_depends_required(client: TestClient, package: Package): - maint = package.PackageBase.Maintainer - new_pkgs = [] - - with db.begin(): - # Create 25 new packages that'll be used to depend on our package. - for i in range(26): - base = db.create(PackageBase, Name=f"new_pkg{i}", Maintainer=maint) - new_pkgs.append(db.create(Package, Name=base.Name, PackageBase=base)) - - # Create 25 deps. - for i in range(25): - create_package_dep(package, f"dep_{i}") - - with db.begin(): - # Create depends on this package so we get some required by listings. - for new_pkg in new_pkgs: - create_package_dep(new_pkg, package.Name) - - with client as request: - resp = request.get(package_endpoint(package)) - assert resp.status_code == int(HTTPStatus.OK) - - # Test depends show link. - assert "Show 5 more" in resp.text - - # Test required by show more link, we added 26 packages. - assert "Show 6 more" in resp.text - - # Follow both links at the same time. - with client as request: - resp = request.get( - package_endpoint(package), - params={ - "all_deps": True, - "all_reqs": True, - }, - ) - assert resp.status_code == int(HTTPStatus.OK) - - # We're should see everything and have no link. - assert "Show 5 more" not in resp.text - assert "Show 6 more" not in resp.text - - -def test_package_comments( - client: TestClient, user: User, user_who_hates_grey_comments: User, package: Package -): - now = time.utcnow() - with db.begin(): - comment = db.create( - PackageComment, - PackageBase=package.PackageBase, - User=user, - Comments="Test comment", - CommentTS=now, - ) - deleted_comment = db.create( - PackageComment, - PackageBase=package.PackageBase, - User=user, - Comments="Deleted Test comment", - CommentTS=now, - DelTS=now - 1, - ) - - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(package_endpoint(package)) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - expected = [comment.Comments, deleted_comment.Comments] - comments = root.xpath( - './/div[contains(@class, "package-comments")]' - '/div[@class="article-content"]/div/text()' - ) - assert len(comments) == 2 - for i, row in enumerate(expected): - assert comments[i].strip() == row - - cookies = {"AURSID": user_who_hates_grey_comments.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(package_endpoint(package)) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - expected = [comment.Comments] - comments = root.xpath( - './/div[contains(@class, "package-comments")]' - '/div[@class="article-content"]/div/text()' - ) - assert len(comments) == 1 # Deleted comment is hidden - for i, row in enumerate(expected): - assert comments[i].strip() == row - - -def test_package_requests_display( - client: TestClient, user: User, package: Package, pkgreq: PackageRequest -): - # Test that a single request displays "1 pending request". - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(package_endpoint(package)) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - selector = '//div[@id="actionlist"]/ul/li/span[@class="flagged"]' - target = root.xpath(selector)[0] - assert target.text.strip() == "1 pending request" - - type_ = db.query(RequestType, RequestType.ID == DELETION_ID).first() - with db.begin(): - db.create( - PackageRequest, - PackageBase=package.PackageBase, - PackageBaseName=package.PackageBase.Name, - User=user, - RequestType=type_, - Comments="Test comment2.", - ClosureComment=str(), - ) - - # Test that a two requests display "2 pending requests". - with client as request: - request.cookies = cookies - resp = request.get(package_endpoint(package)) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - selector = '//div[@id="actionlist"]/ul/li/span[@class="flagged"]' - target = root.xpath(selector)[0] - assert target.text.strip() == "2 pending requests" - - -def test_package_authenticated(client: TestClient, user: User, package: Package): - """We get the same here for either authenticated or not - authenticated. Form inputs are presented to maintainers. - This process also occurs when pkgbase.html is rendered.""" - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(package_endpoint(package)) - assert resp.status_code == int(HTTPStatus.OK) - - expected = [ - "View PKGBUILD", - "View Changes", - "Download snapshot", - "Search wiki", - "Flag package out-of-date", - "Vote for this package", - "Enable notifications", - "Submit Request", - ] - for expected_text in expected: - assert expected_text in resp.text - - # make sure we don't have these. Only for Maintainer/TUs/Devs - not_expected = [ - "Disown Package", - "View Requests", - "Delete Package", - "Merge Package", - ] - for unexpected_text in not_expected: - assert unexpected_text not in resp.text - - # When no requests are up, make sure we don't see the display for them. - root = parse_root(resp.text) - selector = '//div[@id="actionlist"]/ul/li/span[@class="flagged"]' - target = root.xpath(selector) - assert len(target) == 0 - - -def test_package_authenticated_maintainer( - client: TestClient, maintainer: User, package: Package -): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(package_endpoint(package)) - assert resp.status_code == int(HTTPStatus.OK) - - expected = [ - "View PKGBUILD", - "View Changes", - "Download snapshot", - "Search wiki", - "Flag package out-of-date", - "Vote for this package", - "Enable notifications", - "Manage Co-Maintainers", - "Submit Request", - "Disown Package", - ] - for expected_text in expected: - assert expected_text in resp.text - - # make sure we don't have these. Only for PMs/Devs - not_expected = [ - "1 pending request", - "Delete Package", - "Merge Package", - ] - for unexpected_text in not_expected: - assert unexpected_text not in resp.text - - -def test_package_authenticated_pm( - client: TestClient, pm_user: User, package: Package, pkgreq: PackageRequest -): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(package_endpoint(package)) - assert resp.status_code == int(HTTPStatus.OK) - - expected = [ - "View PKGBUILD", - "View Changes", - "Download snapshot", - "Search wiki", - "Flag package out-of-date", - "Vote for this package", - "Enable notifications", - "Manage Co-Maintainers", - "1 pending request", - "Submit Request", - "Delete Package", - "Merge Package", - "Disown Package", - ] - for expected_text in expected: - assert expected_text in resp.text - - -def test_package_dependencies(client: TestClient, maintainer: User, package: Package): - # Create a normal dependency of type depends. - with db.begin(): - dep_pkg = create_package("test-dep-1", maintainer) - dep = create_package_dep(package, dep_pkg.Name) - - # Also, create a makedepends. - make_dep_pkg = create_package("test-dep-2", maintainer) - make_dep = create_package_dep( - package, make_dep_pkg.Name, dep_type_name="makedepends" - ) - make_dep.DepArch = "x86_64" - - # And... a checkdepends! - check_dep_pkg = create_package("test-dep-3", maintainer) - create_package_dep(package, check_dep_pkg.Name, dep_type_name="checkdepends") - - # Geez. Just stop. This is optdepends. - opt_dep_pkg = create_package("test-dep-4", maintainer) - create_package_dep(package, opt_dep_pkg.Name, dep_type_name="optdepends") - - # Heh. Another optdepends to test one with a description. - opt_desc_dep_pkg = create_package("test-dep-5", maintainer) - opt_desc_dep = create_package_dep( - package, opt_desc_dep_pkg.Name, dep_type_name="optdepends" - ) - opt_desc_dep.DepDesc = "Test description." - - broken_dep = create_package_dep(package, "test-dep-6", dep_type_name="depends") - - # Create an official provider record. - db.create( - OfficialProvider, Name="test-dep-99", Repo="core", Provides="test-dep-99" - ) - create_package_dep(package, "test-dep-99") - - # Also, create a provider who provides our test-dep-99. - provider = create_package("test-provider", maintainer) - create_package_rel(provider, dep.DepName) - - with client as request: - resp = request.get(package_endpoint(package)) - assert resp.status_code == int(HTTPStatus.OK) - - # Let's make sure all the non-broken deps are ordered as we expect. - expected = list( - filter( - lambda e: e.is_package(), - package.package_dependencies.order_by( - PackageDependency.DepTypeID.asc(), PackageDependency.DepName.asc() - ).all(), - ) - ) - root = parse_root(resp.text) - pkgdeps = root.findall('.//ul[@id="pkgdepslist"]/li/a') - for i, expectation in enumerate(expected): - assert pkgdeps[i].text.strip() == expectation.DepName - - # Let's make sure the DepArch was displayed for our target make dep. - arch = root.findall('.//ul[@id="pkgdepslist"]/li')[3] - arch = arch.xpath("./em")[0] - assert arch.text.strip() == "(make, x86_64)" - - # And let's make sure that the broken package was displayed. - broken_node = root.find('.//ul[@id="pkgdepslist"]/li/span') - assert broken_node.text.strip() == broken_dep.DepName - - -def test_packages(client: TestClient, packages: list[Package]): - with client as request: - response = request.get( - "/packages", - params={ - "SeB": "X", # "X" isn't valid, defaults to "nd" - "PP": "1 or 1", - "O": "0 or 0", - }, - ) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - stats = root.xpath('//div[@class="pkglist-stats"]/p')[0] - pager_text = re.sub(r"\s+", " ", stats.text.replace("\n", "").strip()) - assert pager_text == "55 packages found. Page 1 of 2." - - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 50 # Default per-page - - -def test_packages_empty(client: TestClient): - with client as request: - response = request.get("/packages") - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - results = root.xpath('//div[@id="pkglist-results"]/p') - expected = "No packages matched your search criteria." - assert results[0].text.strip() == expected - - -def test_packages_search_by_name(client: TestClient, packages: list[Package]): - with client as request: - response = request.get("/packages", params={"SeB": "n", "K": "pkg_"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 50 # Default per-page - - -def test_packages_search_by_exact_name(client: TestClient, packages: list[Package]): - with client as request: - response = request.get("/packages", params={"SeB": "N", "K": "pkg_"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - - # There is no package named exactly 'pkg_', we get 0 results. - assert len(rows) == 0 - - with client as request: - response = request.get("/packages", params={"SeB": "N", "K": "pkg_1"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - - # There's just one package named 'pkg_1', we get 1 result. - assert len(rows) == 1 - - -def test_packages_search_by_pkgbase(client: TestClient, packages: list[Package]): - with client as request: - response = request.get("/packages", params={"SeB": "b", "K": "pkg_"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 50 - - -def test_packages_search_by_exact_pkgbase(client: TestClient, packages: list[Package]): - with client as request: - response = request.get("/packages", params={"SeB": "B", "K": "pkg_"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 0 - - with client as request: - response = request.get("/packages", params={"SeB": "B", "K": "pkg_1"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - -def test_packages_search_by_keywords(client: TestClient, packages: list[Package]): - # None of our packages have keywords, so this query should return nothing. - with client as request: - response = request.get("/packages", params={"SeB": "k", "K": "testKeyword"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 0 - - # But now, let's create the keyword for the first package. - package = packages[0] - with db.begin(): - db.create( - PackageKeyword, PackageBase=package.PackageBase, Keyword="testKeyword" - ) - - # And request packages with that keyword, we should get 1 result. - with client as request: - # clear fakeredis cache - cache._redis.flushall() - response = request.get("/packages", params={"SeB": "k", "K": "testKeyword"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - # Now let's add another keyword to the same package - with db.begin(): - db.create( - PackageKeyword, PackageBase=package.PackageBase, Keyword="testKeyword2" - ) - - # And request packages with both keywords, we should still get 1 result. - with client as request: - response = request.get( - "/packages", params={"SeB": "k", "K": "testKeyword testKeyword2"} - ) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - -def test_packages_search_by_maintainer( - client: TestClient, maintainer: User, package: Package -): - # We should expect that searching by `package`'s maintainer - # returns `package` in the results. - with client as request: - response = request.get( - "/packages", params={"SeB": "m", "K": maintainer.Username} - ) - assert response.status_code == int(HTTPStatus.OK) - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - # Search again by maintainer with no keywords given. - # This kind of search returns all orphans instead. - # In this first case, there are no orphan packages; assert that. - with client as request: - response = request.get("/packages", params={"SeB": "m"}) - assert response.status_code == int(HTTPStatus.OK) - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 0 - - # Orphan `package`. - with db.begin(): - package.PackageBase.Maintainer = None - - # This time, we should get `package` returned, since it's now an orphan. - with client as request: - # clear fakeredis cache - cache._redis.flushall() - response = request.get("/packages", params={"SeB": "m"}) - assert response.status_code == int(HTTPStatus.OK) - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - -def test_packages_search_by_comaintainer( - client: TestClient, maintainer: User, package: Package -): - # Nobody's a comaintainer yet. - with client as request: - response = request.get( - "/packages", params={"SeB": "c", "K": maintainer.Username} - ) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 0 - - # Now, we create a comaintainer. - with db.begin(): - db.create( - PackageComaintainer, - PackageBase=package.PackageBase, - User=maintainer, - Priority=1, - ) - - # Then test that it's returned by our search. - with client as request: - # clear fakeredis cache - cache._redis.flushall() - response = request.get( - "/packages", params={"SeB": "c", "K": maintainer.Username} - ) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - -def test_packages_search_by_co_or_maintainer( - client: TestClient, maintainer: User, package: Package -): - with client as request: - response = request.get( - "/packages", - params={ - "SeB": "M", - "SB": "BLAH", # Invalid SB; gets reset to default "n". - "K": maintainer.Username, - }, - ) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - with db.begin(): - user = db.create( - User, - Username="comaintainer", - Email="comaintainer@example.org", - Passwd="testPassword", - ) - db.create( - PackageComaintainer, PackageBase=package.PackageBase, User=user, Priority=1 - ) - - with client as request: - response = request.get("/packages", params={"SeB": "M", "K": user.Username}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - -def test_packages_search_by_submitter( - client: TestClient, maintainer: User, package: Package -): - with client as request: - response = request.get( - "/packages", params={"SeB": "s", "K": maintainer.Username} - ) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - -def test_packages_sort_by_name(client: TestClient, packages: list[Package]): - with client as request: - response = request.get( - "/packages", params={"SB": "n", "SO": "a", "PP": "150"} # Name # Ascending - ) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - rows = [row.xpath("./td/a")[0].text.strip() for row in rows] - - with client as request: - response2 = request.get( - "/packages", params={"SB": "n", "SO": "d", "PP": "150"} # Name # Ascending - ) - assert response2.status_code == int(HTTPStatus.OK) - - root = parse_root(response2.text) - rows2 = root.xpath('//table[@class="results"]/tbody/tr') - rows2 = [row.xpath("./td/a")[0].text.strip() for row in rows2] - assert rows == list(reversed(rows2)) - - -def test_packages_sort_by_votes( - client: TestClient, maintainer: User, packages: list[Package] -): - # Set the first package's NumVotes to 1. - with db.begin(): - packages[0].PackageBase.NumVotes = 1 - - # Test that, by default, the first result is what we just set above. - with client as request: - response = request.get("/packages", params={"SB": "v"}) # Votes. - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - votes = rows[0].xpath("./td")[2] # The third column of the first row. - assert votes.text.strip() == "1" - - # Now, test that with an ascending order, the last result is - # the one we set, since the default (above) is descending. - with client as request: - response = request.get( - "/packages", - params={ - "SB": "v", # Votes. - "SO": "a", # Ascending. - "O": "50", # Second page. - }, - ) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - votes = rows[-1].xpath("./td")[2] # The third column of the last row. - assert votes.text.strip() == "1" - - -def test_packages_sort_by_popularity( - client: TestClient, maintainer: User, packages: list[Package] -): - # Set the first package's Popularity to 0.50. - with db.begin(): - packages[0].PackageBase.Popularity = "0.50" - - # Test that, by default, the first result is what we just set above. - with client as request: - response = request.get("/packages", params={"SB": "p"}) # Popularity - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - pop = rows[0].xpath("./td")[3] # The fourth column of the first row. - assert pop.text.strip() == "0.50" - - -def test_packages_sort_by_voted( - client: TestClient, maintainer: User, packages: list[Package] -): - now = time.utcnow() - with db.begin(): - db.create( - PackageVote, - PackageBase=packages[0].PackageBase, - User=maintainer, - VoteTS=now, - ) - - # Test that, by default, the first result is what we just set above. - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get( - "/packages", - params={"SB": "w", "SO": "d"}, # Voted # Descending, Voted first. - ) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - voted = rows[0].xpath("./td")[5] # The sixth column of the first row. - assert voted.text.strip() == "Yes" - - # Conversely, everything else was not voted on. - voted = rows[1].xpath("./td")[5] # The sixth column of the second row. - assert voted.text.strip() == str() # Empty. - - -def test_packages_sort_by_notify( - client: TestClient, maintainer: User, packages: list[Package] -): - db.create(PackageNotification, PackageBase=packages[0].PackageBase, User=maintainer) - - # Test that, by default, the first result is what we just set above. - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - response = request.get( - "/packages", - params={"SB": "o", "SO": "d"}, # Voted # Descending, Voted first. - ) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - notify = rows[0].xpath("./td")[6] # The sixth column of the first row. - assert notify.text.strip() == "Yes" - - # Conversely, everything else was not voted on. - notify = rows[1].xpath("./td")[6] # The sixth column of the second row. - assert notify.text.strip() == str() # Empty. - - -def test_packages_sort_by_maintainer( - client: TestClient, maintainer: User, package: Package -): - """Sort a package search by the maintainer column.""" - - # Create a second package, so the two can be ordered and checked. - with db.begin(): - maintainer2 = db.create( - User, - Username="maintainer2", - Email="maintainer2@example.org", - Passwd="testPassword", - ) - base2 = db.create( - PackageBase, - Name="pkg_2", - Maintainer=maintainer2, - Submitter=maintainer2, - Packager=maintainer2, - ) - db.create(Package, Name="pkg_2", PackageBase=base2) - - # Check the descending order route. - with client as request: - response = request.get("/packages", params={"SB": "m", "SO": "d"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - col = rows[0].xpath("./td")[5].xpath("./a")[0] # Last column. - - assert col.text.strip() == maintainer.Username - - # On the other hand, with ascending, we should get reverse ordering. - with client as request: - response = request.get("/packages", params={"SB": "m", "SO": "a"}) - assert response.status_code == int(HTTPStatus.OK) - - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - col = rows[0].xpath("./td")[5].xpath("./a")[0] # Last column. - - assert col.text.strip() == maintainer2.Username - - -def test_packages_sort_by_last_modified(client: TestClient, packages: list[Package]): - now = time.utcnow() - # Set the first package's ModifiedTS to be 1000 seconds before now. - package = packages[0] - with db.begin(): - package.PackageBase.ModifiedTS = now - 1000 - - with client as request: - response = request.get( - "/packages", - params={"SB": "l", "SO": "a"}, # Ascending; oldest modification first. - ) - assert response.status_code == int(HTTPStatus.OK) - - # We should have 50 (default per page) results. - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 50 - - # Let's assert that the first item returned was the one we modified above. - row = rows[0] - col = row.xpath("./td")[0].xpath("./a")[0] - assert col.text.strip() == package.Name - - # Make sure our row contains the modified date we've set - tz = config.get("options", "default_timezone") - dt = datetime_display({"timezone": tz}, package.PackageBase.ModifiedTS) - assert dt in "".join(row.itertext()) - - -def test_packages_flagged( - client: TestClient, maintainer: User, packages: list[Package] -): - package = packages[0] - - now = time.utcnow() - - with db.begin(): - package.PackageBase.OutOfDateTS = now - package.PackageBase.Flagger = maintainer - - with client as request: - response = request.get("/packages", params={"outdated": "on"}) - assert response.status_code == int(HTTPStatus.OK) - - # We should only get one result from this query; the package we flagged. - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - with client as request: - response = request.get("/packages", params={"outdated": "off"}) - assert response.status_code == int(HTTPStatus.OK) - - # In this case, we should get 54 results, which means that the first - # page will have 50 results (55 packages - 1 outdated = 54 not outdated). - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 50 - - -def test_packages_orphans(client: TestClient, packages: list[Package]): - package = packages[0] - with db.begin(): - package.PackageBase.Maintainer = None - - with client as request: - response = request.get("/packages", params={"submit": "Orphans"}) - assert response.status_code == int(HTTPStatus.OK) - - # We only have one orphan. Let's make sure that's what is returned. - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - -def test_packages_per_page(client: TestClient, maintainer: User): - """Test the ability for /packages to deal with the PP query - argument specifications (50, 100, 250; default: 50).""" - with db.begin(): - for i in range(255): - base = db.create( - PackageBase, - Name=f"pkg_{i}", - Maintainer=maintainer, - Submitter=maintainer, - Packager=maintainer, - ) - db.create(Package, PackageBase=base, Name=base.Name) - - # Test default case, PP of 50. - with client as request: - response = request.get("/packages", params={"PP": 50}) - assert response.status_code == int(HTTPStatus.OK) - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 50 - - # Alright, test the next case, PP of 100. - with client as request: - response = request.get("/packages", params={"PP": 100}) - assert response.status_code == int(HTTPStatus.OK) - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 100 - - # And finally, the last case, a PP of 250. - with client as request: - response = request.get("/packages", params={"PP": 250}) - assert response.status_code == int(HTTPStatus.OK) - root = parse_root(response.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 250 - - -def test_packages_post_unknown_action(client: TestClient, user: User, package: Package): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "unknown"}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - -def test_packages_post_error(client: TestClient, user: User, package: Package): - async def stub_action(request: Request, **kwargs): - return False, ["Some error."] - - actions = {"stub": stub_action} - with mock.patch.dict("aurweb.routers.packages.PACKAGE_ACTIONS", actions): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "stub"}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - errors = get_errors(resp.text) - expected = "Some error." - assert errors[0].text.strip() == expected - - -def test_packages_post(client: TestClient, user: User, package: Package): - async def stub_action(request: Request, **kwargs): - return True, ["Some success."] - - actions = {"stub": stub_action} - with mock.patch.dict("aurweb.routers.packages.PACKAGE_ACTIONS", actions): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "stub"}, - ) - assert resp.status_code == int(HTTPStatus.OK) - - errors = get_successes(resp.text) - expected = "Some success." - assert errors[0].text.strip() == expected - - -def test_packages_post_unflag( - client: TestClient, user: User, maintainer: User, package: Package -): - # Flag `package` as `user`. - now = time.utcnow() - with db.begin(): - package.PackageBase.Flagger = user - package.PackageBase.OutOfDateTS = now - - cookies = {"AURSID": user.login(Request(), "testPassword")} - - # Don't supply any packages. - post_data = {"action": "unflag", "IDs": []} - with client as request: - request.cookies = cookies - resp = request.post("/packages", data=post_data) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "You did not select any packages to unflag." - assert errors[0].text.strip() == expected - - # Unflag the package as `user`. - post_data = {"action": "unflag", "IDs": [package.ID]} - with client as request: - request.cookies = cookies - resp = request.post("/packages", data=post_data) - assert resp.status_code == int(HTTPStatus.OK) - assert package.PackageBase.Flagger is None - successes = get_successes(resp.text) - expected = "The selected packages have been unflagged." - assert successes[0].text.strip() == expected - - # Re-flag `package` as `user`. - now = time.utcnow() - with db.begin(): - package.PackageBase.Flagger = user - package.PackageBase.OutOfDateTS = now - - # Try to unflag the package as `maintainer`, which is not allowed. - maint_cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - post_data = {"action": "unflag", "IDs": [package.ID]} - with client as request: - request.cookies = maint_cookies - resp = request.post("/packages", data=post_data) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "You did not select any packages to unflag." - assert errors[0].text.strip() == expected - - -def test_packages_post_notify(client: TestClient, user: User, package: Package): - notif = package.PackageBase.notifications.filter( - PackageNotification.UserID == user.ID - ).first() - assert notif is None - - # Try to enable notifications but supply no packages, causing - # an error to be rendered. - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post("/packages", data={"action": "notify"}) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "You did not select any packages to be notified about." - assert errors[0].text.strip() == expected - - # Now let's actually enable notifications on `package`. - with client as request: - request.cookies = cookies - resp = request.post("/packages", data={"action": "notify", "IDs": [package.ID]}) - assert resp.status_code == int(HTTPStatus.OK) - expected = "The selected packages' notifications have been enabled." - successes = get_successes(resp.text) - assert successes[0].text.strip() == expected - - # Try to enable notifications when they're already enabled, - # causing an error to be rendered. - with client as request: - request.cookies = cookies - resp = request.post("/packages", data={"action": "notify", "IDs": [package.ID]}) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "You did not select any packages to be notified about." - assert errors[0].text.strip() == expected - - -def test_packages_post_unnotify(client: TestClient, user: User, package: Package): - # Create a notification record. - with db.begin(): - notif = db.create( - PackageNotification, PackageBase=package.PackageBase, User=user - ) - assert notif is not None - - # Request removal of the notification without any IDs. - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post("/packages", data={"action": "unnotify"}) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "You did not select any packages for notification removal." - assert errors[0].text.strip() == expected - - # Request removal of the notification; really. - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "unnotify", "IDs": [package.ID]}, - ) - assert resp.status_code == int(HTTPStatus.OK) - successes = get_successes(resp.text) - expected = "The selected packages' notifications have been removed." - assert successes[0].text.strip() == expected - - # Let's ensure the record got removed. - notif = package.PackageBase.notifications.filter( - PackageNotification.UserID == user.ID - ).first() - assert notif is None - - # Try it again. The notif no longer exists. - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "unnotify", "IDs": [package.ID]}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "A package you selected does not have notifications enabled." - assert errors[0].text.strip() == expected - - -def test_packages_post_adopt(client: TestClient, user: User, package: Package): - # Try to adopt an empty list of packages. - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post("/packages", data={"action": "adopt"}) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "You did not select any packages to adopt." - assert errors[0].text.strip() == expected - - # Now, let's try to adopt a package that's already maintained. - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "adopt", "IDs": [package.ID], "confirm": True}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "You are not allowed to adopt one of the packages you selected." - assert errors[0].text.strip() == expected - - # Remove the maintainer from the DB. - with db.begin(): - package.PackageBase.Maintainer = None - assert package.PackageBase.Maintainer is None - - # Now, let's try to adopt without confirming. - with client as request: - request.cookies = cookies - resp = request.post("/packages", data={"action": "adopt", "IDs": [package.ID]}) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = ( - "The selected packages have not been adopted, " - "check the confirmation checkbox." - ) - assert errors[0].text.strip() == expected - - # Let's do it again now that there is no maintainer. - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "adopt", "IDs": [package.ID], "confirm": True}, - ) - assert resp.status_code == int(HTTPStatus.OK) - successes = get_successes(resp.text) - expected = "The selected packages have been adopted." - assert successes[0].text.strip() == expected - - -def test_packages_post_disown_as_maintainer( - client: TestClient, user: User, maintainer: User, package: Package -): - """Disown packages as a maintainer.""" - # Initially prove that we have a maintainer. - assert package.PackageBase.Maintainer is not None - assert package.PackageBase.Maintainer == maintainer - - # Try to run the disown action with no IDs; get an error. - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post("/packages", data={"action": "disown"}) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "You did not select any packages to disown." - assert errors[0].text.strip() == expected - assert package.PackageBase.Maintainer is not None - - # Try to disown `package` without giving the confirm argument. - with client as request: - request.cookies = cookies - resp = request.post("/packages", data={"action": "disown", "IDs": [package.ID]}) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - assert package.PackageBase.Maintainer is not None - errors = get_errors(resp.text) - expected = ( - "The selected packages have not been disowned, " - "check the confirmation checkbox." - ) - assert errors[0].text.strip() == expected - - # Now, try to disown `package` without credentials (as `user`). - user_cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = user_cookies - resp = request.post( - "/packages", - data={"action": "disown", "IDs": [package.ID], "confirm": True}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - assert package.PackageBase.Maintainer is not None - errors = get_errors(resp.text) - expected = "You are not allowed to disown one of the packages you selected." - assert errors[0].text.strip() == expected - - # Now, let's really disown `package` as `maintainer`. - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "disown", "IDs": [package.ID], "confirm": True}, - ) - - assert package.PackageBase.Maintainer is None - successes = get_successes(resp.text) - expected = "The selected packages have been disowned." - assert successes[0].text.strip() == expected - - -def test_packages_post_disown( - client: TestClient, pm_user: User, maintainer: User, package: Package -): - """Disown packages as a Package Maintainer, which cannot bypass idle time.""" - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "disown", "IDs": [package.ID], "confirm": True}, - ) - - errors = get_errors(resp.text) - expected = r"^No due existing orphan requests to accept for .+\.$" - assert re.match(expected, errors[0].text.strip()) - - -def test_packages_post_delete( - caplog: pytest.fixture, - client: TestClient, - user: User, - pm_user: User, - package: Package, -): - # First, let's try to use the delete action with no packages IDs. - user_cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = user_cookies - resp = request.post("/packages", data={"action": "delete"}) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "You did not select any packages to delete." - assert errors[0].text.strip() == expected - - # Now, let's try to delete real packages without supplying "confirm". - with client as request: - request.cookies = user_cookies - resp = request.post( - "/packages", - data={"action": "delete", "IDs": [package.ID]}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = ( - "The selected packages have not been deleted, " - "check the confirmation checkbox." - ) - assert errors[0].text.strip() == expected - - # And again, with everything, but `user` doesn't have permissions. - with client as request: - request.cookies = user_cookies - resp = request.post( - "/packages", - data={"action": "delete", "IDs": [package.ID], "confirm": True}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "You do not have permission to delete packages." - assert errors[0].text.strip() == expected - - # Now, let's switch over to making the requests as a PM. - # However, this next request will be rejected due to supplying - # an invalid package ID. - pm_cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = pm_cookies - resp = request.post( - "/packages", - data={"action": "delete", "IDs": [0], "confirm": True}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "One of the packages you selected does not exist." - assert errors[0].text.strip() == expected - - # Whoo. Now, let's finally make a valid request as `pm_user` - # to delete `package`. - with client as request: - request.cookies = pm_cookies - resp = request.post( - "/packages", - data={"action": "delete", "IDs": [package.ID], "confirm": True}, - ) - assert resp.status_code == int(HTTPStatus.OK) - successes = get_successes(resp.text) - expected = "The selected packages have been deleted." - assert successes[0].text.strip() == expected - - # Expect that the package deletion was logged. - pkgbases = [package.PackageBase.Name] - expected = ( - f"Privileged user '{pm_user.Username}' deleted the " - f"following package bases: {str(pkgbases)}." - ) - assert expected in caplog.text - - -def test_account_comments_unauthorized(client: TestClient, user: User): - """This test may seem out of place, but it requires packages, - so its being included in the packages routes test suite to - leverage existing fixtures.""" - endpoint = f"/account/{user.Username}/comments" - with client as request: - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location").startswith("/login") - - -def test_account_comments(client: TestClient, user: User, package: Package): - """This test may seem out of place, but it requires packages, - so its being included in the packages routes test suite to - leverage existing fixtures.""" - now = time.utcnow() - with db.begin(): - # This comment's CommentTS is `now + 1`, so it is found in rendered - # HTML before the rendered_comment, which has a CommentTS of `now`. - comment = db.create( - PackageComment, - PackageBase=package.PackageBase, - User=user, - Comments="Test comment", - CommentTS=now + 1, - ) - rendered_comment = db.create( - PackageComment, - PackageBase=package.PackageBase, - User=user, - Comments="Test comment", - RenderedComment="

Test comment

", - CommentTS=now, - ) - - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/account/{user.Username}/comments" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - comments = root.xpath('//div[@class="article-content"]/div') - - # Assert that we got Comments rendered from the first comment. - assert comments[0].text.strip() == comment.Comments - - # And from the second, we have rendered content. - rendered = comments[1].xpath("./p") - expected = rendered_comment.RenderedComment.replace("

", "").replace("

", "") - assert rendered[0].text.strip() == expected diff --git a/test/test_packages_util.py b/test/test_packages_util.py deleted file mode 100644 index 649e7a99..00000000 --- a/test/test_packages_util.py +++ /dev/null @@ -1,197 +0,0 @@ -import pytest -from fastapi.testclient import TestClient - -from aurweb import asgi, config, db, time -from aurweb.aur_redis import kill_redis -from aurweb.models.account_type import USER_ID -from aurweb.models.dependency_type import DEPENDS_ID -from aurweb.models.official_provider import OFFICIAL_BASE, OfficialProvider -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_dependency import PackageDependency -from aurweb.models.package_notification import PackageNotification -from aurweb.models.package_relation import PackageRelation -from aurweb.models.package_source import PackageSource -from aurweb.models.package_vote import PackageVote -from aurweb.models.relation_type import PROVIDES_ID -from aurweb.models.user import User -from aurweb.packages import util - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def maintainer() -> User: - with db.begin(): - maintainer = db.create( - User, - Username="test_maintainer", - Email="test_maintainer@examepl.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield maintainer - - -@pytest.fixture -def package(maintainer: User) -> Package: - with db.begin(): - pkgbase = db.create( - PackageBase, Name="test-pkg", Packager=maintainer, Maintainer=maintainer - ) - package = db.create(Package, Name=pkgbase.Name, PackageBase=pkgbase) - yield package - - -@pytest.fixture -def client() -> TestClient: - yield TestClient(app=asgi.app) - - -def test_package_link(client: TestClient, package: Package): - expected = f"/packages/{package.Name}" - assert util.package_link(package) == expected - - -def test_official_package_link(client: TestClient, package: Package): - with db.begin(): - provider = db.create( - OfficialProvider, Name=package.Name, Repo="core", Provides=package.Name - ) - expected = f"{OFFICIAL_BASE}/packages/?q={package.Name}" - assert util.package_link(provider) == expected - - -def test_updated_packages(maintainer: User, package: Package): - expected = { - "Name": package.Name, - "Version": package.Version, - "PackageBase": {"ModifiedTS": package.PackageBase.ModifiedTS}, - } - - kill_redis() # Kill it here to ensure we're on a fake instance. - assert util.updated_packages(1, 0) == [expected] - assert util.updated_packages(1, 600) == [expected] - kill_redis() # Kill it again, in case other tests use a real instance. - - -def test_query_voted(maintainer: User, package: Package): - now = time.utcnow() - with db.begin(): - db.create( - PackageVote, User=maintainer, VoteTS=now, PackageBase=package.PackageBase - ) - - query = db.query(Package).filter(Package.ID == package.ID).all() - query_voted = util.query_voted(query, maintainer) - assert query_voted[package.PackageBase.ID] - - -def test_query_notified(maintainer: User, package: Package): - with db.begin(): - db.create(PackageNotification, User=maintainer, PackageBase=package.PackageBase) - - query = db.query(Package).filter(Package.ID == package.ID).all() - query_notified = util.query_notified(query, maintainer) - assert query_notified[package.PackageBase.ID] - - -def test_source_uri_file(package: Package): - FILE = "test_file" - - with db.begin(): - pkgsrc = db.create( - PackageSource, Source=FILE, Package=package, SourceArch="x86_64" - ) - source_file_uri = config.get("options", "source_file_uri") - file, uri = util.source_uri(pkgsrc) - expected = source_file_uri % (pkgsrc.Source, package.PackageBase.Name) - assert (file, uri) == (FILE, expected) - - # test URL encoding - pkgsrc.Package.PackageBase.Name = "test++" - file, uri = util.source_uri(pkgsrc) - expected = source_file_uri % (pkgsrc.Source, "test%2B%2B") - assert uri == expected - - -def test_source_uri_named_uri(package: Package): - FILE = "test" - URL = "https://test.xyz" - - with db.begin(): - pkgsrc = db.create( - PackageSource, Source=f"{FILE}::{URL}", Package=package, SourceArch="x86_64" - ) - file, uri = util.source_uri(pkgsrc) - assert (file, uri) == (FILE, URL) - - -def test_source_uri_unnamed_uri(package: Package): - URL = "https://test.xyz" - - with db.begin(): - pkgsrc = db.create( - PackageSource, Source=f"{URL}", Package=package, SourceArch="x86_64" - ) - file, uri = util.source_uri(pkgsrc) - assert (file, uri) == (URL, URL) - - -def test_pkg_required(package: Package): - with db.begin(): - db.create( - PackageDependency, - Package=package, - DepName="test", - DepTypeID=DEPENDS_ID, - ) - - # We want to make sure "Package" data is included - # to avoid lazy-loading the information for each dependency - qry = util.pkg_required("test", list()) - assert "Packages_ID" in str(qry) - - # We should have 1 record - assert qry.count() == 1 - - -def test_provides_markup(package: Package): - # Create dependency and provider for AUR pkg - with db.begin(): - dep = db.create( - PackageDependency, - Package=package, - DepName="test", - DepTypeID=DEPENDS_ID, - ) - rel_pkg = db.create(Package, PackageBase=package.PackageBase, Name=dep.DepName) - db.create( - PackageRelation, - Package=rel_pkg, - RelName=dep.DepName, - RelTypeID=PROVIDES_ID, - ) - - # AUR provider links should end with AUR - link = util.provides_markup(dep.provides()) - assert link.endswith("AUR") - assert OFFICIAL_BASE not in link - - # Remove AUR provider and add official one - with db.begin(): - db.delete(rel_pkg) - db.create( - OfficialProvider, - Name="official-pkg", - Repo="extra", - Provides=dep.DepName, - ) - - # Repo provider links should not have any suffix - link = util.provides_markup(dep.provides()) - assert link.endswith("") - assert OFFICIAL_BASE in link diff --git a/test/test_pkgbase_routes.py b/test/test_pkgbase_routes.py deleted file mode 100644 index 522bb68b..00000000 --- a/test/test_pkgbase_routes.py +++ /dev/null @@ -1,1843 +0,0 @@ -import re -from http import HTTPStatus -from unittest import mock - -import pytest -from fastapi.testclient import TestClient -from sqlalchemy import and_ - -from aurweb import asgi, config, db, time -from aurweb.models.account_type import USER_ID, AccountType -from aurweb.models.dependency_type import DependencyType -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_comaintainer import PackageComaintainer -from aurweb.models.package_comment import PackageComment -from aurweb.models.package_dependency import PackageDependency -from aurweb.models.package_notification import PackageNotification -from aurweb.models.package_relation import PackageRelation -from aurweb.models.package_request import ACCEPTED_ID, PackageRequest -from aurweb.models.package_vote import PackageVote -from aurweb.models.relation_type import PROVIDES_ID, RelationType -from aurweb.models.request_type import DELETION_ID, MERGE_ID, RequestType -from aurweb.models.user import User -from aurweb.testing.email import Email -from aurweb.testing.html import get_errors, get_successes, parse_root -from aurweb.testing.requests import Request - -max_chars_comment = config.getint("options", "max_chars_comment", 5000) - - -def package_endpoint(package: Package) -> str: - return f"/packages/{package.Name}" - - -def create_package(pkgname: str, maintainer: User) -> Package: - pkgbase = db.create(PackageBase, Name=pkgname, Maintainer=maintainer) - return db.create(Package, Name=pkgbase.Name, PackageBase=pkgbase) - - -def create_package_dep( - package: Package, depname: str, dep_type_name: str = "depends" -) -> PackageDependency: - dep_type = db.query(DependencyType, DependencyType.Name == dep_type_name).first() - return db.create( - PackageDependency, DependencyType=dep_type, Package=package, DepName=depname - ) - - -def create_package_rel(package: Package, relname: str) -> PackageRelation: - rel_type = db.query(RelationType, RelationType.ID == PROVIDES_ID).first() - return db.create( - PackageRelation, RelationType=rel_type, Package=package, RelName=relname - ) - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def client() -> TestClient: - """Yield a FastAPI TestClient.""" - client = TestClient(app=asgi.app) - - # disable redirects for our tests - client.follow_redirects = False - yield client - - -def create_user(username: str) -> User: - with db.begin(): - user = db.create( - User, - Username=username, - Email=f"{username}@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - return user - - -@pytest.fixture -def user() -> User: - """Yield a user.""" - user = create_user("test") - yield user - - -@pytest.fixture -def maintainer() -> User: - """Yield a specific User used to maintain packages.""" - account_type = db.query(AccountType, AccountType.ID == USER_ID).first() - with db.begin(): - maintainer = db.create( - User, - Username="test_maintainer", - Email="test_maintainer@example.org", - Passwd="testPassword", - AccountType=account_type, - ) - yield maintainer - - -@pytest.fixture -def comaintainer() -> User: - """Yield a specific User used to maintain packages.""" - account_type = db.query(AccountType, AccountType.ID == USER_ID).first() - with db.begin(): - comaintainer = db.create( - User, - Username="test_comaintainer", - Email="test_comaintainer@example.org", - Passwd="testPassword", - AccountType=account_type, - ) - yield comaintainer - - -@pytest.fixture -def pm_user(): - pm_type = db.query( - AccountType, AccountType.AccountType == "Package Maintainer" - ).first() - with db.begin(): - pm_user = db.create( - User, - Username="test_pm", - Email="test_pm@example.org", - RealName="Test PM", - Passwd="testPassword", - AccountType=pm_type, - ) - yield pm_user - - -@pytest.fixture -def package(maintainer: User) -> Package: - """Yield a Package created by user.""" - now = time.utcnow() - with db.begin(): - pkgbase = db.create( - PackageBase, - Name="test-package", - Maintainer=maintainer, - Packager=maintainer, - Submitter=maintainer, - ModifiedTS=now, - ) - package = db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - yield package - - -@pytest.fixture -def pkgbase(package: Package) -> PackageBase: - yield package.PackageBase - - -@pytest.fixture -def target(maintainer: User) -> PackageBase: - """Merge target.""" - now = time.utcnow() - with db.begin(): - pkgbase = db.create( - PackageBase, - Name="target-package", - Maintainer=maintainer, - Packager=maintainer, - Submitter=maintainer, - ModifiedTS=now, - ) - db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - yield pkgbase - - -@pytest.fixture -def pkgreq(user: User, pkgbase: PackageBase) -> PackageRequest: - """Yield a PackageRequest related to `pkgbase`.""" - with db.begin(): - pkgreq = db.create( - PackageRequest, - ReqTypeID=DELETION_ID, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - Comments=f"Deletion request for {pkgbase.Name}", - ClosureComment=str(), - ) - yield pkgreq - - -@pytest.fixture -def comment(user: User, package: Package) -> PackageComment: - pkgbase = package.PackageBase - now = time.utcnow() - with db.begin(): - comment = db.create( - PackageComment, - User=user, - PackageBase=pkgbase, - Comments="Test comment.", - RenderedComment=str(), - CommentTS=now, - ) - yield comment - - -@pytest.fixture -def packages(maintainer: User) -> list[Package]: - """Yield 55 packages named pkg_0 .. pkg_54.""" - packages_ = [] - now = time.utcnow() - with db.begin(): - for i in range(55): - pkgbase = db.create( - PackageBase, - Name=f"pkg_{i}", - Maintainer=maintainer, - Packager=maintainer, - Submitter=maintainer, - ModifiedTS=now, - ) - package = db.create(Package, PackageBase=pkgbase, Name=f"pkg_{i}") - packages_.append(package) - - yield packages_ - - -@pytest.fixture -def requests(user: User, packages: list[Package]) -> list[PackageRequest]: - pkgreqs = [] - deletion_type = db.query(RequestType).filter(RequestType.ID == DELETION_ID).first() - with db.begin(): - for i in range(55): - pkgreq = db.create( - PackageRequest, - RequestType=deletion_type, - User=user, - PackageBase=packages[i].PackageBase, - PackageBaseName=packages[i].Name, - Comments=f"Deletion request for pkg_{i}", - ClosureComment=str(), - ) - pkgreqs.append(pkgreq) - yield pkgreqs - - -def test_pkgbase_not_found(client: TestClient): - with client as request: - resp = request.get("/pkgbase/not_found") - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pkgbase_redirect(client: TestClient, package: Package): - with client as request: - resp = request.get(f"/pkgbase/{package.Name}") - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/packages/{package.Name}" - - -def test_pkgbase(client: TestClient, package: Package): - with db.begin(): - second = db.create(Package, Name="second-pkg", PackageBase=package.PackageBase) - - expected = [package.Name, second.Name] - with client as request: - resp = request.get(f"/pkgbase/{package.Name}") - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - - # Check the details box title. - title = root.find('.//div[@id="pkgdetails"]/h2') - title, pkgname = title.text.split(": ") - assert title == "Package Base Details" - assert pkgname == package.Name - - pkgs = root.findall('.//div[@id="pkgs"]/ul/li/a') - for i, name in enumerate(expected): - assert pkgs[i].text.strip() == name - - -def test_pkgbase_maintainer( - client: TestClient, user: User, maintainer: User, package: Package -): - """ - Test that the Maintainer field is beind displayed correctly. - - Co-maintainers are displayed, if they exist, within a parens after - the maintainer. - """ - with db.begin(): - db.create( - PackageComaintainer, User=user, PackageBase=package.PackageBase, Priority=1 - ) - - with client as request: - resp = request.get(f"/pkgbase/{package.Name}", follow_redirects=True) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - - maint = root.xpath('//table[@id="pkginfo"]/tr[@class="pkgmaint"]/td')[0] - maint, comaint = maint.text.strip().split() - assert maint == maintainer.Username - assert comaint == f"({user.Username})" - - -def test_pkgbase_voters(client: TestClient, pm_user: User, package: Package): - pkgbase = package.PackageBase - endpoint = f"/pkgbase/{pkgbase.Name}/voters" - - now = time.utcnow() - with db.begin(): - db.create(PackageVote, User=pm_user, PackageBase=pkgbase, VoteTS=now) - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - # We should've gotten one link to the voter, pm_user. - root = parse_root(resp.text) - rows = root.xpath('//div[@class="box"]//ul/li/a') - assert len(rows) == 1 - assert rows[0].text.strip() == pm_user.Username - - -def test_pkgbase_voters_unauthorized(client: TestClient, user: User, package: Package): - pkgbase = package.PackageBase - endpoint = f"/pkgbase/{pkgbase.Name}/voters" - - now = time.utcnow() - with db.begin(): - db.create(PackageVote, User=user, PackageBase=pkgbase, VoteTS=now) - - with client as request: - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - -def test_pkgbase_comment_not_found( - client: TestClient, maintainer: User, package: Package -): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - comment_id = 12345 # A non-existing comment. - endpoint = f"/pkgbase/{package.PackageBase.Name}/comments/{comment_id}" - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data={"comment": "Failure"}) - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pkgbase_comment_form_unauthorized( - client: TestClient, user: User, maintainer: User, package: Package -): - now = time.utcnow() - with db.begin(): - comment = db.create( - PackageComment, - PackageBase=package.PackageBase, - User=maintainer, - Comments="Test", - RenderedComment=str(), - CommentTS=now, - ) - - cookies = {"AURSID": user.login(Request(), "testPassword")} - pkgbasename = package.PackageBase.Name - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment.ID}/form" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.UNAUTHORIZED) - - -def test_pkgbase_comment_form_not_found( - client: TestClient, maintainer: User, package: Package -): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - comment_id = 12345 # A non-existing comment. - pkgbasename = package.PackageBase.Name - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment_id}/form" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pkgbase_comments_missing_comment( - client: TestClient, maintainer: User, package: Package -): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{package.PackageBase.Name}/comments" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - -def test_pkgbase_comments( - client: TestClient, maintainer: User, user: User, package: Package -): - """This test includes tests against the following routes: - - GET /pkgbase/{name} (to check notification checkbox) - - POST /pkgbase/{name}/comments - - GET /pkgbase/{name} (to check comments) - - Tested against a comment created with the POST route - - GET /pkgbase/{name}/comments/{id}/form - - Tested against a comment created with the POST route - """ - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - pkgbasename = package.PackageBase.Name - - endpoint = f"/pkgbase/{pkgbasename}" - with client as request: - request.cookies = cookies - resp = request.get( - endpoint, - follow_redirects=True, - ) - assert resp.status_code == int(HTTPStatus.OK) - - # Make sure we got our checkbox for enabling notifications - root = parse_root(resp.text) - input = root.find('//input[@id="id_enable_notifications"]') - assert input is not None - - # create notification - with db.begin(): - user.CommentNotify = 1 - db.create(PackageNotification, PackageBase=package.PackageBase, User=user) - - # post a comment - endpoint = f"/pkgbase/{pkgbasename}/comments" - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"comment": "Test comment.", "enable_notifications": True}, - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # user should've gotten a CommentNotification email. - assert Email.count() == 1 - - expected_prefix = f"/pkgbase/{pkgbasename}" - prefix_len = len(expected_prefix) - assert resp.headers.get("location")[:prefix_len] == expected_prefix - - with client as request: - resp = request.get(resp.headers.get("location"), follow_redirects=True) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - headers = root.xpath('//h4[@class="comment-header"]') - bodies = root.xpath('//div[@class="article-content"]/div/p') - - assert len(headers) == 1 - assert len(bodies) == 1 - - assert bodies[0].text.strip() == "Test comment." - comment_id = headers[0].attrib["id"].split("-")[-1] - - # Since we've enabled notifications already, - # there should be no checkbox on our page - input = root.find('//input[@id="id_enable_notifications"]') - assert input is None - - # Test the non-javascript version of comment editing by - # visiting the /pkgbase/{name}/comments/{id}/edit route. - with client as request: - request.cookies = cookies - resp = request.get(f"{endpoint}/{comment_id}/edit") - assert resp.status_code == int(HTTPStatus.OK) - - # Clear up the PackageNotification. This doubles as testing - # that the notification was created and clears it up so we can - # test enabling it during edit. - pkgbase = package.PackageBase - db_notif = pkgbase.notifications.filter( - PackageNotification.UserID == maintainer.ID - ).first() - with db.begin(): - db.delete(db_notif) - - # Now, let's edit the comment we just created. - comment_id = int(headers[0].attrib["id"].split("-")[-1]) - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment_id}" - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"comment": "Edited comment.", "enable_notifications": True}, - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - with client as request: - resp = request.get(resp.headers.get("location"), follow_redirects=True) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - headers = root.xpath('//h4[@class="comment-header"]') - bodies = root.xpath('//div[@class="article-content"]/div/p') - - assert len(headers) == 1 - assert len(bodies) == 1 - - assert bodies[0].text.strip() == "Edited comment." - - # Ensure that a notification was created. - db_notif = pkgbase.notifications.filter( - PackageNotification.UserID == maintainer.ID - ).first() - assert db_notif is not None - - # Now, let's edit again, but cancel. - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment_id}" - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"comment": "Edited comment with cancel.", "cancel": True}, - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - with client as request: - resp = request.get(resp.headers.get("location"), follow_redirects=True) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - bodies = root.xpath('//div[@class="article-content"]/div/p') - - # Make sure our comment was NOT changed - assert bodies[0].text.strip() == "Edited comment." - - # Delete notification for next test. - with db.begin(): - db.delete(db_notif) - - # Let's edit the comment again; This time we don't change the text. - # However we do enable notifications. - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"comment": "Edited comment.", "enable_notifications": True}, - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Ensure that a notification was created. - db_notif = pkgbase.notifications.filter( - PackageNotification.UserID == maintainer.ID - ).first() - assert db_notif is not None - - # Don't supply a comment; should return BAD_REQUEST. - with client as request: - request.cookies = cookies - fail_resp = request.post(endpoint) - assert fail_resp.status_code == int(HTTPStatus.BAD_REQUEST) - - # Now, test the form route, which should return form markup - # via JSON. - endpoint = f"{endpoint}/form" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - data = resp.json() - assert "form" in data - - -def test_pkgbase_comment_exceed_character_limit( - client: TestClient, - user: User, - package: Package, - comment: PackageComment, -): - # Post new comment - cookies = {"AURSID": user.login(Request(), "testPassword")} - pkgbasename = package.PackageBase.Name - endpoint = f"/pkgbase/{pkgbasename}/comments" - - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"comment": "x" * (max_chars_comment + 1)}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - assert "Maximum number of characters for comment exceeded." in resp.text - # Edit existing - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - endp = f"/pkgbase/{pkgbasename}/comments/{comment.ID}" - response = request.post( - endp, - data={"comment": "x" * (max_chars_comment + 1)}, - ) - assert response.status_code == HTTPStatus.BAD_REQUEST - assert "Maximum number of characters for comment exceeded." in resp.text - - -def test_pkgbase_comment_edit_unauthorized( - client: TestClient, - user: User, - maintainer: User, - package: Package, - comment: PackageComment, -): - pkgbase = package.PackageBase - - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - endp = f"/pkgbase/{pkgbase.Name}/comments/{comment.ID}" - response = request.post( - endp, - data={"comment": "abcd im trying to change this comment."}, - ) - assert response.status_code == HTTPStatus.UNAUTHORIZED - - -def test_pkgbase_comment_delete( - client: TestClient, - maintainer: User, - user: User, - package: Package, - comment: PackageComment, -): - # Test the unauthorized case of comment deletion. - cookies = {"AURSID": user.login(Request(), "testPassword")} - pkgbasename = package.PackageBase.Name - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment.ID}/delete" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - expected = f"/pkgbase/{pkgbasename}" - assert resp.headers.get("location") == expected - - # Test the unauthorized case of comment undeletion. - maint_cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment.ID}/undelete" - with client as request: - request.cookies = maint_cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.UNAUTHORIZED) - - # And move on to undeleting it. - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - -def test_pkgbase_comment_delete_unauthorized( - client: TestClient, maintainer: User, package: Package, comment: PackageComment -): - # Test the unauthorized case of comment deletion. - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - pkgbasename = package.PackageBase.Name - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment.ID}/delete" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.UNAUTHORIZED) - - -def test_pkgbase_comment_delete_not_found( - client: TestClient, maintainer: User, package: Package -): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - comment_id = 12345 # Non-existing comment. - pkgbasename = package.PackageBase.Name - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment_id}/delete" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pkgbase_comment_undelete_not_found( - client: TestClient, maintainer: User, package: Package -): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - comment_id = 12345 # Non-existing comment. - pkgbasename = package.PackageBase.Name - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment_id}/undelete" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pkgbase_comment_pin_as_co( - client: TestClient, package: Package, comment: PackageComment -): - comaint = create_user("comaint1") - - with db.begin(): - db.create( - PackageComaintainer, - PackageBase=package.PackageBase, - User=comaint, - Priority=1, - ) - - # Pin the comment. - pkgbasename = package.PackageBase.Name - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment.ID}/pin" - cookies = {"AURSID": comaint.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Assert that PinnedTS got set. - assert comment.PinnedTS > 0 - - # Unpin the comment we just pinned. - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment.ID}/unpin" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Let's assert that PinnedTS was unset. - assert comment.PinnedTS == 0 - - -def test_pkgbase_comment_pin( - client: TestClient, maintainer: User, package: Package, comment: PackageComment -): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - comment_id = comment.ID - pkgbasename = package.PackageBase.Name - - # Pin the comment. - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment_id}/pin" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Assert that PinnedTS got set. - assert comment.PinnedTS > 0 - - # Unpin the comment we just pinned. - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment_id}/unpin" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Let's assert that PinnedTS was unset. - assert comment.PinnedTS == 0 - - -def test_pkgbase_comment_pin_unauthorized( - client: TestClient, user: User, package: Package, comment: PackageComment -): - cookies = {"AURSID": user.login(Request(), "testPassword")} - comment_id = comment.ID - pkgbasename = package.PackageBase.Name - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment_id}/pin" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.UNAUTHORIZED) - - -def test_pkgbase_comment_unpin_unauthorized( - client: TestClient, user: User, package: Package, comment: PackageComment -): - cookies = {"AURSID": user.login(Request(), "testPassword")} - comment_id = comment.ID - pkgbasename = package.PackageBase.Name - endpoint = f"/pkgbase/{pkgbasename}/comments/{comment_id}/unpin" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.UNAUTHORIZED) - - -def test_pkgbase_comaintainers_not_found(client: TestClient, maintainer: User): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - endpoint = "/pkgbase/fake/comaintainers" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pkgbase_comaintainers_post_not_found(client: TestClient, maintainer: User): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - endpoint = "/pkgbase/fake/comaintainers" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pkgbase_comaintainers_unauthorized( - client: TestClient, user: User, package: Package -): - pkgbase = package.PackageBase - endpoint = f"/pkgbase/{pkgbase.Name}/comaintainers" - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - -def test_pkgbase_comaintainers_post_unauthorized( - client: TestClient, user: User, package: Package -): - pkgbase = package.PackageBase - endpoint = f"/pkgbase/{pkgbase.Name}/comaintainers" - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - -def test_pkgbase_comaintainers_post_invalid_user( - client: TestClient, maintainer: User, package: Package -): - pkgbase = package.PackageBase - endpoint = f"/pkgbase/{pkgbase.Name}/comaintainers" - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data={"users": "\nfake\n"}) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - error = root.xpath('//ul[@class="errorlist"]/li')[0] - assert error.text.strip() == "Invalid user name: fake" - - -def test_pkgbase_comaintainers( - client: TestClient, user: User, maintainer: User, package: Package -): - pkgbase = package.PackageBase - endpoint = f"/pkgbase/{pkgbase.Name}/comaintainers" - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - - # Start off by adding user as a comaintainer to package. - # The maintainer username given should be ignored. - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"users": f"\n{user.Username}\n{maintainer.Username}\n"}, - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - # Do it again to exercise the last_priority bump path. - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"users": f"\n{user.Username}\n{maintainer.Username}\n"}, - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - # Now that we've added a comaintainer to the pkgbase, - # let's perform a GET request to make sure that the backend produces - # the user we added in the users textarea. - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - users = root.xpath('//textarea[@id="id_users"]')[0] - assert users.text.strip() == user.Username - - # Finish off by removing all the comaintainers. - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data={"users": str()}) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - users = root.xpath('//textarea[@id="id_users"]')[0] - assert users is not None and users.text is None - - -def test_pkgbase_request_not_found(client: TestClient, user: User): - pkgbase_name = "fake" - endpoint = f"/pkgbase/{pkgbase_name}/request" - - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pkgbase_request(client: TestClient, user: User, package: Package): - pkgbase = package.PackageBase - endpoint = f"/pkgbase/{pkgbase.Name}/request" - - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - -def test_pkgbase_request_post_not_found(client: TestClient, user: User): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post("/pkgbase/fake/request", data={"type": "fake"}) - assert resp.status_code == int(HTTPStatus.NOT_FOUND) - - -def test_pkgbase_request_post_invalid_type( - client: TestClient, user: User, package: Package -): - endpoint = f"/pkgbase/{package.PackageBase.Name}/request" - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data={"type": "fake"}) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - -def test_pkgbase_request_post_no_comment_error( - client: TestClient, user: User, package: Package -): - endpoint = f"/pkgbase/{package.PackageBase.Name}/request" - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={ - "type": "deletion", - "comments": "", # An empty comment field causes an error. - }, - ) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - error = root.xpath('//ul[@class="errorlist"]/li')[0] - expected = "The comment field must not be empty." - assert error.text.strip() == expected - - -def test_pkgbase_request_post_comment_exceed_character_limit( - client: TestClient, user: User, package: Package -): - endpoint = f"/pkgbase/{package.PackageBase.Name}/request" - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={ - "type": "deletion", - "comments": "x" * (max_chars_comment + 1), - }, - ) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - error = root.xpath('//ul[@class="errorlist"]/li')[0] - expected = "Maximum number of characters for comment exceeded." - assert error.text.strip() == expected - - -def test_pkgbase_request_post_merge_not_found_error( - client: TestClient, user: User, package: Package -): - endpoint = f"/pkgbase/{package.PackageBase.Name}/request" - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={ - "type": "merge", - "merge_into": "fake", # There is no PackageBase.Name "fake" - "comments": "We want to merge this.", - }, - ) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - error = root.xpath('//ul[@class="errorlist"]/li')[0] - expected = "The package base you want to merge into does not exist." - assert error.text.strip() == expected - - -def test_pkgbase_request_post_merge_no_merge_into_error( - client: TestClient, user: User, package: Package -): - endpoint = f"/pkgbase/{package.PackageBase.Name}/request" - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={ - "type": "merge", - "merge_into": "", # There is no PackageBase.Name "fake" - "comments": "We want to merge this.", - }, - ) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - error = root.xpath('//ul[@class="errorlist"]/li')[0] - expected = 'The "Merge into" field must not be empty.' - assert error.text.strip() == expected - - -def test_pkgbase_request_post_merge_self_error( - client: TestClient, user: User, package: Package -): - endpoint = f"/pkgbase/{package.PackageBase.Name}/request" - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={ - "type": "merge", - "merge_into": package.PackageBase.Name, - "comments": "We want to merge this.", - }, - ) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - error = root.xpath('//ul[@class="errorlist"]/li')[0] - expected = "You cannot merge a package base into itself." - assert error.text.strip() == expected - - -def test_pkgbase_flag( - client: TestClient, user: User, maintainer: User, package: Package -): - pkgbase = package.PackageBase - - # We shouldn't have flagged the package yet; assert so. - assert pkgbase.OutOfDateTS is None - - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{pkgbase.Name}/flag" - - # Get the flag page. - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - # Now, let's check the /pkgbase/{name}/flag-comment route. - flag_comment_endpoint = f"/pkgbase/{pkgbase.Name}/flag-comment" - with client as request: - request.cookies = cookies - resp = request.get(flag_comment_endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - # Try to flag it without a comment. - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - # Flag it with a valid comment. - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data={"comments": "Test"}) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert pkgbase.Flagger == user - assert pkgbase.FlaggerComment == "Test" - - # Should've gotten a FlagNotification. - assert Email.count() == 1 - - # Now, let's check the /pkgbase/{name}/flag-comment route. - flag_comment_endpoint = f"/pkgbase/{pkgbase.Name}/flag-comment" - with client as request: - request.cookies = cookies - resp = request.get(flag_comment_endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - # Now try to perform a get; we should be redirected because - # it's already flagged. - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - with db.begin(): - user2 = db.create( - User, - Username="test2", - Email="test2@example.org", - Passwd="testPassword", - AccountType=user.AccountType, - ) - - # Now, test that the 'user2' user can't unflag it, because they - # didn't flag it to begin with. - user2_cookies = {"AURSID": user2.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{pkgbase.Name}/unflag" - with client as request: - request.cookies = user2_cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert pkgbase.Flagger == user - - # Now, test that the 'maintainer' user can. - maint_cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = maint_cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert pkgbase.Flagger is None - - # Try flagging with a comment that exceeds our character limit. - with client as request: - request.cookies = cookies - data = {"comments": "x" * (max_chars_comment + 1)} - resp = request.post(f"/pkgbase/{pkgbase.Name}/flag", data=data) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - # Flag it again. - with client as request: - request.cookies = cookies - resp = request.post(f"/pkgbase/{pkgbase.Name}/flag", data={"comments": "Test"}) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Now, unflag it for real. - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert pkgbase.Flagger is None - - -def test_pkgbase_flag_vcs(client: TestClient, user: User, package: Package): - # Morph our package fixture into a VCS package (-git). - with db.begin(): - package.PackageBase.Name += "-git" - package.Name += "-git" - - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(f"/pkgbase/{package.PackageBase.Name}/flag") - assert resp.status_code == int(HTTPStatus.OK) - - expected = ( - "This seems to be a VCS package. Please do " - "not flag it out-of-date if the package " - "version in the AUR does not match the most recent commit. " - "Flagging this package should only be done if the sources " - "moved or changes in the PKGBUILD are required because of " - "recent upstream changes." - ) - assert expected in resp.text - - -def test_pkgbase_notify(client: TestClient, user: User, package: Package): - pkgbase = package.PackageBase - - # We have no notif record yet; assert that. - notif = pkgbase.notifications.filter(PackageNotification.UserID == user.ID).first() - assert notif is None - - # Enable notifications. - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{pkgbase.Name}/notify" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - notif = pkgbase.notifications.filter(PackageNotification.UserID == user.ID).first() - assert notif is not None - - # Disable notifications. - endpoint = f"/pkgbase/{pkgbase.Name}/unnotify" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - notif = pkgbase.notifications.filter(PackageNotification.UserID == user.ID).first() - assert notif is None - - -def test_pkgbase_vote(client: TestClient, user: User, package: Package): - pkgbase = package.PackageBase - - # We haven't voted yet. - vote = pkgbase.package_votes.filter(PackageVote.UsersID == user.ID).first() - assert vote is None - - # Vote for the package. - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{pkgbase.Name}/vote" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - vote = pkgbase.package_votes.filter(PackageVote.UsersID == user.ID).first() - assert vote is not None - assert pkgbase.NumVotes == 1 - - # Remove vote. - endpoint = f"/pkgbase/{pkgbase.Name}/unvote" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - vote = pkgbase.package_votes.filter(PackageVote.UsersID == user.ID).first() - assert vote is None - assert pkgbase.NumVotes == 0 - - -def test_pkgbase_disown_as_sole_maintainer( - client: TestClient, maintainer: User, package: Package -): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - pkgbase = package.PackageBase - endpoint = f"/pkgbase/{pkgbase.Name}/disown" - - # But we do here. - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data={"confirm": True}) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - -def test_pkgbase_disown_as_maint_with_comaint( - client: TestClient, user: User, maintainer: User, package: Package -): - """When disowning as a maintainer, the lowest priority comaintainer - is promoted to maintainer.""" - pkgbase = package.PackageBase - endp = f"/pkgbase/{pkgbase.Name}/disown" - post_data = {"confirm": True} - - with db.begin(): - db.create(PackageComaintainer, PackageBase=pkgbase, User=user, Priority=1) - - maint_cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = maint_cookies - resp = request.post(endp, data=post_data, follow_redirects=True) - assert resp.status_code == int(HTTPStatus.OK) - - package = db.refresh(package) - pkgbase = package.PackageBase - - assert pkgbase.Maintainer == user - assert pkgbase.comaintainers.count() == 0 - - -def test_pkgbase_disown( - client: TestClient, - user: User, - maintainer: User, - comaintainer: User, - package: Package, -): - maint_cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - comaint_cookies = {"AURSID": comaintainer.login(Request(), "testPassword")} - user_cookies = {"AURSID": user.login(Request(), "testPassword")} - pkgbase = package.PackageBase - pkgbase_endp = f"/pkgbase/{pkgbase.Name}" - endpoint = f"{pkgbase_endp}/disown" - - with db.begin(): - db.create( - PackageComaintainer, User=comaintainer, PackageBase=pkgbase, Priority=1 - ) - - # GET as a normal user, which is rejected for lack of credentials. - with client as request: - request.cookies = user_cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # GET as a comaintainer. - with client as request: - request.cookies = comaint_cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - # Ensure that the comaintainer can see "Disown Package" link - with client as request: - request.cookies = comaint_cookies - resp = request.get(pkgbase_endp, follow_redirects=True) - assert "Disown Package" in resp.text - - # GET as the maintainer. - with client as request: - request.cookies = maint_cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - # Ensure that the maintainer can see "Disown Package" link - with client as request: - request.cookies = maint_cookies - resp = request.get(pkgbase_endp, follow_redirects=True) - assert "Disown Package" in resp.text - - # POST as a normal user, which is rejected for lack of credentials. - with client as request: - request.cookies = user_cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # POST as the comaintainer without "confirm". - with client as request: - request.cookies = comaint_cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - # POST as the maintainer without "confirm". - with client as request: - request.cookies = maint_cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - # POST as the comaintainer with "confirm". - with client as request: - request.cookies = comaint_cookies - resp = request.post(endpoint, data={"confirm": True}) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # POST as the maintainer with "confirm". - with client as request: - request.cookies = maint_cookies - resp = request.post(endpoint, data={"confirm": True}) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - -def test_pkgbase_adopt( - client: TestClient, user: User, pm_user: User, maintainer: User, package: Package -): - # Unset the maintainer as if package is orphaned. - with db.begin(): - package.PackageBase.Maintainer = None - - pkgbasename = package.PackageBase.Name - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{pkgbasename}/adopt" - - # Adopt the package base. - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert package.PackageBase.Maintainer == maintainer - - # Try to adopt it when it already has a maintainer; nothing changes. - user_cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = user_cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert package.PackageBase.Maintainer == maintainer - - # Steal the package as a PM. - pm_cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = pm_cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert package.PackageBase.Maintainer == pm_user - - -def test_pkgbase_delete_unauthorized(client: TestClient, user: User, package: Package): - pkgbase = package.PackageBase - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{pkgbase.Name}/delete" - - # Test GET. - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - # Test POST. - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - -def test_pkgbase_delete(client: TestClient, pm_user: User, package: Package): - pkgbase = package.PackageBase - - # Test that the GET request works. - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{pkgbase.Name}/delete" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - # Test that POST works and denies us because we haven't confirmed. - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - # Test that we can actually delete the pkgbase. - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data={"confirm": True}) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Let's assert that the package base record got removed. - record = db.query(PackageBase).filter(PackageBase.Name == pkgbase.Name).first() - assert record is None - - # Two emails should've been sent out; an autogenerated - # request's accepted notification and a deletion notification. - assert Email.count() == 1 - - req_close = Email(1).parse() - expr = r"^\[PRQ#\d+\] Deletion Request for [^ ]+ Accepted$" - subject = req_close.headers.get("Subject") - assert re.match(expr, subject) - - -def test_pkgbase_delete_with_request( - client: TestClient, pm_user: User, pkgbase: PackageBase, pkgreq: PackageRequest -): - # TODO: Test that a previously existing request gets Accepted when - # a PM deleted the package. - - # Delete the package as `pm_user` via POST request. - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{pkgbase.Name}/delete" - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data={"confirm": True}) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == "/packages" - - # We should've just sent one closure email since `pkgreq` exists. - assert Email.count() == 1 - - # Make sure it was a closure for the deletion request. - email = Email(1).parse() - expr = r"^\[PRQ#\d+\] Deletion Request for [^ ]+ Accepted$" - assert re.match(expr, email.headers.get("Subject")) - - -def test_packages_post_unknown_action(client: TestClient, user: User, package: Package): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "unknown"}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - -def test_packages_post_error(client: TestClient, user: User, package: Package): - async def stub_action(request: Request, **kwargs): - return False, ["Some error."] - - actions = {"stub": stub_action} - with mock.patch.dict("aurweb.routers.packages.PACKAGE_ACTIONS", actions): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "stub"}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - errors = get_errors(resp.text) - expected = "Some error." - assert errors[0].text.strip() == expected - - -def test_packages_post(client: TestClient, user: User, package: Package): - async def stub_action(request: Request, **kwargs): - return True, ["Some success."] - - actions = {"stub": stub_action} - with mock.patch.dict("aurweb.routers.packages.PACKAGE_ACTIONS", actions): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - "/packages", - data={"action": "stub"}, - ) - assert resp.status_code == int(HTTPStatus.OK) - - errors = get_successes(resp.text) - expected = "Some success." - assert errors[0].text.strip() == expected - - -def test_pkgbase_merge_unauthorized(client: TestClient, user: User, package: Package): - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{package.PackageBase.Name}/merge" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.UNAUTHORIZED) - - -def test_pkgbase_merge(client: TestClient, pm_user: User, package: Package): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{package.PackageBase.Name}/merge" - with client as request: - request.cookies = cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - assert not get_errors(resp.text) - - -def test_pkgbase_merge_post_unauthorized( - client: TestClient, user: User, package: Package -): - cookies = {"AURSID": user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{package.PackageBase.Name}/merge" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.UNAUTHORIZED) - - -def test_pkgbase_merge_post_unconfirmed( - client: TestClient, pm_user: User, package: Package -): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{package.PackageBase.Name}/merge" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = ( - "The selected packages have not been deleted, " - "check the confirmation checkbox." - ) - assert errors[0].text.strip() == expected - - -def test_pkgbase_merge_post_invalid_into( - client: TestClient, pm_user: User, package: Package -): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{package.PackageBase.Name}/merge" - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data={"into": "not_real", "confirm": True}) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "Cannot find package to merge votes and comments into." - assert errors[0].text.strip() == expected - - -def test_pkgbase_merge_post_self_invalid( - client: TestClient, pm_user: User, package: Package -): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{package.PackageBase.Name}/merge" - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"into": package.PackageBase.Name, "confirm": True}, - ) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - errors = get_errors(resp.text) - expected = "Cannot merge a package base with itself." - assert errors[0].text.strip() == expected - - -def test_pkgbase_merge_post( - client: TestClient, - pm_user: User, - package: Package, - pkgbase: PackageBase, - target: PackageBase, - pkgreq: PackageRequest, -): - pkgname = package.Name - pkgbasename = pkgbase.Name - - # Create a merge request destined for another target. - # This will allow our test code to exercise closing - # such a request after merging the pkgbase in question. - with db.begin(): - pkgreq.ReqTypeID = MERGE_ID - pkgreq.MergeBaseName = target.Name - - # Vote for the package. - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - endpoint = f"/pkgbase/{package.PackageBase.Name}/vote" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Enable notifications. - endpoint = f"/pkgbase/{package.PackageBase.Name}/notify" - with client as request: - request.cookies = cookies - resp = request.post(endpoint) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Comment on the package. - endpoint = f"/pkgbase/{package.PackageBase.Name}/comments" - with client as request: - request.cookies = cookies - resp = request.post( - endpoint, - data={"comment": "Test comment."}, - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Save these relationships for later comparison. - comments = package.PackageBase.comments.all() - notifs = package.PackageBase.notifications.all() - votes = package.PackageBase.package_votes.all() - - # Merge the package into target. - endpoint = f"/pkgbase/{package.PackageBase.Name}/merge" - with client as request: - request.cookies = cookies - resp = request.post(endpoint, data={"into": target.Name, "confirm": True}) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - loc = resp.headers.get("location") - assert loc == f"/pkgbase/{target.Name}" - - # Two emails should've been sent out. - assert Email.count() == 1 - email_body = Email(1).parse().glue() - assert f"Merge Request for {pkgbasename} Accepted" in email_body - - # Assert that the original comments, notifs and votes we setup - # got migrated to target as intended. - assert comments == target.comments.all() - assert notifs == target.notifications.all() - assert votes == target.package_votes.all() - - # ...and that the package got deleted. - package = db.query(Package).filter(Package.Name == pkgname).first() - assert package is None - - # Our previously-made request should have gotten accepted. - assert pkgreq.Status == ACCEPTED_ID - assert pkgreq.Closer is not None - - # A PackageRequest is always created when merging this way. - pkgreq = ( - db.query(PackageRequest) - .filter( - and_( - PackageRequest.ReqTypeID == MERGE_ID, - PackageRequest.PackageBaseName == pkgbasename, - PackageRequest.MergeBaseName == target.Name, - ) - ) - .first() - ) - assert pkgreq is not None - - -def test_pkgbase_keywords(client: TestClient, user: User, package: Package): - endpoint = f"/pkgbase/{package.PackageBase.Name}" - with client as request: - resp = request.get(endpoint, follow_redirects=True) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - keywords = root.xpath('//a[@class="keyword"]') - assert len(keywords) == 0 - - maint = package.PackageBase.Maintainer - cookies = {"AURSID": maint.login(Request(), "testPassword")} - post_endpoint = f"{endpoint}/keywords" - with client as request: - request.cookies = cookies - resp = request.post( - post_endpoint, - data={"keywords": "abc test"}, - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - with client as request: - request.cookies = {} - resp = request.get(resp.headers.get("location"), follow_redirects=True) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - keywords = root.xpath('//a[@class="keyword"]') - assert len(keywords) == 2 - expected = ["abc", "test"] - for i, keyword in enumerate(keywords): - assert keyword.text.strip() == expected[i] - - -def test_pkgbase_empty_keywords(client: TestClient, user: User, package: Package): - endpoint = f"/pkgbase/{package.PackageBase.Name}" - with client as request: - request.cookies = {} - resp = request.get(endpoint, follow_redirects=True) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - keywords = root.xpath('//a[@class="keyword"]') - assert len(keywords) == 0 - - maint = package.PackageBase.Maintainer - cookies = {"AURSID": maint.login(Request(), "testPassword")} - post_endpoint = f"{endpoint}/keywords" - with client as request: - request.cookies = cookies - resp = request.post( - post_endpoint, - data={"keywords": "abc test foo bar "}, - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - with client as request: - request.cookies = {} - resp = request.get(resp.headers.get("location"), follow_redirects=True) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - keywords = root.xpath('//a[@class="keyword"]') - assert len(keywords) == 4 - expected = ["abc", "bar", "foo", "test"] - for i, keyword in enumerate(keywords): - assert keyword.text.strip() == expected[i] - - -def test_unauthorized_pkgbase_keywords(client: TestClient, package: Package): - with db.begin(): - user = db.create( - User, Username="random_user", Email="random_user", Passwd="testPassword" - ) - - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - pkgbase = package.PackageBase - endp = f"/pkgbase/{pkgbase.Name}/keywords" - response = request.post(endp) - assert response.status_code == HTTPStatus.UNAUTHORIZED - - -def test_independent_user_unflag(client: TestClient, user: User, package: Package): - with db.begin(): - flagger = db.create( - User, - Username="test_flagger", - Email="test_flagger@example.com", - Passwd="testPassword", - ) - - pkgbase = package.PackageBase - cookies = {"AURSID": flagger.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - endp = f"/pkgbase/{pkgbase.Name}/flag" - response = request.post( - endp, - data={"comments": "This thing needs a flag!"}, - follow_redirects=True, - ) - assert response.status_code == HTTPStatus.OK - - # At this point, we've flagged it as `flagger`. - # Now, we should be able to view the "Unflag package" link on the package - # page when browsing as that `flagger` user. - with client as request: - endp = f"/pkgbase/{pkgbase.Name}" - request.cookies = cookies - response = request.get(endp, follow_redirects=True) - assert response.status_code == HTTPStatus.OK - - # Assert that the "Unflag package" link appears in the DOM. - root = parse_root(response.text) - elems = root.xpath('//input[@name="do_UnFlag"]') - assert len(elems) == 1 - - # Now, unflag the package by "clicking" the "Unflag package" link. - with client as request: - endp = f"/pkgbase/{pkgbase.Name}/unflag" - request.cookies = cookies - response = request.post(endp, follow_redirects=True) - assert response.status_code == HTTPStatus.OK - - # For the last time, let's check the GET response. The package should - # not show as flagged anymore, and thus the "Unflag package" link - # should be missing. - with client as request: - endp = f"/pkgbase/{pkgbase.Name}" - request.cookies = cookies - response = request.get(endp, follow_redirects=True) - assert response.status_code == HTTPStatus.OK - - # Assert that the "Unflag package" link does not appear in the DOM. - root = parse_root(response.text) - elems = root.xpath('//input[@name="do_UnFlag"]') - assert len(elems) == 0 diff --git a/test/test_pkgmaint.py b/test/test_pkgmaint.py deleted file mode 100644 index e427b664..00000000 --- a/test/test_pkgmaint.py +++ /dev/null @@ -1,73 +0,0 @@ -import pytest - -from aurweb import db, time -from aurweb.models import Package, PackageBase, User -from aurweb.models.account_type import USER_ID -from aurweb.scripts import pkgmaint - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def packages(user: User) -> list[Package]: - output = [] - - now = time.utcnow() - with db.begin(): - for i in range(5): - pkgbase = db.create( - PackageBase, Name=f"pkg_{i}", SubmittedTS=now, ModifiedTS=now - ) - pkg = db.create( - Package, PackageBase=pkgbase, Name=f"pkg_{i}", Version=f"{i}.0" - ) - output.append(pkg) - yield output - - -def test_pkgmaint_noop(packages: list[Package]): - assert len(packages) == 5 - pkgmaint.main() - packages = db.query(Package).all() - assert len(packages) == 5 - - -def test_pkgmaint(packages: list[Package]): - assert len(packages) == 5 - - # Modify the first package so it's out of date and gets deleted. - with db.begin(): - # Reduce SubmittedTS by a day + 10 seconds. - packages[0].PackageBase.SubmittedTS -= 86400 + 10 - - # Run pkgmaint. - pkgmaint.main() - - # Query package objects again and assert that the - # first package was deleted but all others are intact. - packages = db.query(Package).all() - - # !Cleanup of packages without last packager deactivated. - # We should still have 5 packages - assert len(packages) == 5 - - # assert len(packages) == 4 - # expected = ["pkg_1", "pkg_2", "pkg_3", "pkg_4"] - # for i, pkgname in enumerate(expected): - # assert packages[i].Name == pkgname diff --git a/test/test_pm_vote.py b/test/test_pm_vote.py deleted file mode 100644 index 54d5c137..00000000 --- a/test/test_pm_vote.py +++ /dev/null @@ -1,63 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db, time -from aurweb.models.account_type import PACKAGE_MAINTAINER_ID -from aurweb.models.user import User -from aurweb.models.vote import Vote -from aurweb.models.voteinfo import VoteInfo - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=PACKAGE_MAINTAINER_ID, - ) - yield user - - -@pytest.fixture -def voteinfo(user: User) -> VoteInfo: - ts = time.utcnow() - with db.begin(): - voteinfo = db.create( - VoteInfo, - Agenda="Blah blah.", - User=user.Username, - Submitted=ts, - End=ts + 5, - Quorum=0.5, - Submitter=user, - ) - yield voteinfo - - -def test_vote_creation(user: User, voteinfo: VoteInfo): - with db.begin(): - vote = db.create(Vote, User=user, VoteInfo=voteinfo) - - assert vote.VoteInfo == voteinfo - assert vote.User == user - assert vote in user.votes - assert vote in voteinfo.votes - - -def test_vote_null_user_raises_exception(voteinfo: VoteInfo): - with pytest.raises(IntegrityError): - Vote(VoteInfo=voteinfo) - - -def test_vote_null_voteinfo_raises_exception(user: User): - with pytest.raises(IntegrityError): - Vote(User=user) diff --git a/test/test_popupdate.py b/test/test_popupdate.py deleted file mode 100644 index ce3f9f11..00000000 --- a/test/test_popupdate.py +++ /dev/null @@ -1,12 +0,0 @@ -import pytest - -from aurweb.scripts import popupdate - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_popupdate(): - popupdate.main() diff --git a/test/test_ratelimit.py b/test/test_ratelimit.py deleted file mode 100644 index ab940773..00000000 --- a/test/test_ratelimit.py +++ /dev/null @@ -1,125 +0,0 @@ -from unittest import mock - -import pytest -from redis.client import Pipeline - -from aurweb import aur_logging, config, db -from aurweb.aur_redis import redis_connection -from aurweb.models import ApiRateLimit -from aurweb.ratelimit import check_ratelimit -from aurweb.testing.requests import Request - -logger = aur_logging.get_logger(__name__) - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def pipeline(): - redis = redis_connection() - pipeline = redis.pipeline() - - pipeline.delete("ratelimit-ws:127.0.0.1") - pipeline.delete("ratelimit:127.0.0.1") - pipeline.execute() - - yield pipeline - - -config_getint = config.getint - - -def mock_config_getint(section: str, key: str): - if key == "request_limit": - return 4 - elif key == "window_length": - return 100 - return config_getint(section, key) - - -config_getboolean = config.getboolean - - -def mock_config_getboolean(return_value: int = 0): - def fn(section: str, key: str): - if section == "ratelimit" and key == "cache": - return return_value - return config_getboolean(section, key) - - return fn - - -config_get = config.get - - -def mock_config_get(return_value: str = "none"): - def fn(section: str, key: str): - if section == "options" and key == "cache": - return return_value - return config_get(section, key) - - return fn - - -@mock.patch("aurweb.config.getint", side_effect=mock_config_getint) -@mock.patch("aurweb.config.getboolean", side_effect=mock_config_getboolean(1)) -@mock.patch("aurweb.config.get", side_effect=mock_config_get("none")) -def test_ratelimit_redis( - get: mock.MagicMock, - getboolean: mock.MagicMock, - getint: mock.MagicMock, - pipeline: Pipeline, -): - """This test will only cover aurweb.ratelimit's Redis - path if a real Redis server is configured. Otherwise, - it'll use the database.""" - - # We'll need a Request for everything here. - request = Request() - - # Run check_ratelimit for our request_limit. These should succeed. - for i in range(4): - assert not check_ratelimit(request) - - # This check_ratelimit should fail, being the 4001th request. - assert check_ratelimit(request) - - # Delete the Redis keys. - host = request.client.host - pipeline.delete(f"ratelimit-ws:{host}") - pipeline.delete(f"ratelimit:{host}") - one, two = pipeline.execute() - assert one and two - - # Should be good to go again! - assert not check_ratelimit(request) - - -@mock.patch("aurweb.config.getint", side_effect=mock_config_getint) -@mock.patch("aurweb.config.getboolean", side_effect=mock_config_getboolean(0)) -@mock.patch("aurweb.config.get", side_effect=mock_config_get("none")) -def test_ratelimit_db( - get: mock.MagicMock, - getboolean: mock.MagicMock, - getint: mock.MagicMock, - pipeline: Pipeline, -): - # We'll need a Request for everything here. - request = Request() - - # Run check_ratelimit for our request_limit. These should succeed. - for i in range(4): - assert not check_ratelimit(request) - - # This check_ratelimit should fail, being the 4001th request. - assert check_ratelimit(request) - - # Delete the ApiRateLimit record. - with db.begin(): - db.delete(db.query(ApiRateLimit).first()) - - # Should be good to go again! - assert not check_ratelimit(request) diff --git a/test/test_redis.py b/test/test_redis.py deleted file mode 100644 index 6f9bdb40..00000000 --- a/test/test_redis.py +++ /dev/null @@ -1,40 +0,0 @@ -from unittest import mock - -import pytest - -import aurweb.config -from aurweb.aur_redis import redis_connection - - -@pytest.fixture -def redis(): - """Create a RedisStub.""" - - def mock_get(section, key): - return "none" - - with mock.patch("aurweb.config.get", side_effect=mock_get): - aurweb.config.rehash() - redis = redis_connection() - aurweb.config.rehash() - - yield redis - - -def test_redis_stub(redis): - # We don't yet have a test key set. - assert redis.get("test") is None - - # Set the test key to abc. - redis.set("test", "abc") - assert redis.get("test").decode() == "abc" - - # Test expire. - redis.expire("test", 0) - assert redis.get("test") is None - - # Now, set the test key again and use delete() on it. - redis.set("test", "abc") - assert redis.get("test").decode() == "abc" - redis.delete("test") - assert redis.get("test") is None diff --git a/test/test_relation_type.py b/test/test_relation_type.py deleted file mode 100644 index 263ae1ec..00000000 --- a/test/test_relation_type.py +++ /dev/null @@ -1,34 +0,0 @@ -import pytest - -from aurweb import db -from aurweb.models.relation_type import RelationType - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_relation_type_creation(): - with db.begin(): - relation_type = db.create(RelationType, Name="test-relation") - - assert bool(relation_type.ID) - assert relation_type.Name == "test-relation" - - with db.begin(): - db.delete(relation_type) - - -def test_relation_types(): - conflicts = db.query(RelationType, RelationType.Name == "conflicts").first() - assert conflicts is not None - assert conflicts.Name == "conflicts" - - provides = db.query(RelationType, RelationType.Name == "provides").first() - assert provides is not None - assert provides.Name == "provides" - - replaces = db.query(RelationType, RelationType.Name == "replaces").first() - assert replaces is not None - assert replaces.Name == "replaces" diff --git a/test/test_rendercomment.py b/test/test_rendercomment.py deleted file mode 100644 index 9d45fea9..00000000 --- a/test/test_rendercomment.py +++ /dev/null @@ -1,275 +0,0 @@ -import os -from unittest import mock - -import pygit2 -import pytest - -from aurweb import aur_logging, config, db, time -from aurweb.models import Package, PackageBase, PackageComment, User -from aurweb.models.account_type import USER_ID -from aurweb.scripts import rendercomment -from aurweb.scripts.rendercomment import update_comment_render -from aurweb.testing.git import GitRepository - -logger = aur_logging.get_logger(__name__) -aur_location = config.get("options", "aur_location") - - -@pytest.fixture(autouse=True) -def setup(db_test, git: GitRepository): - config_get = config.get - - def mock_config_get(section: str, key: str) -> str: - if section == "serve" and key == "repo-path": - return git.file_lock.path - elif section == "options" and key == "commit_uri": - return "/cgit/aur.git/log/?h=%s&id=%s" - return config_get(section, key) - - with mock.patch("aurweb.config.get", side_effect=mock_config_get): - yield - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - Passwd=str(), - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - now = time.utcnow() - with db.begin(): - pkgbase = db.create( - PackageBase, - Packager=user, - Name="pkgbase_0", - SubmittedTS=now, - ModifiedTS=now, - ) - yield pkgbase - - -@pytest.fixture -def package(pkgbase: PackageBase) -> Package: - with db.begin(): - package = db.create( - Package, PackageBase=pkgbase, Name=pkgbase.Name, Version="1.0" - ) - yield package - - -def create_comment( - user: User, pkgbase: PackageBase, comments: str, render: bool = True -): - with db.begin(): - comment = db.create( - PackageComment, User=user, PackageBase=pkgbase, Comments=comments - ) - if render: - update_comment_render(comment) - return comment - - -def test_comment_rendering(user: User, pkgbase: PackageBase): - text = "Hello world! This is a comment." - comment = create_comment(user, pkgbase, text) - expected = f"

{text}

" - assert comment.RenderedComment == expected - - -def test_rendercomment_main(user: User, pkgbase: PackageBase): - text = "Hello world! This is a comment." - comment = create_comment(user, pkgbase, text, False) - - args = ["aurweb-rendercomment", str(comment.ID)] - with mock.patch("sys.argv", args): - rendercomment.main() - db.refresh(comment) - - expected = f"

{text}

" - assert comment.RenderedComment == expected - - -def test_markdown_conversion(user: User, pkgbase: PackageBase): - text = "*Hello* [world](https://aur.archlinux.org)!" - comment = create_comment(user, pkgbase, text) - expected = "

Hello " 'world!

' - assert comment.RenderedComment == expected - - -def test_markdown_in_html_block(user: User, pkgbase: PackageBase): - # without "markdown" attribute - text = "
test*Hello*
" - comment = create_comment(user, pkgbase, text) - expected = "
test*Hello*
" - assert comment.RenderedComment == expected - - # with "markdown" attribute - text = "
test*Hello*
" - comment = create_comment(user, pkgbase, text) - expected = ( - "
\n

testHello

\n
" - ) - assert comment.RenderedComment == expected - - -def test_markdown_strikethrough(user: User, pkgbase: PackageBase): - text = "*~~Hello~~world*~~!~~" - comment = create_comment(user, pkgbase, text) - expected = "

Helloworld!

" - assert comment.RenderedComment == expected - - -def test_html_sanitization(user: User, pkgbase: PackageBase): - text = '' - comment = create_comment(user, pkgbase, text) - expected = '<script>alert("XSS!")</script>' - assert comment.RenderedComment == expected - - -def test_link_conversion(user: User, pkgbase: PackageBase): - text = """\ -Visit https://www.archlinux.org/#_test_. -Visit *https://www.archlinux.org/*. -Visit . -Visit `https://www.archlinux.org/`. -Visit [Arch Linux](https://www.archlinux.org/). -Visit [Arch Linux][arch]. -[arch]: https://www.archlinux.org/\ -""" - comment = create_comment(user, pkgbase, text) - expected = """\ -

Visit \ -https://www.archlinux.org/#_test_. -Visit https://www.archlinux.org/. -Visit https://www.archlinux.org/. -Visit https://www.archlinux.org/. -Visit Arch Linux. -Visit Arch Linux.

\ -""" - assert comment.RenderedComment == expected - - -def test_git_commit_link(git: GitRepository, user: User, package: Package): - commit_hash = git.commit(package, "Initial commit.") - logger.info(f"Created commit: {commit_hash}") - logger.info(f"Short hash: {commit_hash[:7]}") - - text = f"""\ -{commit_hash} -{commit_hash[:7]} -x.{commit_hash}.x -{commit_hash}x -0123456789abcdef -`{commit_hash}` -http://example.com/{commit_hash}\ -""" - comment = create_comment(user, package.PackageBase, text) - - pkgname = package.PackageBase.Name - cgit_path = f"/cgit/aur.git/log/?h={pkgname}&" - expected = f"""\ -

{commit_hash[:12]} -{commit_hash[:7]} -x.{commit_hash[:12]}.x -{commit_hash}x -0123456789abcdef -{commit_hash} -\ -http://example.com/{commit_hash}\ -\ -

\ -""" - assert comment.RenderedComment == expected - - -def test_git_commit_link_multiple_oids( - git: GitRepository, user: User, package: Package -): - # Make sure we get reproducible hashes by hardcoding the dates - date = "Sun, 16 Jul 2023 06:06:06 +0200" - os.environ["GIT_COMMITTER_DATE"] = date - os.environ["GIT_AUTHOR_DATE"] = date - - # Package names that cause two object IDs starting with "09a3468" - pkgnames = [ - "bfa3e330-23c5-11ee-9b6c-9c2dcdf2810d", - "54c6a420-23c6-11ee-9b6c-9c2dcdf2810d", - ] - - # Create our commits - for pkgname in pkgnames: - with db.begin(): - package = db.create( - Package, PackageBase=package.PackageBase, Name=pkgname, Version="1.0" - ) - git.commit(package, pkgname) - - repo_path = config.get("serve", "repo-path") - repo = pygit2.Repository(repo_path) - - # Make sure we get an error when we search the git repo for "09a3468" - with pytest.raises(ValueError) as oid_error: - assert "09a3468" in repo - assert "ambiguous OID prefix" in oid_error - - # Create a comment, referencing "09a3468" - comment = create_comment(user, package.PackageBase, "Commit 09a3468 is nasty!") - - # Make sure our comment does not contain a link. - assert comment.RenderedComment == "

Commit 09a3468 is nasty!

" - - -def test_flyspray_issue_link(user: User, pkgbase: PackageBase): - text = """\ -FS#1234567. -*FS#1234* -FS# -XFS#1 -`FS#1234` -https://archlinux.org/?test=FS#1234\ -""" - comment = create_comment(user, pkgbase, text) - - expected = """\ -

FS#1234567. -FS#1234 -FS# -XFS#1 -FS#1234 -\ -https://archlinux.org/?test=FS#1234\ -\ -

\ -""" - assert comment.RenderedComment == expected - - -def test_lower_headings(user: User, pkgbase: PackageBase): - text = """\ -# One -## Two -### Three -#### Four -##### Five -###### Six\ -""" - comment = create_comment(user, pkgbase, text) - - expected = """\ -
One
-
Two
-
Three
-
Four
-
Five
-
Six
\ -""" - assert comment.RenderedComment == expected diff --git a/test/test_request_type.py b/test/test_request_type.py deleted file mode 100644 index 0bc86319..00000000 --- a/test/test_request_type.py +++ /dev/null @@ -1,42 +0,0 @@ -import pytest - -from aurweb import db -from aurweb.models.request_type import DELETION_ID, MERGE_ID, ORPHAN_ID, RequestType - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_request_type_creation(): - with db.begin(): - request_type = db.create(RequestType, Name="Test Request") - - assert bool(request_type.ID) - assert request_type.Name == "Test Request" - - with db.begin(): - db.delete(request_type) - - -def test_request_type_null_name_returns_empty_string(): - with db.begin(): - request_type = db.create(RequestType) - - assert bool(request_type.ID) - assert request_type.Name == str() - - with db.begin(): - db.delete(request_type) - - -def test_request_type_name_display(): - deletion = db.query(RequestType, RequestType.ID == DELETION_ID).first() - assert deletion.name_display() == "Deletion" - - orphan = db.query(RequestType, RequestType.ID == ORPHAN_ID).first() - assert orphan.name_display() == "Orphan" - - merge = db.query(RequestType, RequestType.ID == MERGE_ID).first() - assert merge.name_display() == "Merge" diff --git a/test/test_requests.py b/test/test_requests.py deleted file mode 100644 index 1e9cac65..00000000 --- a/test/test_requests.py +++ /dev/null @@ -1,1077 +0,0 @@ -import re -from http import HTTPStatus -from logging import DEBUG - -import pytest -from fastapi import HTTPException -from fastapi.testclient import TestClient - -from aurweb import asgi, config, db, defaults, time -from aurweb.models import Package, PackageBase, PackageRequest, User -from aurweb.models.account_type import PACKAGE_MAINTAINER_ID, USER_ID -from aurweb.models.package_comaintainer import PackageComaintainer -from aurweb.models.package_notification import PackageNotification -from aurweb.models.package_request import ACCEPTED_ID, PENDING_ID, REJECTED_ID -from aurweb.models.request_type import DELETION_ID, MERGE_ID, ORPHAN_ID -from aurweb.packages.requests import ClosureFactory -from aurweb.requests.util import get_pkgreq_by_id -from aurweb.testing.email import Email -from aurweb.testing.html import get_errors, parse_root -from aurweb.testing.requests import Request - - -@pytest.fixture(autouse=True) -def setup(db_test) -> None: - """Setup the database.""" - return - - -@pytest.fixture -def client() -> TestClient: - """Yield a TestClient.""" - client = TestClient(app=asgi.app) - - # disable redirects for our tests - client.follow_redirects = False - yield client - - -def create_user(username: str, email: str) -> User: - """ - Create a user based on `username` and `email`. - - :param username: User.Username - :param email: User.Email - :return: User instance - """ - with db.begin(): - user = db.create( - User, - Username=username, - Email=email, - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - return user - - -@pytest.fixture -def user() -> User: - """Yield a User instance.""" - user = create_user("test", "test@example.org") - yield user - - -@pytest.fixture -def auser(user: User) -> User: - """Yield an authenticated User instance.""" - cookies = {"AURSID": user.login(Request(), "testPassword")} - user.cookies = cookies - yield user - - -@pytest.fixture -def user2() -> User: - """Yield a secondary non-maintainer User instance.""" - user = create_user("test2", "test2@example.org") - yield user - - -@pytest.fixture -def auser2(user2: User) -> User: - """Yield an authenticated secondary non-maintainer User instance.""" - cookies = {"AURSID": user2.login(Request(), "testPassword")} - user2.cookies = cookies - yield user2 - - -@pytest.fixture -def maintainer() -> User: - """Yield a specific User used to maintain packages.""" - with db.begin(): - maintainer = db.create( - User, - Username="test_maintainer", - Email="test_maintainer@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield maintainer - - -@pytest.fixture -def maintainer2() -> User: - """Yield a specific User used to maintain packages.""" - with db.begin(): - maintainer = db.create( - User, - Username="test_maintainer2", - Email="test_maintainer2@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield maintainer - - -@pytest.fixture -def packages(maintainer: User, maintainer2: User) -> list[Package]: - """Yield 55 packages named pkg_0 .. pkg_54.""" - packages_ = [] - now = time.utcnow() - with db.begin(): - for i in range(55): - pkgbase = db.create( - PackageBase, - Name=f"pkg_{i}", - Maintainer=maintainer2 if i > 52 else maintainer, - Packager=maintainer, - Submitter=maintainer, - ModifiedTS=now, - ) - package = db.create(Package, PackageBase=pkgbase, Name=f"pkg_{i}") - packages_.append(package) - - yield packages_ - - -@pytest.fixture -def requests( - user: User, maintainer2: User, packages: list[Package] -) -> list[PackageRequest]: - pkgreqs = [] - with db.begin(): - for i in range(55): - pkgreq = db.create( - PackageRequest, - ReqTypeID=DELETION_ID, - User=( - maintainer2 - if packages[i].PackageBase.Maintainer.Username == "test_maintainer2" - else user - ), - PackageBase=packages[i].PackageBase, - PackageBaseName=packages[i].Name, - Comments=f"Deletion request for pkg_{i}", - ClosureComment=str(), - ) - pkgreqs.append(pkgreq) - yield pkgreqs - - -@pytest.fixture -def pm_user() -> User: - """Yield an authenticated Package Maintainer instance.""" - user = create_user("test_pm", "test_pm@example.org") - with db.begin(): - user.AccountTypeID = PACKAGE_MAINTAINER_ID - cookies = {"AURSID": user.login(Request(), "testPassword")} - user.cookies = cookies - yield user - - -def create_pkgbase(user: User, name: str) -> PackageBase: - """ - Create a package base based on `user` and `name`. - - This function also creates a matching Package record. - - :param user: User instance - :param name: PackageBase.Name - :return: PackageBase instance - """ - now = time.utcnow() - with db.begin(): - pkgbase = db.create( - PackageBase, - Name=name, - Maintainer=user, - Packager=user, - SubmittedTS=now, - ModifiedTS=now, - ) - db.create(Package, Name=pkgbase.Name, PackageBase=pkgbase) - return pkgbase - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - """Yield a package base.""" - pkgbase = create_pkgbase(user, "test-package") - yield pkgbase - - -@pytest.fixture -def target(user: User) -> PackageBase: - """Yield a merge target (package base).""" - with db.begin(): - target = db.create( - PackageBase, Name="target-package", Maintainer=user, Packager=user - ) - yield target - - -def create_request( - reqtype_id: int, user: User, pkgbase: PackageBase, comments: str -) -> PackageRequest: - """ - Create a package request based on `reqtype_id`, `user`, - `pkgbase` and `comments`. - - :param reqtype_id: RequestType.ID - :param user: User instance - :param pkgbase: PackageBase instance - :param comments: PackageRequest.Comments - :return: PackageRequest instance - """ - now = time.utcnow() - with db.begin(): - pkgreq = db.create( - PackageRequest, - ReqTypeID=reqtype_id, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - RequestTS=now, - Comments=comments, - ClosureComment=str(), - ) - return pkgreq - - -@pytest.fixture -def pkgreq(user: User, pkgbase: PackageBase): - """Yield a package request.""" - pkgreq = create_request(DELETION_ID, user, pkgbase, "Test request.") - yield pkgreq - - -def create_notification(user: User, pkgbase: PackageBase): - """Create a notification for a `user` on `pkgbase`.""" - with db.begin(): - notif = db.create(PackageNotification, User=user, PackageBase=pkgbase) - return notif - - -def test_request(client: TestClient, auser: User, pkgbase: PackageBase): - """Test the standard pkgbase request route GET method.""" - endpoint = f"/pkgbase/{pkgbase.Name}/request" - with client as request: - request.cookies = auser.cookies - resp = request.get(endpoint) - assert resp.status_code == int(HTTPStatus.OK) - - -def test_request_post_deletion(client: TestClient, auser2: User, pkgbase: PackageBase): - """Test the POST route for creating a deletion request works.""" - endpoint = f"/pkgbase/{pkgbase.Name}/request" - data = {"comments": "Test request.", "type": "deletion"} - with client as request: - request.cookies = auser2.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - pkgreq = pkgbase.requests.first() - assert pkgreq is not None - assert pkgreq.ReqTypeID == DELETION_ID - assert pkgreq.Status == PENDING_ID - - # A RequestOpenNotification should've been sent out. - assert Email.count() == 1 - email = Email(1) - expr = r"^\[PRQ#%d\] Deletion Request for [^ ]+$" % pkgreq.ID - assert re.match(expr, email.headers.get("Subject")) - - -def test_request_post_deletion_as_maintainer( - client: TestClient, auser: User, pkgbase: PackageBase -): - """Test the POST route for creating a deletion request as maint works.""" - endpoint = f"/pkgbase/{pkgbase.Name}/request" - data = {"comments": "Test request.", "type": "deletion"} - with client as request: - request.cookies = auser.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - # Check the pkgreq record got created and accepted. - pkgreq = db.query(PackageRequest).first() - assert pkgreq is not None - assert pkgreq.ReqTypeID == DELETION_ID - assert pkgreq.Status == ACCEPTED_ID - - # Should've gotten two emails. - assert Email.count() == 2 - - # A RequestOpenNotification should've been sent out. - email = Email(1) - expr = r"^\[PRQ#%d\] Deletion Request for [^ ]+$" % pkgreq.ID - assert re.match(expr, email.headers.get("Subject")) - - # Check the content of the close notification. - email = Email(2) - expr = r"^\[PRQ#%d\] Deletion Request for [^ ]+ Accepted$" % pkgreq.ID - assert re.match(expr, email.headers.get("Subject")) - - -def test_request_post_deletion_autoaccept( - client: TestClient, - auser: User, - pkgbase: PackageBase, - caplog: pytest.LogCaptureFixture, -): - """Test the request route for deletion as maintainer.""" - caplog.set_level(DEBUG) - - now = time.utcnow() - auto_delete_age = config.getint("options", "auto_delete_age") - with db.begin(): - pkgbase.ModifiedTS = now - auto_delete_age + 100 - - endpoint = f"/pkgbase/{pkgbase.Name}/request" - data = {"comments": "Test request.", "type": "deletion"} - with client as request: - request.cookies = auser.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - pkgreq = ( - db.query(PackageRequest) - .filter(PackageRequest.PackageBaseName == pkgbase.Name) - .first() - ) - assert pkgreq is not None - assert pkgreq.ReqTypeID == DELETION_ID - assert pkgreq.Status == ACCEPTED_ID - - # A RequestOpenNotification should've been sent out. - assert Email.count() == 2 - Email.dump() - - # Check the content of the open notification. - email = Email(1) - expr = r"^\[PRQ#%d\] Deletion Request for [^ ]+$" % pkgreq.ID - assert re.match(expr, email.headers.get("Subject")) - - # Check the content of the close notification. - email = Email(2) - expr = r"^\[PRQ#%d\] Deletion Request for [^ ]+ Accepted$" % pkgreq.ID - assert re.match(expr, email.headers.get("Subject")) - - # Check logs. - expr = r"New request #\d+ is marked for auto-deletion." - assert re.search(expr, caplog.text) - - -def test_request_post_merge( - client: TestClient, auser: User, pkgbase: PackageBase, target: PackageBase -): - """Test the request route for merge as maintainer.""" - endpoint = f"/pkgbase/{pkgbase.Name}/request" - data = { - "type": "merge", - "merge_into": target.Name, - "comments": "Test request.", - } - with client as request: - request.cookies = auser.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - pkgreq = pkgbase.requests.first() - assert pkgreq is not None - assert pkgreq.ReqTypeID == MERGE_ID - assert pkgreq.Status == PENDING_ID - assert pkgreq.MergeBaseName == target.Name - - # A RequestOpenNotification should've been sent out. - assert Email.count() == 1 - email = Email(1) - expr = r"^\[PRQ#%d\] Merge Request for [^ ]+$" % pkgreq.ID - assert re.match(expr, email.headers.get("Subject")) - - -def test_request_post_orphan(client: TestClient, auser: User, pkgbase: PackageBase): - """Test the POST route for creating an orphan request works.""" - endpoint = f"/pkgbase/{pkgbase.Name}/request" - data = { - "type": "orphan", - "comments": "Test request.", - } - with client as request: - request.cookies = auser.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - pkgreq = pkgbase.requests.first() - assert pkgreq is not None - assert pkgreq.ReqTypeID == ORPHAN_ID - assert pkgreq.Status == PENDING_ID - - # A RequestOpenNotification should've been sent out. - assert Email.count() == 1 - - email = Email(1) - expr = r"^\[PRQ#%d\] Orphan Request for [^ ]+$" % pkgreq.ID - assert re.match(expr, email.headers.get("Subject")) - - -def test_deletion_request( - client: TestClient, - user: User, - pm_user: User, - pkgbase: PackageBase, - pkgreq: PackageRequest, -): - """Test deleting a package with a preexisting request.""" - # `pkgreq`.ReqTypeID is already DELETION_ID. - create_request(DELETION_ID, user, pkgbase, "Other request.") - - # Create a notification record for another user. They should then - # also receive a DeleteNotification. - user2 = create_user("test2", "test2@example.org") - create_notification(user2, pkgbase) - - endpoint = f"/pkgbase/{pkgbase.Name}/delete" - comments = "Test closure." - data = {"comments": comments, "confirm": True} - with client as request: - request.cookies = pm_user.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == "/packages" - - # Ensure that `pkgreq`.ClosureComment was left alone when specified. - assert pkgreq.ClosureComment == comments - - # We should've gotten three emails. Two accepted requests and - # a DeleteNotification. - assert Email.count() == 3 - - # Both requests should have gotten accepted and had a notification - # sent out for them. - for i in range(Email.count() - 1): - email = Email(i + 1).parse() - expr = r"^\[PRQ#\d+\] Deletion Request for [^ ]+ Accepted$" - assert re.match(expr, email.headers.get("Subject")) - - # We should've also had a DeleteNotification sent out. - email = Email(3).parse() - subject = r"^AUR Package deleted: [^ ]+$" - assert re.match(subject, email.headers.get("Subject")) - body = r"%s [1] deleted %s [2]." % (pm_user.Username, pkgbase.Name) - assert body in email.body - - -def test_deletion_autorequest(client: TestClient, pm_user: User, pkgbase: PackageBase): - """Test deleting a package without a request.""" - # `pkgreq`.ReqTypeID is already DELETION_ID. - endpoint = f"/pkgbase/{pkgbase.Name}/delete" - data = {"confirm": True} - with client as request: - request.cookies = pm_user.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - assert resp.headers.get("location") == "/packages" - assert Email.count() == 1 - - email = Email(1).parse() - subject = r"^\[PRQ#\d+\] Deletion Request for [^ ]+ Accepted$" - assert re.match(subject, email.headers.get("Subject")) - assert "[Autogenerated]" in email.body - - -def test_deletion_autorequest_with_comment( - client: TestClient, pm_user: User, pkgbase: PackageBase -): - """Test deleting a package without a request and a comment.""" - # `pkgreq`.ReqTypeID is already DELETION_ID. - endpoint = f"/pkgbase/{pkgbase.Name}/delete" - data = {"confirm": True, "comments": "deleted with comment"} - with client as request: - request.cookies = pm_user.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - assert resp.headers.get("location") == "/packages" - assert Email.count() == 1 - - email = Email(1).parse() - subject = r"^\[PRQ#\d+\] Deletion Request for [^ ]+ Accepted$" - assert re.match(subject, email.headers.get("Subject")) - assert "deleted with comment" in email.body - - -def test_merge_request( - client: TestClient, - user: User, - pm_user: User, - pkgbase: PackageBase, - target: PackageBase, - pkgreq: PackageRequest, -): - """Test merging a package with a pre - existing request.""" - with db.begin(): - pkgreq.ReqTypeID = MERGE_ID - pkgreq.MergeBaseName = target.Name - - other_target = create_pkgbase(user, "other-target") - other_request = create_request(MERGE_ID, user, pkgbase, "Other request.") - other_target2 = create_pkgbase(user, "other-target2") - other_request2 = create_request(MERGE_ID, user, pkgbase, "Other request2.") - with db.begin(): - other_request.MergeBaseName = other_target.Name - other_request2.MergeBaseName = other_target2.Name - - # `pkgreq`.ReqTypeID is already DELETION_ID. - endpoint = f"/pkgbase/{pkgbase.Name}/merge" - comments = "Test merge closure." - data = {"into": target.Name, "comments": comments, "confirm": True} - with client as request: - request.cookies = pm_user.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{target.Name}" - - # Ensure that `pkgreq`.ClosureComment was left alone when specified. - assert pkgreq.ClosureComment == comments - - # We should've gotten 3 emails: an accepting and two rejections. - assert Email.count() == 3 - - # Assert specific IDs match up in the subjects. - accepted = Email(1).parse() - subj = r"^\[PRQ#%d\] Merge Request for [^ ]+ Accepted$" % pkgreq.ID - assert re.match(subj, accepted.headers.get("Subject")) - - # In the accepted case, we already supplied a closure comment, - # which stops one from being autogenerated by the algorithm. - assert "[Autogenerated]" not in accepted.body - - # Test rejection emails, which do have autogenerated closures. - rejected = Email(2).parse() - subj = r"^\[PRQ#%d\] Merge Request for [^ ]+ Rejected$" % other_request.ID - assert re.match(subj, rejected.headers.get("Subject")) - assert "[Autogenerated]" in rejected.body - - rejected = Email(3).parse() - subj = r"^\[PRQ#%d\] Merge Request for [^ ]+ Rejected$" % other_request2.ID - assert re.match(subj, rejected.headers.get("Subject")) - assert "[Autogenerated]" in rejected.body - - -def test_merge_autorequest( - client: TestClient, - user: User, - pm_user: User, - pkgbase: PackageBase, - target: PackageBase, -): - """Test merging a package without a request.""" - with db.begin(): - pkgreq.ReqTypeID = MERGE_ID - pkgreq.MergeBaseName = target.Name - - # `pkgreq`.ReqTypeID is already DELETION_ID. - endpoint = f"/pkgbase/{pkgbase.Name}/merge" - data = {"into": target.Name, "confirm": True} - with client as request: - request.cookies = pm_user.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{target.Name}" - - # Should've gotten one email; an [Autogenerated] one. - assert Email.count() == 1 - - # Test accepted merge request notification. - email = Email(1).parse() - subj = r"^\[PRQ#\d+\] Merge Request for [^ ]+ Accepted$" - assert re.match(subj, email.headers.get("Subject")) - assert "[Autogenerated]" in email.body - - -def test_merge_autorequest_with_comment( - client: TestClient, - user: User, - pm_user: User, - pkgbase: PackageBase, - target: PackageBase, -): - """Test merging a package without a request.""" - with db.begin(): - pkgreq.ReqTypeID = MERGE_ID - pkgreq.MergeBaseName = target.Name - - # `pkgreq`.ReqTypeID is already DELETION_ID. - endpoint = f"/pkgbase/{pkgbase.Name}/merge" - data = {"into": target.Name, "confirm": True, "comments": "merged with comment"} - with client as request: - request.cookies = pm_user.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{target.Name}" - - # Should've gotten one email with our comment - assert Email.count() == 1 - - # Test accepted merge request notification. - email = Email(1).parse() - subj = r"^\[PRQ#\d+\] Merge Request for [^ ]+ Accepted$" - assert re.match(subj, email.headers.get("Subject")) - assert "merged with comment" in email.body - - -def test_orphan_request( - client: TestClient, - user: User, - pm_user: User, - pkgbase: PackageBase, - pkgreq: PackageRequest, -): - """Test the standard orphan request route.""" - user2 = create_user("user2", "user2@example.org") - with db.begin(): - db.create(PackageComaintainer, User=user2, PackageBase=pkgbase, Priority=1) - - idle_time = config.getint("options", "request_idle_time") - now = time.utcnow() - with db.begin(): - pkgreq.ReqTypeID = ORPHAN_ID - # Set the request time so it's seen as due (idle_time has passed). - pkgreq.RequestTS = now - idle_time - 10 - - endpoint = f"/pkgbase/{pkgbase.Name}/disown" - comments = "Test orphan closure." - data = {"comments": comments, "confirm": True} - with client as request: - request.cookies = pm_user.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - # We should have unset the maintainer. - assert pkgbase.Maintainer is None - - # We should have removed the comaintainers. - assert not pkgbase.comaintainers.all() - - # Ensure that `pkgreq`.ClosureComment was left alone when specified. - assert pkgreq.ClosureComment == comments - - # Check the email we expect. - assert Email.count() == 1 - email = Email(1).parse() - subj = r"^\[PRQ#%d\] Orphan Request for [^ ]+ Accepted$" % pkgreq.ID - assert re.match(subj, email.headers.get("Subject")) - - -def test_request_post_orphan_autogenerated_closure( - client: TestClient, pm_user: User, pkgbase: PackageBase, pkgreq: PackageRequest -): - idle_time = config.getint("options", "request_idle_time") - now = time.utcnow() - with db.begin(): - pkgreq.ReqTypeID = ORPHAN_ID - # Set the request time so it's seen as due (idle_time has passed). - pkgreq.RequestTS = now - idle_time - 10 - - endpoint = f"/pkgbase/{pkgbase.Name}/disown" - data = {"confirm": True} - with client as request: - request.cookies = pm_user.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - assert Email.count() == 1 - email = Email(1) - expr = r"^\[PRQ#\d+\] Orphan Request for .+ Accepted$" - assert re.match(expr, email.headers.get("Subject")) - - expr = r"\[Autogenerated\] Accepted orphan for .+\." - assert re.search(expr, email.body) - - -def test_request_post_orphan_autoaccept( - client: TestClient, - auser: User, - pkgbase: PackageBase, - caplog: pytest.LogCaptureFixture, -): - """Test the standard pkgbase request route GET method.""" - caplog.set_level(DEBUG) - now = time.utcnow() - auto_orphan_age = config.getint("options", "auto_orphan_age") - with db.begin(): - pkgbase.OutOfDateTS = now - auto_orphan_age - 100 - - endpoint = f"/pkgbase/{pkgbase.Name}/request" - data = { - "type": "orphan", - "comments": "Test request.", - } - with client as request: - request.cookies = auser.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - pkgreq = pkgbase.requests.first() - assert pkgreq is not None - assert pkgreq.ReqTypeID == ORPHAN_ID - - # A Request(Open|Close)Notification should've been sent out. - assert Email.count() == 2 - - # Check the first email; should be our open request. - email = Email(1) - expr = r"^\[PRQ#%d\] Orphan Request for [^ ]+$" % pkgreq.ID - assert re.match(expr, email.headers.get("Subject")) - - # And the second should be the automated closure. - email = Email(2) - expr = r"^\[PRQ#%d\] Orphan Request for [^ ]+ Accepted$" % pkgreq.ID - assert re.match(expr, email.headers.get("Subject")) - - # Check logs. - expr = r"New request #\d+ is marked for auto-orphan." - assert re.search(expr, caplog.text) - - -def test_orphan_as_maintainer(client: TestClient, auser: User, pkgbase: PackageBase): - endpoint = f"/pkgbase/{pkgbase.Name}/disown" - data = {"confirm": True} - with client as request: - request.cookies = auser.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - - # As the pkgbase maintainer, disowning the package just ends up - # either promoting the lowest priority comaintainer or removing - # the associated maintainer relationship altogether. - assert pkgbase.Maintainer is None - - -def test_orphan_without_requests( - client: TestClient, pm_user: User, pkgbase: PackageBase -): - """Test orphans are automatically accepted past a certain date.""" - endpoint = f"/pkgbase/{pkgbase.Name}/disown" - data = {"confirm": True} - with client as request: - request.cookies = pm_user.cookies - resp = request.post(endpoint, data=data) - assert resp.status_code == int(HTTPStatus.BAD_REQUEST) - - errors = get_errors(resp.text) - expected = r"^No due existing orphan requests to accept for .+\.$" - assert re.match(expected, errors[0].text.strip()) - - assert Email.count() == 0 - - -def test_closure_factory_invalid_reqtype_id(): - """Test providing an invalid reqtype_id raises NotImplementedError.""" - automated = ClosureFactory() - match = r"^Unsupported '.+' value\.$" - with pytest.raises(NotImplementedError, match=match): - automated.get_closure(666, None, None, None, ACCEPTED_ID) - with pytest.raises(NotImplementedError, match=match): - automated.get_closure(666, None, None, None, REJECTED_ID) - - -def test_pkgreq_by_id_not_found(): - with pytest.raises(HTTPException): - get_pkgreq_by_id(0) - - -def test_requests_unauthorized(client: TestClient): - with client as request: - resp = request.get("/requests") - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - -def test_requests( - client: TestClient, - pm_user: User, - packages: list[Package], - requests: list[PackageRequest], -): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get( - "/requests", - params={ - # Pass in url query parameters O, SeB and SB to exercise - # their paths inside of the pager_nav used in this request. - "O": 0, # Page 1 - "SeB": "nd", - "SB": "n", - }, - ) - assert resp.status_code == int(HTTPStatus.OK) - - assert "Next ›" in resp.text - assert "Last »" in resp.text - - root = parse_root(resp.text) - # We have 55 requests, our defaults.PP is 50, so expect we have 50 rows. - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == defaults.PP - - # Request page 2 of the requests page. - with client as request: - request.cookies = cookies - resp = request.get("/requests", params={"O": 50}) # Page 2 - assert resp.status_code == int(HTTPStatus.OK) - - assert "‹ Previous" in resp.text - assert "« First" in resp.text - - root = parse_root(resp.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 5 # There are five records left on the second page. - - # Delete requesters user account and check output - with db.begin(): - db.delete(requests[0].User) - - with client as request: - request.cookies = cookies - resp = request.get("/requests") - - assert "(deleted)" in resp.text - - -def test_requests_with_filters( - client: TestClient, - pm_user: User, - packages: list[Package], - requests: list[PackageRequest], -): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get( - "/requests", - params={ - # Pass in url query parameters O, SeB and SB to exercise - # their paths inside of the pager_nav used in this request. - "O": 0, # Page 1 - "SeB": "nd", - "SB": "n", - "filter_pending": True, - "filter_closed": True, - "filter_accepted": True, - "filter_rejected": True, - "filter_maintainer_requests": False, - }, - ) - assert resp.status_code == int(HTTPStatus.OK) - - assert "Next ›" in resp.text - assert "Last »" in resp.text - - root = parse_root(resp.text) - # We have 55 requests, our defaults.PP is 50, so expect we have 50 rows. - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == defaults.PP - - # Request page 2 of the requests page. - with client as request: - request.cookies = cookies - resp = request.get( - "/requests", - params={ - "O": 50, - "filter_pending": True, - "filter_closed": True, - "filter_accepted": True, - "filter_rejected": True, - "filter_maintainer_requests": False, - }, - ) # Page 2 - assert resp.status_code == int(HTTPStatus.OK) - - assert "‹ Previous" in resp.text - assert "« First" in resp.text - - root = parse_root(resp.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 5 # There are five records left on the second page. - - -def test_requests_for_maintainer_requests( - client: TestClient, - pm_user: User, - packages: list[Package], - requests: list[PackageRequest], -): - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get( - "/requests", - params={"filter_maintainer_requests": True}, - ) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - # We only expect 2 requests since we are looking for requests from the maintainers - assert len(rows) == 2 - - -def test_requests_with_package_name_filter( - client: TestClient, - pm_user: User, - user2: User, - packages: list[Package], - requests: list[PackageRequest], -): - # test as PM - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get( - "/requests", - params={"filter_pkg_name": "kg_1"}, - ) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - # We expect 11 requests for all packages containing "kg_1" - assert len(rows) == 11 - - # test as PM, no results - with client as request: - request.cookies = cookies - resp = request.get( - "/requests", - params={"filter_pkg_name": "x"}, - ) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - # We expect 0 requests since we don't have anything containing "x" - assert len(rows) == 0 - - # test as regular user, not related to our package - cookies = {"AURSID": user2.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get( - "/requests", - params={"filter_pkg_name": packages[0].PackageBase.Name}, - ) - assert resp.status_code == int(HTTPStatus.OK) - - root = parse_root(resp.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - # We don't expect to get any requests - assert len(rows) == 0 - - -def test_requests_by_deleted_users( - client: TestClient, user: User, pm_user: User, pkgreq: PackageRequest -): - with db.begin(): - db.delete(user) - - cookies = {"AURSID": pm_user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get("/requests") - assert resp.status_code == HTTPStatus.OK - - root = parse_root(resp.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == 1 - - -def test_requests_selfmade( - client: TestClient, user: User, requests: list[PackageRequest] -): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get("/requests") - assert resp.status_code == int(HTTPStatus.OK) - - # As the user who creates all of the requests, we should see all of them. - # However, we are not allowed to accept any of them ourselves. - root = parse_root(resp.text) - rows = root.xpath('//table[@class="results"]/tbody/tr') - assert len(rows) == defaults.PP - - # Our first and only link in the last row should be "Close". - for row in rows: - last_row = row.xpath("./td")[-1].xpath("./a")[0] - assert last_row.text.strip() == "Close" - - -def test_requests_close(client: TestClient, user: User, pkgreq: PackageRequest): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get(f"/requests/{pkgreq.ID}/close") - assert resp.status_code == int(HTTPStatus.OK) - - -def test_requests_close_unauthorized( - client: TestClient, maintainer: User, pkgreq: PackageRequest -): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.get( - f"/requests/{pkgreq.ID}/close", - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == "/" - - -def test_requests_close_post_unauthorized( - client: TestClient, maintainer: User, pkgreq: PackageRequest -): - cookies = {"AURSID": maintainer.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - f"/requests/{pkgreq.ID}/close", - data={"reason": ACCEPTED_ID}, - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - assert resp.headers.get("location") == "/" - - -def test_requests_close_post(client: TestClient, user: User, pkgreq: PackageRequest): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post(f"/requests/{pkgreq.ID}/close") - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - assert pkgreq.Status == REJECTED_ID - assert pkgreq.Closer == user - assert pkgreq.ClosureComment == str() - - -def test_requests_close_post_rejected( - client: TestClient, user: User, pkgreq: PackageRequest -): - cookies = {"AURSID": user.login(Request(), "testPassword")} - with client as request: - request.cookies = cookies - resp = request.post( - f"/requests/{pkgreq.ID}/close", - ) - assert resp.status_code == int(HTTPStatus.SEE_OTHER) - - assert pkgreq.Status == REJECTED_ID - assert pkgreq.Closer == user - assert pkgreq.ClosureComment == str() diff --git a/test/test_routes.py b/test/test_routes.py deleted file mode 100644 index c104211e..00000000 --- a/test/test_routes.py +++ /dev/null @@ -1,159 +0,0 @@ -import re -import urllib.parse -from http import HTTPStatus - -import lxml.etree -import pytest -from fastapi.testclient import TestClient - -from aurweb import db -from aurweb.asgi import app -from aurweb.models.account_type import USER_ID -from aurweb.models.user import User -from aurweb.testing.requests import Request - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def client() -> TestClient: - client = TestClient(app=app) - - # disable redirects for our tests - client.follow_redirects = False - yield client - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -def test_index(client: TestClient): - """Test the index route at '/'.""" - with client as req: - response = req.get("/") - assert response.status_code == int(HTTPStatus.OK) - - -def test_index_security_headers(client: TestClient): - """Check for the existence of CSP, XCTO, XFO and RP security headers. - - CSP: Content-Security-Policy - XCTO: X-Content-Type-Options - RP: Referrer-Policy - XFO: X-Frame-Options - """ - # Use `with` to trigger FastAPI app events. - with client as req: - response = req.get("/") - assert response.status_code == int(HTTPStatus.OK) - assert response.headers.get("Content-Security-Policy") is not None - assert response.headers.get("X-Content-Type-Options") == "nosniff" - assert response.headers.get("Referrer-Policy") == "same-origin" - assert response.headers.get("X-Frame-Options") == "SAMEORIGIN" - - -def test_favicon(client: TestClient): - """Test the favicon route at '/favicon.ico'.""" - with client as request: - response1 = request.get("/static/images/favicon.ico") - response2 = request.get("/favicon.ico", follow_redirects=True) - assert response1.status_code == int(HTTPStatus.OK) - assert response1.content == response2.content - - -def test_language(client: TestClient): - """Test the language post route as a guest user.""" - post_data = {"set_lang": "de", "next": "/"} - with client as req: - response = req.post("/language", data=post_data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - -def test_language_invalid_next(client: TestClient): - """Test an invalid next route at '/language'.""" - post_data = {"set_lang": "de", "next": "https://evil.net"} - with client as req: - response = req.post("/language", data=post_data) - assert response.status_code == int(HTTPStatus.BAD_REQUEST) - - -def test_user_language(client: TestClient, user: User): - """Test the language post route as an authenticated user.""" - post_data = {"set_lang": "de", "next": "/"} - - sid = user.login(Request(), "testPassword") - assert sid is not None - - with client as req: - req.cookies = {"AURSID": sid} - response = req.post("/language", data=post_data) - assert response.status_code == int(HTTPStatus.SEE_OTHER) - assert user.LangPreference == "de" - - -def test_language_query_params(client: TestClient): - """Test the language post route with query params.""" - next = urllib.parse.quote_plus("/") - post_data = {"set_lang": "de", "next": "/", "q": f"next={next}"} - q = post_data.get("q") - with client as req: - response = req.post("/language", data=post_data) - assert response.headers.get("location") == f"/?{q}" - assert response.status_code == int(HTTPStatus.SEE_OTHER) - - -def test_error_messages(client: TestClient): - with client as request: - response1 = request.get("/thisroutedoesnotexist") - response2 = request.get("/raisefivethree") - assert response1.status_code == int(HTTPStatus.NOT_FOUND) - assert response2.status_code == int(HTTPStatus.SERVICE_UNAVAILABLE) - - -def test_nonce_csp(client: TestClient): - with client as request: - response = request.get("/") - data = response.headers.get("Content-Security-Policy") - nonce = next(field for field in data.split("; ") if "nonce" in field) - match = re.match(r"^script-src .*'nonce-([a-fA-F0-9]{8})' .*$", nonce) - nonce = match.group(1) - assert nonce is not None and len(nonce) == 8 - - parser = lxml.etree.HTMLParser(recover=True) - root = lxml.etree.fromstring(response.text, parser=parser) - - nonce_verified = False - scripts = root.xpath("//script") - for script in scripts: - if script.text is not None: - assert "nonce" in script.keys() - if not (nonce_verified := (script.get("nonce") == nonce)): - break - assert nonce_verified is True - - -def test_id_redirect(client: TestClient): - with client as request: - response = request.get( - "/", - params={ - "id": "test", # This param will be rewritten into Location. - "key": "value", # Test that this param persists. - "key2": "value2", # And this one. - }, - ) - assert response.headers.get("location") == "/test?key=value&key2=value2" diff --git a/test/test_rpc.py b/test/test_rpc.py deleted file mode 100644 index a2256700..00000000 --- a/test/test_rpc.py +++ /dev/null @@ -1,1239 +0,0 @@ -import re -from http import HTTPStatus -from unittest import mock - -import orjson -import pytest -from fastapi.testclient import TestClient -from redis.client import Pipeline - -import aurweb.models.dependency_type as dt -import aurweb.models.relation_type as rt -from aurweb import asgi, config, db, rpc, scripts, time -from aurweb.aur_redis import redis_connection -from aurweb.models.account_type import USER_ID -from aurweb.models.dependency_type import DEPENDS_ID -from aurweb.models.group import Group -from aurweb.models.license import License -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_comaintainer import PackageComaintainer -from aurweb.models.package_dependency import PackageDependency -from aurweb.models.package_group import PackageGroup -from aurweb.models.package_keyword import PackageKeyword -from aurweb.models.package_license import PackageLicense -from aurweb.models.package_relation import PackageRelation -from aurweb.models.package_vote import PackageVote -from aurweb.models.relation_type import PROVIDES_ID -from aurweb.models.user import User - - -@pytest.fixture -def client() -> TestClient: - yield TestClient(app=asgi.app) - - -@pytest.fixture -def user(db_test) -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User 1", - Passwd=str(), - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def user2() -> User: - with db.begin(): - user = db.create( - User, - Username="user2", - Email="user2@example.org", - RealName="Test User 2", - Passwd=str(), - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def user3() -> User: - with db.begin(): - user = db.create( - User, - Username="user3", - Email="user3@example.org", - RealName="Test User 3", - Passwd=str(), - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def packages(user: User, user2: User, user3: User) -> list[Package]: - output = [] - - # Create package records used in our tests. - with db.begin(): - pkgbase = db.create( - PackageBase, - Name="big-chungus", - Maintainer=user, - Packager=user, - Submitter=user2, - ) - pkg = db.create( - Package, - PackageBase=pkgbase, - Name=pkgbase.Name, - Description="Bunny bunny around bunny", - URL="https://example.com/", - ) - output.append(pkg) - - pkgbase = db.create( - PackageBase, - Name="chungy-chungus", - Maintainer=user, - Packager=user, - Submitter=user2, - ) - pkg = db.create( - Package, - PackageBase=pkgbase, - Name=pkgbase.Name, - Description="Wubby wubby on wobba wuubu", - URL="https://example.com/", - ) - output.append(pkg) - - pkgbase = db.create( - PackageBase, Name="gluggly-chungus", Maintainer=user, Packager=user - ) - pkg = db.create( - Package, - PackageBase=pkgbase, - Name=pkgbase.Name, - Description="glurrba glurrba gur globba", - URL="https://example.com/", - ) - output.append(pkg) - - pkgbase = db.create( - PackageBase, Name="fugly-chungus", Maintainer=user, Packager=user - ) - - desc = "A Package belonging to a PackageBase with another name." - pkg = db.create( - Package, - PackageBase=pkgbase, - Name="other-pkg", - Description=desc, - URL="https://example.com", - ) - output.append(pkg) - - pkgbase = db.create(PackageBase, Name="woogly-chungus") - pkg = db.create( - Package, - PackageBase=pkgbase, - Name=pkgbase.Name, - Description="wuggla woblabeloop shemashmoop", - URL="https://example.com/", - ) - output.append(pkg) - - # Setup a few more related records on the first package: - # a license, group, some keywords, comaintainer and some votes. - with db.begin(): - lic = db.create(License, Name="GPL") - db.create(PackageLicense, Package=output[0], License=lic) - - grp = db.create(Group, Name="testgroup") - db.create(PackageGroup, Package=output[0], Group=grp) - - db.create( - PackageComaintainer, - PackageBase=output[0].PackageBase, - User=user2, - Priority=1, - ) - - for keyword in ["big-chungus", "smol-chungus", "sizeable-chungus"]: - db.create( - PackageKeyword, PackageBase=output[0].PackageBase, Keyword=keyword - ) - - now = time.utcnow() - for user_ in [user, user2, user3]: - db.create( - PackageVote, User=user_, PackageBase=output[0].PackageBase, VoteTS=now - ) - scripts.popupdate.run_single(output[0].PackageBase) - - yield output - - -@pytest.fixture -def depends(packages: list[Package]) -> list[PackageDependency]: - output = [] - - with db.begin(): - dep = db.create( - PackageDependency, - Package=packages[0], - DepTypeID=dt.DEPENDS_ID, - DepName="chungus-depends", - ) - output.append(dep) - - dep = db.create( - PackageDependency, - Package=packages[1], - DepTypeID=dt.DEPENDS_ID, - DepName="chungy-depends", - ) - output.append(dep) - - dep = db.create( - PackageDependency, - Package=packages[0], - DepTypeID=dt.OPTDEPENDS_ID, - DepName="chungus-optdepends", - DepCondition="=50", - ) - output.append(dep) - - dep = db.create( - PackageDependency, - Package=packages[0], - DepTypeID=dt.MAKEDEPENDS_ID, - DepName="chungus-makedepends", - ) - output.append(dep) - - dep = db.create( - PackageDependency, - Package=packages[0], - DepTypeID=dt.CHECKDEPENDS_ID, - DepName="chungus-checkdepends", - ) - output.append(dep) - - yield output - - -@pytest.fixture -def relations(user: User, packages: list[Package]) -> list[PackageRelation]: - output = [] - - with db.begin(): - rel = db.create( - PackageRelation, - Package=packages[0], - RelTypeID=rt.CONFLICTS_ID, - RelName="chungus-conflicts", - ) - output.append(rel) - - rel = db.create( - PackageRelation, - Package=packages[1], - RelTypeID=rt.CONFLICTS_ID, - RelName="chungy-conflicts", - ) - output.append(rel) - - rel = db.create( - PackageRelation, - Package=packages[0], - RelTypeID=rt.PROVIDES_ID, - RelName="chungus-provides", - RelCondition="<=200", - ) - output.append(rel) - - rel = db.create( - PackageRelation, - Package=packages[0], - RelTypeID=rt.REPLACES_ID, - RelName="chungus-replaces", - RelCondition="<=200", - ) - output.append(rel) - - # Finally, yield the packages. - yield output - - -@pytest.fixture -def comaintainer( - user2: User, user3: User, packages: list[Package] -) -> list[PackageComaintainer]: - output = [] - - with db.begin(): - comaintainer = db.create( - PackageComaintainer, - User=user2, - PackageBase=packages[0].PackageBase, - Priority=1, - ) - output.append(comaintainer) - - comaintainer = db.create( - PackageComaintainer, - User=user3, - PackageBase=packages[0].PackageBase, - Priority=1, - ) - output.append(comaintainer) - - # Finally, yield the packages. - yield output - - -@pytest.fixture(autouse=True) -def setup(db_test): - # Create some extra package relationships. - pass - - -@pytest.fixture -def pipeline(): - redis = redis_connection() - pipeline = redis.pipeline() - - # 'testclient' is our fallback value in case request.client is None - # which is the case for TestClient - pipeline.delete("ratelimit-ws:testclient") - pipeline.delete("ratelimit:testclient") - pipeline.execute() - - yield pipeline - - -def test_rpc_documentation(client: TestClient): - with client as request: - resp = request.get("/rpc") - assert resp.status_code == int(HTTPStatus.OK) - assert "aurweb RPC Interface" in resp.text - - -def test_rpc_documentation_missing(): - config_get = config.get - - def mock_get(section: str, key: str) -> str: - if section == "options" and key == "aurwebdir": - return "/missing" - return config_get(section, key) - - with mock.patch("aurweb.config.get", side_effect=mock_get): - config.rehash() - expr = r"^doc/rpc\.html could not be read$" - with pytest.raises(OSError, match=expr): - rpc.documentation() - config.rehash() - - -def test_rpc_singular_info( - client: TestClient, - user: User, - user2: User, - packages: list[Package], - depends: list[PackageDependency], - relations: list[PackageRelation], - comaintainer: list[PackageComaintainer], -): - # Define expected response. - pkg = packages[0] - expected_data = { - "version": 5, - "results": [ - { - "Name": pkg.Name, - "Version": pkg.Version, - "Description": pkg.Description, - "URL": pkg.URL, - "PackageBase": pkg.PackageBase.Name, - "NumVotes": pkg.PackageBase.NumVotes, - "Popularity": float(pkg.PackageBase.Popularity), - "OutOfDate": None, - "Maintainer": user.Username, - "Submitter": user2.Username, - "URLPath": f"/cgit/aur.git/snapshot/{pkg.Name}.tar.gz", - "Depends": ["chungus-depends"], - "OptDepends": ["chungus-optdepends=50"], - "MakeDepends": ["chungus-makedepends"], - "CheckDepends": ["chungus-checkdepends"], - "Conflicts": ["chungus-conflicts"], - "CoMaintainers": ["user2", "user3"], - "Provides": ["chungus-provides<=200"], - "Replaces": ["chungus-replaces<=200"], - "License": [pkg.package_licenses.first().License.Name], - "Keywords": ["big-chungus", "sizeable-chungus", "smol-chungus"], - "Groups": ["testgroup"], - } - ], - "resultcount": 1, - "type": "multiinfo", - } - - # Make dummy request. - with client as request: - resp = request.get( - "/rpc", - params={ - "v": 5, - "type": "info", - "arg": ["chungy-chungus", "big-chungus"], - }, - ) - - # Load request response into Python dictionary. - response_data = orjson.loads(resp.text) - - # Remove the FirstSubmitted LastModified, ID and PackageBaseID keys from - # reponse, as the key's values aren't guaranteed to match between the two - # (the keys are already removed from 'expected_data'). - for i in ["FirstSubmitted", "LastModified", "ID", "PackageBaseID"]: - response_data["results"][0].pop(i) - - # Validate that the new dictionaries are the same. - assert response_data == expected_data - - -def test_rpc_split_package_urlpath(client: TestClient, user: User): - with db.begin(): - pkgbase = db.create(PackageBase, Name="pkg", Maintainer=user, Packager=user) - pkgs = [ - db.create(Package, PackageBase=pkgbase, Name="pkg_1"), - db.create(Package, PackageBase=pkgbase, Name="pkg_2"), - ] - - with client as request: - response = request.get( - "/rpc", - params={ - "v": 5, - "type": "info", - "arg": [pkgs[0].Name], - }, - ) - - data = orjson.loads(response.text) - snapshot_uri = config.get("options", "snapshot_uri") - urlpath = data.get("results")[0].get("URLPath") - assert urlpath == (snapshot_uri % pkgbase.Name) - - -def test_rpc_nonexistent_package(client: TestClient): - # Make dummy request. - with client as request: - response = request.get("/rpc/?v=5&type=info&arg=nonexistent-package") - - # Load request response into Python dictionary. - response_data = orjson.loads(response.content.decode()) - - # Validate data. - assert response_data["resultcount"] == 0 - - -def test_rpc_multiinfo(client: TestClient, packages: list[Package]): - # Make dummy request. - request_packages = ["big-chungus", "chungy-chungus"] - with client as request: - response = request.get( - "/rpc", params={"v": 5, "type": "info", "arg[]": request_packages} - ) - - # Load request response into Python dictionary. - response_data = orjson.loads(response.content.decode()) - - # Validate data. - for i in response_data["results"]: - request_packages.remove(i["Name"]) - - assert request_packages == [] - - -def test_rpc_mixedargs(client: TestClient, packages: list[Package]): - # Make dummy request. - response1_packages = ["gluggly-chungus"] - response2_packages = ["gluggly-chungus", "chungy-chungus"] - - with client as request: - # Supply all of the args in the url to enforce ordering. - response1 = request.get( - "/rpc?v=5&arg[]=big-chungus&arg=gluggly-chungus&type=info" - ) - assert response1.status_code == int(HTTPStatus.OK) - - with client as request: - response2 = request.get( - "/rpc?v=5&arg=big-chungus&arg[]=gluggly-chungus" - "&type=info&arg[]=chungy-chungus" - ) - assert response1.status_code == int(HTTPStatus.OK) - - # Load request response into Python dictionary. - response1_data = orjson.loads(response1.content.decode()) - response2_data = orjson.loads(response2.content.decode()) - - # Validate data. - for i in response1_data["results"]: - response1_packages.remove(i["Name"]) - - for i in response2_data["results"]: - response2_packages.remove(i["Name"]) - - for i in [response1_packages, response2_packages]: - assert i == [] - - -def test_rpc_no_dependencies_omits_key( - client: TestClient, - user: User, - user2: User, - packages: list[Package], - depends: list[PackageDependency], - relations: list[PackageRelation], -): - """ - This makes sure things like 'MakeDepends' get removed from JSON strings - when they don't have set values. - """ - pkg = packages[1] - expected_response = { - "version": 5, - "results": [ - { - "Name": pkg.Name, - "Version": pkg.Version, - "Description": pkg.Description, - "URL": pkg.URL, - "PackageBase": pkg.PackageBase.Name, - "NumVotes": pkg.PackageBase.NumVotes, - "Popularity": int(pkg.PackageBase.Popularity), - "OutOfDate": None, - "Maintainer": user.Username, - "Submitter": user2.Username, - "URLPath": "/cgit/aur.git/snapshot/chungy-chungus.tar.gz", - "Depends": ["chungy-depends"], - "Conflicts": ["chungy-conflicts"], - "License": [], - "Keywords": [], - } - ], - "resultcount": 1, - "type": "multiinfo", - } - - # Make dummy request. - with client as request: - response = request.get( - "/rpc", params={"v": 5, "type": "info", "arg": "chungy-chungus"} - ) - response_data = orjson.loads(response.content.decode()) - - # Remove inconsistent keys. - for i in ["ID", "PackageBaseID", "FirstSubmitted", "LastModified"]: - response_data["results"][0].pop(i) - - assert response_data == expected_response - - -def test_rpc_bad_type(client: TestClient): - # Define expected response. - expected_data = { - "version": 5, - "results": [], - "resultcount": 0, - "type": "error", - "error": "Incorrect request type specified.", - } - - # Make dummy request. - with client as request: - response = request.get( - "/rpc", params={"v": 5, "type": "invalid-type", "arg": "big-chungus"} - ) - - # Load request response into Python dictionary. - response_data = orjson.loads(response.content.decode()) - - # Validate data. - assert expected_data == response_data - - -def test_rpc_bad_version(client: TestClient): - # Define expected response. - expected_data = { - "version": 0, - "resultcount": 0, - "results": [], - "type": "error", - "error": "Invalid version specified.", - } - - # Make dummy request. - with client as request: - response = request.get( - "/rpc", params={"v": 0, "type": "info", "arg": "big-chungus"} - ) - - # Load request response into Python dictionary. - response_data = orjson.loads(response.content.decode()) - - # Validate data. - assert expected_data == response_data - - -def test_rpc_no_version(client: TestClient): - # Define expected response. - expected_data = { - "version": None, - "resultcount": 0, - "results": [], - "type": "error", - "error": "Please specify an API version.", - } - - # Make dummy request. - with client as request: - response = request.get("/rpc", params={"type": "info", "arg": "big-chungus"}) - - # Load request response into Python dictionary. - response_data = orjson.loads(response.content.decode()) - - # Validate data. - assert expected_data == response_data - - -def test_rpc_no_type(client: TestClient): - # Define expected response. - expected_data = { - "version": 5, - "results": [], - "resultcount": 0, - "type": "error", - "error": "No request type/data specified.", - } - - # Make dummy request. - with client as request: - response = request.get("/rpc", params={"v": 5, "arg": "big-chungus"}) - - # Load request response into Python dictionary. - response_data = orjson.loads(response.content.decode()) - - # Validate data. - assert expected_data == response_data - - -def test_rpc_no_args(client: TestClient): - # Define expected response. - expected_data = { - "version": 5, - "results": [], - "resultcount": 0, - "type": "error", - "error": "No request type/data specified.", - } - - # Make dummy request. - with client as request: - response = request.get("/rpc", params={"v": 5, "type": "info"}) - - # Load request response into Python dictionary. - response_data = orjson.loads(response.content.decode()) - - # Validate data. - assert expected_data == response_data - - -def test_rpc_no_maintainer(client: TestClient, packages: list[Package]): - # Make dummy request. - with client as request: - response = request.get( - "/rpc", params={"v": 5, "type": "info", "arg": "woogly-chungus"} - ) - - # Load request response into Python dictionary. - response_data = orjson.loads(response.content.decode()) - - # Validate data. - assert response_data["results"][0]["Maintainer"] is None - - -def test_rpc_suggest_pkgbase(client: TestClient, packages: list[Package]): - params = {"v": 5, "type": "suggest-pkgbase", "arg": "big"} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data == ["big-chungus"] - - params["arg"] = "chungy" - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data == ["chungy-chungus"] - - # Test no arg supplied. - del params["arg"] - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data == [] - - # Test that suggestions are only given based on the beginning - # of the keyword string. - params["arg"] = "ther-pkg" - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data == [] - - -def test_rpc_suggest(client: TestClient, packages: list[Package]): - params = {"v": 5, "type": "suggest", "arg": "other"} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data == ["other-pkg"] - - # Test non-existent Package. - params["arg"] = "nonexistent" - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data == [] - - # Test no arg supplied. - del params["arg"] - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data == [] - - # Test that suggestions are only given based on the beginning - # of the keyword string. - params["arg"] = "ther-pkg" - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data == [] - - -def mock_config_getint(section: str, key: str): - if key == "request_limit": - return 4 - elif key == "window_length": - return 100 - return config.getint(section, key) - - -@mock.patch("aurweb.config.getint", side_effect=mock_config_getint) -def test_rpc_ratelimit( - getint: mock.MagicMock, - client: TestClient, - pipeline: Pipeline, - packages: list[Package], -): - params = {"v": 5, "type": "suggest-pkgbase", "arg": "big"} - - for i in range(4): - # The first 4 requests should be good. - with client as request: - response = request.get("/rpc", params=params) - assert response.status_code == int(HTTPStatus.OK) - - # The fifth request should be banned. - with client as request: - response = request.get("/rpc", params=params) - assert response.status_code == int(HTTPStatus.TOO_MANY_REQUESTS) - - # Delete the cached records. - pipeline.delete("ratelimit-ws:testclient") - pipeline.delete("ratelimit:testclient") - one, two = pipeline.execute() - assert one and two - - # The new first request should be good. - with client as request: - response = request.get("/rpc", params=params) - assert response.status_code == int(HTTPStatus.OK) - - -def test_rpc_etag(client: TestClient, packages: list[Package]): - params = {"v": 5, "type": "suggest-pkgbase", "arg": "big"} - - with client as request: - response1 = request.get("/rpc", params=params) - with client as request: - response2 = request.get("/rpc", params=params) - - assert response1.headers.get("ETag") is not None - assert response1.headers.get("ETag") != str() - assert response1.headers.get("ETag") == response2.headers.get("ETag") - - -def test_rpc_search_arg_too_small(client: TestClient): - params = {"v": 5, "type": "search", "arg": "b"} - with client as request: - response = request.get("/rpc", params=params) - assert response.status_code == int(HTTPStatus.OK) - assert response.json().get("error") == "Query arg too small." - - -def test_rpc_search(client: TestClient, packages: list[Package]): - params = {"v": 5, "type": "search", "arg": "big"} - with client as request: - response = request.get("/rpc", params=params) - assert response.status_code == int(HTTPStatus.OK) - - data = response.json() - assert data.get("resultcount") == 1 - - result = data.get("results")[0] - assert result.get("Name") == packages[0].Name - assert result.get("Submitter") is None - - # Test the If-None-Match headers. - etag = response.headers.get("ETag").strip('"') - headers = {"If-None-Match": etag} - response = request.get("/rpc", params=params, headers=headers) - assert response.status_code == int(HTTPStatus.NOT_MODIFIED) - assert response.content == b"" - - # No args on non-m by types return an error. - del params["arg"] - with client as request: - response = request.get("/rpc", params=params) - assert response.json().get("error") == "No request type/data specified." - - -def test_rpc_msearch(client: TestClient, user: User, packages: list[Package]): - params = {"v": 5, "type": "msearch", "arg": user.Username} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - - # user1 maintains 4 packages; assert that we got them all. - assert data.get("resultcount") == 4 - names = list(sorted(r.get("Name") for r in data.get("results"))) - expected_results = ["big-chungus", "chungy-chungus", "gluggly-chungus", "other-pkg"] - assert names == expected_results - - # Search for a non-existent maintainer, giving us zero packages. - params["arg"] = "blah-blah" - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 0 - - with db.begin(): - packages[0].PackageBase.Maintainer = None - - # A missing arg still succeeds, but it returns all orphans. - # Just verify that we receive no error and the orphaned result. - params.pop("arg") - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 2 - result = data.get("results")[0] - assert result.get("Name") == "big-chungus" - - -def test_rpc_search_depends( - client: TestClient, packages: list[Package], depends: list[PackageDependency] -): - params = {"v": 5, "type": "search", "by": "depends", "arg": "chungus-depends"} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 1 - result = data.get("results")[0] - assert result.get("Name") == packages[0].Name - - -def test_rpc_search_makedepends( - client: TestClient, packages: list[Package], depends: list[PackageDependency] -): - params = { - "v": 5, - "type": "search", - "by": "makedepends", - "arg": "chungus-makedepends", - } - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 1 - result = data.get("results")[0] - assert result.get("Name") == packages[0].Name - - -def test_rpc_search_optdepends( - client: TestClient, packages: list[Package], depends: list[PackageDependency] -): - params = {"v": 5, "type": "search", "by": "optdepends", "arg": "chungus-optdepends"} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 1 - result = data.get("results")[0] - assert result.get("Name") == packages[0].Name - - -def test_rpc_search_checkdepends( - client: TestClient, packages: list[Package], depends: list[PackageDependency] -): - params = { - "v": 5, - "type": "search", - "by": "checkdepends", - "arg": "chungus-checkdepends", - } - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 1 - result = data.get("results")[0] - assert result.get("Name") == packages[0].Name - - -def test_rpc_search_provides( - client: TestClient, packages: list[Package], relations: list[PackageRelation] -): - params = {"v": 5, "type": "search", "by": "provides", "arg": "chungus-provides"} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 1 - result = data.get("results")[0] - assert result.get("Name") == packages[0].Name - - -def test_rpc_search_provides_self( - client: TestClient, packages: list[Package], relations: list[PackageRelation] -): - params = {"v": 5, "type": "search", "by": "provides", "arg": "big-chungus"} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - # expected to return "big-chungus" - assert data.get("resultcount") == 1 - result = data.get("results")[0] - assert result.get("Name") == packages[0].Name - - -def test_rpc_search_conflicts( - client: TestClient, packages: list[Package], relations: list[PackageRelation] -): - params = {"v": 5, "type": "search", "by": "conflicts", "arg": "chungus-conflicts"} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 1 - result = data.get("results")[0] - assert result.get("Name") == packages[0].Name - - -def test_rpc_search_replaces( - client: TestClient, packages: list[Package], relations: list[PackageRelation] -): - params = {"v": 5, "type": "search", "by": "replaces", "arg": "chungus-replaces"} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 1 - result = data.get("results")[0] - assert result.get("Name") == packages[0].Name - - -def test_rpc_search_groups( - client: TestClient, packages: list[Package], depends: list[PackageDependency] -): - params = { - "v": 5, - "type": "search", - "by": "groups", - "arg": "testgroup", - } - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 1 - result = data.get("results")[0] - assert result.get("Name") == packages[0].Name - - -def test_rpc_search_submitter(client: TestClient, user2: User, packages: list[Package]): - params = {"v": 5, "type": "search", "by": "submitter", "arg": user2.Username} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - - # user2 submitted 2 packages - assert data.get("resultcount") == 2 - names = list(sorted(r.get("Name") for r in data.get("results"))) - expected_results = ["big-chungus", "chungy-chungus"] - assert names == expected_results - - # Search for a non-existent submitter, giving us zero packages. - params["arg"] = "blah-blah" - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 0 - - -def test_rpc_search_keywords(client: TestClient, packages: list[Package]): - params = {"v": 5, "type": "search", "by": "keywords", "arg": "big-chungus"} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - - # should get 2 packages - assert data.get("resultcount") == 1 - names = list(sorted(r.get("Name") for r in data.get("results"))) - expected_results = ["big-chungus"] - assert names == expected_results - - # non-existent search - params["arg"] = "blah-blah" - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 0 - - -def test_rpc_search_comaintainers( - client: TestClient, user2: User, packages: list[Package] -): - params = {"v": 5, "type": "search", "by": "comaintainers", "arg": user2.Username} - with client as request: - response = request.get("/rpc", params=params) - data = response.json() - - # should get 1 package - assert data.get("resultcount") == 1 - names = list(sorted(r.get("Name") for r in data.get("results"))) - expected_results = ["big-chungus"] - assert names == expected_results - - # non-existent search - params["arg"] = "blah-blah" - response = request.get("/rpc", params=params) - data = response.json() - assert data.get("resultcount") == 0 - - -def test_rpc_incorrect_by(client: TestClient): - params = {"v": 5, "type": "search", "by": "fake", "arg": "big"} - with client as request: - response = request.get("/rpc", params=params) - assert response.json().get("error") == "Incorrect by field specified." - - -def test_rpc_jsonp_callback(client: TestClient): - """Test the callback parameter. - - For end-to-end verification, the `examples/jsonp.html` file can be - used to submit jsonp callback requests to the RPC. - """ - params = {"v": 5, "type": "search", "arg": "big", "callback": "jsonCallback"} - with client as request: - response = request.get("/rpc", params=params) - assert response.headers.get("content-type") == "text/javascript" - assert re.search(r"^/\*\*/jsonCallback\(.*\)$", response.text) is not None - - # Test an invalid callback name; we get an application/json error. - params["callback"] = "jsonCallback!" - with client as request: - response = request.get("/rpc", params=params) - assert response.headers.get("content-type") == "application/json" - assert response.json().get("error") == "Invalid callback name." - - -def test_rpc_post(client: TestClient, packages: list[Package]): - data = {"v": 5, "type": "info", "arg": "big-chungus", "arg[]": ["chungy-chungus"]} - with client as request: - resp = request.post("/rpc", data=data) - assert resp.status_code == int(HTTPStatus.OK) - assert resp.json().get("resultcount") == 2 - - -def test_rpc_too_many_search_results(client: TestClient, packages: list[Package]): - config_getint = config.getint - - def mock_config(section: str, key: str): - if key == "max_rpc_results": - return 1 - return config_getint(section, key) - - params = {"v": 5, "type": "search", "arg": "chungus"} - with mock.patch("aurweb.config.getint", side_effect=mock_config): - with client as request: - resp = request.get("/rpc", params=params) - assert resp.json().get("error") == "Too many package results." - - -def test_rpc_too_many_info_results(client: TestClient, packages: list[Package]): - # Make many of these packages depend and rely on each other. - # This way, we can test to see that the exceeded limit stays true - # regardless of the number of related records. - with db.begin(): - for i in range(len(packages) - 1): - db.create( - PackageDependency, - DepTypeID=DEPENDS_ID, - Package=packages[i], - DepName=packages[i + 1].Name, - ) - db.create( - PackageRelation, - RelTypeID=PROVIDES_ID, - Package=packages[i], - RelName=packages[i + 1].Name, - ) - - config_getint = config.getint - - def mock_config(section: str, key: str): - if key == "max_rpc_results": - return 1 - return config_getint(section, key) - - params = {"v": 5, "type": "info", "arg[]": [p.Name for p in packages]} - with mock.patch("aurweb.config.getint", side_effect=mock_config): - with client as request: - resp = request.get("/rpc", params=params) - assert resp.json().get("error") == "Too many package results." - - -def test_rpc_openapi_info(client: TestClient, packages: list[Package]): - pkgname = packages[0].Name - - with client as request: - endp = f"/rpc/v5/info/{pkgname}" - resp = request.get(endp) - assert resp.status_code == HTTPStatus.OK - - data = resp.json() - assert data.get("resultcount") == 1 - - -def test_rpc_openapi_multiinfo(client: TestClient, packages: list[Package]): - pkgname = packages[0].Name - - with client as request: - endp = "/rpc/v5/info" - resp = request.get(endp, params={"arg[]": [pkgname]}) - assert resp.status_code == HTTPStatus.OK - - data = resp.json() - assert data.get("resultcount") == 1 - - -def test_rpc_openapi_multiinfo_post(client: TestClient, packages: list[Package]): - pkgname = packages[0].Name - - with client as request: - endp = "/rpc/v5/info" - resp = request.post(endp, json={"arg": [pkgname]}) - assert resp.status_code == HTTPStatus.OK - - data = resp.json() - assert data.get("resultcount") == 1 - - -def test_rpc_openapi_multiinfo_post_bad_request( - client: TestClient, packages: list[Package] -): - pkgname = packages[0].Name - - with client as request: - endp = "/rpc/v5/info" - resp = request.post(endp, json={"arg": pkgname}) - assert resp.status_code == HTTPStatus.BAD_REQUEST - - data = resp.json() - expected = "the 'arg' parameter must be of array type" - assert data.get("error") == expected - - -def test_rpc_openapi_search_arg(client: TestClient, packages: list[Package]): - pkgname = packages[0].Name - - with client as request: - endp = f"/rpc/v5/search/{pkgname}" - resp = request.get(endp) - assert resp.status_code == HTTPStatus.OK - - data = resp.json() - assert data.get("resultcount") == 1 - - -def test_rpc_openapi_search(client: TestClient, packages: list[Package]): - pkgname = packages[0].Name - - with client as request: - endp = "/rpc/v5/search" - resp = request.get(endp, params={"arg": pkgname}) - assert resp.status_code == HTTPStatus.OK - - data = resp.json() - assert data.get("resultcount") == 1 - - -def test_rpc_openapi_search_post(client: TestClient, packages: list[Package]): - pkgname = packages[0].Name - - with client as request: - endp = "/rpc/v5/search" - resp = request.post(endp, json={"arg": pkgname}) - assert resp.status_code == HTTPStatus.OK - - data = resp.json() - assert data.get("resultcount") == 1 - - -def test_rpc_openapi_search_post_bad_request(client: TestClient): - # Test by parameter - with client as request: - endp = "/rpc/v5/search" - resp = request.post(endp, json={"by": 1}) - assert resp.status_code == HTTPStatus.BAD_REQUEST - data = resp.json() - expected = "the 'by' parameter must be of string type" - assert data.get("error") == expected - - # Test arg parameter - with client as request: - endp = "/rpc/v5/search" - resp = request.post(endp, json={"arg": ["a", "list"]}) - assert resp.status_code == HTTPStatus.BAD_REQUEST - data = resp.json() - expected = "the 'arg' parameter must be of string type" - assert data.get("error") == expected - - -def test_rpc_openapi_suggest(client: TestClient, packages: list[Package]): - suggestions = { - "big": ["big-chungus"], - "chungy": ["chungy-chungus"], - } - - for term, expected in suggestions.items(): - with client as request: - endp = f"/rpc/v5/suggest/{term}" - resp = request.get(endp) - assert resp.status_code == HTTPStatus.OK - - data = resp.json() - assert data == expected diff --git a/test/test_rss.py b/test/test_rss.py deleted file mode 100644 index d227a183..00000000 --- a/test/test_rss.py +++ /dev/null @@ -1,109 +0,0 @@ -from http import HTTPStatus - -import lxml.etree -import pytest -from fastapi.testclient import TestClient - -from aurweb import aur_logging, db, time -from aurweb.asgi import app -from aurweb.models.account_type import AccountType -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.user import User - -logger = aur_logging.get_logger(__name__) - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def client(): - yield TestClient(app=app) - - -@pytest.fixture -def user(): - account_type = db.query(AccountType, AccountType.AccountType == "User").first() - yield db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountType=account_type, - ) - - -@pytest.fixture -def packages(user): - pkgs = [] - now = time.utcnow() - - # Create 101 packages; we limit 100 on RSS feeds. - with db.begin(): - for i in range(101): - pkgbase = db.create( - PackageBase, - Maintainer=user, - Name=f"test-package-{i}", - SubmittedTS=(now + i), - ModifiedTS=(now + i), - ) - pkg = db.create(Package, Name=pkgbase.Name, PackageBase=pkgbase) - pkgs.append(pkg) - yield pkgs - - -def parse_root(xml): - return lxml.etree.fromstring(xml) - - -def test_rss(client, user, packages): - with client as request: - response = request.get("/rss/") - assert response.status_code == int(HTTPStatus.OK) - - # Test that the RSS we got is sorted by descending SubmittedTS. - def key_(pkg): - return pkg.PackageBase.SubmittedTS - - packages = list(reversed(sorted(packages, key=key_))) - - # Just take the first 100. - packages = packages[:100] - - root = parse_root(response.content) - items = root.xpath("//channel/item") - assert len(items) == 100 - - for i, item in enumerate(items): - title = next(iter(item.xpath("./title"))) - logger.debug(f"title: '{title.text}' vs name: '{packages[i].Name}'") - assert title.text == packages[i].Name - - -def test_rss_modified(client, user, packages): - with client as request: - response = request.get("/rss/modified") - assert response.status_code == int(HTTPStatus.OK) - - # Test that the RSS we got is sorted by descending SubmittedTS. - def key_(pkg): - return pkg.PackageBase.ModifiedTS - - packages = list(reversed(sorted(packages, key=key_))) - - # Just take the first 100. - packages = packages[:100] - - root = parse_root(response.content) - items = root.xpath("//channel/item") - assert len(items) == 100 - - for i, item in enumerate(items): - title = next(iter(item.xpath("./title"))) - logger.debug(f"title: '{title.text}' vs name: '{packages[i].Name}'") - assert title.text == packages[i].Name diff --git a/test/test_session.py b/test/test_session.py deleted file mode 100644 index f1af9613..00000000 --- a/test/test_session.py +++ /dev/null @@ -1,92 +0,0 @@ -""" Test our Session model. """ - -from unittest import mock - -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db, time -from aurweb.models.account_type import USER_ID -from aurweb.models.session import Session, generate_unique_sid -from aurweb.models.user import User - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - ResetKey="testReset", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def session(user: User) -> Session: - with db.begin(): - session = db.create( - Session, User=user, SessionID="testSession", LastUpdateTS=time.utcnow() - ) - yield session - - -def test_session(user: User, session: Session): - assert session.SessionID == "testSession" - assert session.UsersID == user.ID - - -def test_session_cs(): - """Test case sensitivity of the database table.""" - with db.begin(): - user2 = db.create( - User, - Username="test2", - Email="test2@example.org", - ResetKey="testReset2", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - - with db.begin(): - session_cs = db.create( - Session, User=user2, SessionID="TESTSESSION", LastUpdateTS=time.utcnow() - ) - - assert session_cs.SessionID == "TESTSESSION" - assert session_cs.SessionID != "testSession" - - -def test_session_user_association(user: User, session: Session): - # Make sure that the Session user attribute is correct. - assert session.User == user - - -def test_session_null_user_raises(): - with pytest.raises(IntegrityError): - Session() - - -def test_generate_unique_sid(session: Session): - # Mock up aurweb.models.session.generate_sid by returning - # sids[i % 2] from 0 .. n. This will swap between each sid - # between each call. - sids = ["testSession", "realSession"] - i = 0 - - def mock_generate_sid(length): - nonlocal i - sid = sids[i % 2] - i += 1 - return sid - - with mock.patch("aurweb.util.make_random_string", mock_generate_sid): - assert generate_unique_sid() == "realSession" diff --git a/test/test_spawn.py b/test/test_spawn.py deleted file mode 100644 index c57c9b52..00000000 --- a/test/test_spawn.py +++ /dev/null @@ -1,109 +0,0 @@ -import os -import tempfile -from typing import Tuple -from unittest import mock - -import pytest - -import aurweb.config -import aurweb.spawn - -# Some os.environ overrides we use in this suite. -TEST_ENVIRONMENT = {"FASTAPI_NGINX_PORT": "8002"} - - -class FakeProcess: - """Fake a subprocess.Popen return object.""" - - returncode = 0 - stdout = b"" - stderr = b"" - - def __init__(self, *args, **kwargs): - """We need this constructor to remain compatible with Popen.""" - - def communicate(self) -> Tuple[bytes, bytes]: - return self.stdout, self.stderr - - def terminate(self) -> None: - raise Exception("Fake termination.") - - def wait(self) -> int: - return self.returncode - - -class MockFakeProcess: - """FakeProcess construction helper to be used in mocks.""" - - def __init__(self, return_code: int = 0, stdout: bytes = b"", stderr: bytes = b""): - self.returncode = return_code - self.stdout = stdout - self.stderr = stderr - - def process(self, *args, **kwargs) -> FakeProcess: - proc = FakeProcess() - proc.returncode = self.returncode - proc.stdout = self.stdout - proc.stderr = self.stderr - return proc - - -@mock.patch.dict("os.environ", TEST_ENVIRONMENT) -def test_spawn_generate_nginx_config(): - ctx = tempfile.TemporaryDirectory() - with ctx and mock.patch("aurweb.spawn.temporary_dir", ctx.name): - aurweb.spawn.generate_nginx_config() - nginx_config_path = os.path.join(ctx.name, "nginx.conf") - with open(nginx_config_path) as f: - nginx_config = f.read().rstrip() - - fastapi_address = aurweb.config.get("fastapi", "bind_address") - fastapi_host = fastapi_address.split(":")[0] - expected_content = [ - f'listen {fastapi_host}:{TEST_ENVIRONMENT.get("FASTAPI_NGINX_PORT")}', - f"proxy_pass http://{fastapi_address}", - ] - for expected in expected_content: - assert expected in nginx_config - - -@mock.patch("aurweb.spawn.asgi_backend", "uvicorn") -@mock.patch("aurweb.spawn.verbosity", 1) -@mock.patch("aurweb.spawn.workers", 1) -def test_spawn_start_stop(): - ctx = tempfile.TemporaryDirectory() - with ctx and mock.patch("aurweb.spawn.temporary_dir", ctx.name): - aurweb.spawn.start() - aurweb.spawn.stop() - - -@mock.patch("aurweb.spawn.asgi_backend", "uvicorn") -@mock.patch("aurweb.spawn.verbosity", 1) -@mock.patch("aurweb.spawn.workers", 1) -@mock.patch("aurweb.spawn.children", [MockFakeProcess().process()]) -def test_spawn_start_noop_with_children(): - aurweb.spawn.start() - - -@mock.patch("aurweb.spawn.asgi_backend", "uvicorn") -@mock.patch("aurweb.spawn.verbosity", 1) -@mock.patch("aurweb.spawn.workers", 1) -@mock.patch("aurweb.spawn.children", [MockFakeProcess().process()]) -def test_spawn_stop_terminate_failure(): - ctx = tempfile.TemporaryDirectory() - with ctx and mock.patch("aurweb.spawn.temporary_dir", ctx.name): - match = r"^Errors terminating the child processes" - with pytest.raises(aurweb.spawn.ProcessExceptions, match=match): - aurweb.spawn.stop() - - -@mock.patch("aurweb.spawn.asgi_backend", "uvicorn") -@mock.patch("aurweb.spawn.verbosity", 1) -@mock.patch("aurweb.spawn.workers", 1) -@mock.patch("aurweb.spawn.children", [MockFakeProcess(1).process()]) -def test_spawn_stop_wait_failure(): - ctx = tempfile.TemporaryDirectory() - with ctx and mock.patch("aurweb.spawn.temporary_dir", ctx.name): - match = r"^Errors terminating the child processes" - with pytest.raises(aurweb.spawn.ProcessExceptions, match=match): - aurweb.spawn.stop() diff --git a/test/test_ssh_pub_key.py b/test/test_ssh_pub_key.py deleted file mode 100644 index 1a586800..00000000 --- a/test/test_ssh_pub_key.py +++ /dev/null @@ -1,79 +0,0 @@ -from subprocess import PIPE, Popen - -import pytest - -from aurweb import db -from aurweb.models.account_type import USER_ID -from aurweb.models.ssh_pub_key import SSHPubKey, get_fingerprint -from aurweb.models.user import User - -TEST_SSH_PUBKEY = """ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCycoCi5yGCvSclH2wmNBUuwsYEzRZZBJaQquRc4y\ -sl+Tg+/jiDkR3Zn9fIznC4KnFoyrIHzkKuePZ3bNDYwkZxkJKoWBCh4hXKDXSm87FMN0+VDC+1QxF/\ -z0XaAGr/P6f4XukabyddypBdnHcZiplbw+YOSqcAE2TCqOlSXwNMOcF9U89UsR/Q9i9I52hlvU0q8+\ -fZVGhou1KCowFSnHYtrr5KYJ04CXkJ13DkVf3+pjQWyrByvBcf1hGEaczlgfobrrv/y96jDhgfXucx\ -liNKLdufDPPkii3LhhsNcDmmI1VZ3v0irKvd9WZuauqloobY84zEFcDTyjn0hxGjVeYFejm4fBnvjg\ -a0yZXORuWksdNfXWLDxFk6MDDd1jF0ExRbP+OxDuU4IVyIuDL7S3cnbf2YjGhkms/8voYT2OBE7FwN\ -lfv98Kr0NUp51zpf55Arxn9j0Rz9xTA7FiODQgCn6iQ0SDtzUNL0IKTCw26xJY5gzMxbfpvzPQGeul\ -x/ioM= kevr@volcano -""" - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -@pytest.fixture -def pubkey(user: User) -> SSHPubKey: - with db.begin(): - pubkey = db.create( - SSHPubKey, User=user, Fingerprint="testFingerprint", PubKey="testPubKey" - ) - yield pubkey - - -def test_pubkey(user: User, pubkey: SSHPubKey): - assert pubkey.UserID == user.ID - assert pubkey.User == user - assert pubkey.Fingerprint == "testFingerprint" - assert pubkey.PubKey == "testPubKey" - - -def test_pubkey_cs(user: User): - """Test case sensitivity of the database table.""" - with db.begin(): - pubkey_cs = db.create( - SSHPubKey, User=user, Fingerprint="TESTFINGERPRINT", PubKey="TESTPUBKEY" - ) - - assert pubkey_cs.Fingerprint == "TESTFINGERPRINT" - assert pubkey_cs.Fingerprint != "testFingerprint" - assert pubkey_cs.PubKey == "TESTPUBKEY" - assert pubkey_cs.PubKey != "testPubKey" - - -def test_pubkey_fingerprint(): - proc = Popen(["ssh-keygen", "-l", "-f", "-"], stdin=PIPE, stdout=PIPE) - out, _ = proc.communicate(TEST_SSH_PUBKEY.encode()) - expected = out.decode().split()[1].split(":", 1)[1] - assert get_fingerprint(TEST_SSH_PUBKEY) == expected - - -def test_pubkey_invalid_fingerprint(): - with pytest.raises(ValueError): - get_fingerprint("invalid-prefix some-fake-content") diff --git a/test/test_statistics.py b/test/test_statistics.py deleted file mode 100644 index 4859a2ce..00000000 --- a/test/test_statistics.py +++ /dev/null @@ -1,159 +0,0 @@ -import pytest -from prometheus_client import REGISTRY, generate_latest - -from aurweb import cache, db, time -from aurweb.models import Package, PackageBase, PackageRequest -from aurweb.models.account_type import PACKAGE_MAINTAINER_ID, USER_ID -from aurweb.models.package_request import ( - ACCEPTED_ID, - CLOSED_ID, - PENDING_ID, - REJECTED_ID, -) -from aurweb.models.request_type import DELETION_ID, ORPHAN_ID -from aurweb.models.user import User -from aurweb.statistics import Statistics, update_prometheus_metrics - - -@pytest.fixture(autouse=True) -def setup(db_test, prometheus_test): - return - - -@pytest.fixture(autouse=True) -def clear_fakeredis_cache(): - cache._redis.flushall() - - -@pytest.fixture -def test_data(): - # Create some test data (users and packages) - with db.begin(): - for i in range(10): - user = db.create( - User, - Username=f"test{i}", - Email=f"test{i}@example.org", - RealName=f"Test User {i}", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - - now = time.utcnow() - old = now - 60 * 60 * 24 * 8 # 8 days - older = now - 60 * 60 * 24 * 400 # 400 days - - pkgbase = db.create( - PackageBase, - Name=f"test-package{i}", - Maintainer=user, - SubmittedTS=old, - ModifiedTS=now, - ) - db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - pkgreq = db.create( - PackageRequest, - ReqTypeID=ORPHAN_ID, - User=user, - PackageBase=pkgbase, - PackageBaseName=pkgbase.Name, - RequestTS=now, - Comments=str(), - ClosureComment=str(), - ) - - # Modify some data to get some variances for our counters - if i == 1: - user.AccountTypeID = PACKAGE_MAINTAINER_ID - pkgbase.Maintainer = None - pkgbase.SubmittedTS = now - pkgreq.Status = PENDING_ID - pkgreq.ReqTypeID = DELETION_ID - - if i == 2: - pkgbase.SubmittedTS = older - pkgreq.Status = ACCEPTED_ID - - if i == 3: - pkgbase.SubmittedTS = older - pkgbase.ModifiedTS = old - pkgreq.Status = CLOSED_ID - - if i == 4: - pkgreq.Status = REJECTED_ID - yield - - -@pytest.fixture -def stats() -> Statistics: - yield Statistics() - - -@pytest.mark.parametrize( - "counter, expected", - [ - ("package_count", 10), - ("orphan_count", 1), - ("seven_days_old_added", 1), - ("seven_days_old_updated", 8), - ("year_old_updated", 9), - ("never_updated", 1), - ("user_count", 10), - ("package_maintainer_count", 1), - ("regular_user_count", 9), - ("updated_packages", 9), - ("total_requests", 10), - ("pending_requests", 7), - ("closed_requests", 1), - ("accepted_requests", 1), - ("rejected_requests", 1), - ("nonsense", -1), - ], -) -def test_get_count(stats: Statistics, test_data, counter: str, expected: int): - assert stats.get_count(counter) == expected - - -def test_get_count_change(stats: Statistics, test_data): - pkgs_before = stats.get_count("package_count") - pms_before = stats.get_count("package_maintainer_count") - - assert pkgs_before == 10 - assert pms_before == 1 - - # Let's delete a package and promote a user to TU - with db.begin(): - pkgbase = db.query(PackageBase).first() - db.delete(pkgbase) - - user = db.query(User).filter(User.AccountTypeID == USER_ID).first() - user.AccountTypeID = PACKAGE_MAINTAINER_ID - - # Values should end up in (fake) redis cache so they should be the same - assert stats.get_count("package_count") == pkgs_before - assert stats.get_count("package_maintainer_count") == pms_before - - # Let's clear the cache and check again - cache._redis.flushall() - assert stats.get_count("package_count") != pkgs_before - assert stats.get_count("package_maintainer_count") != pms_before - - -def test_update_prometheus_metrics(test_data): - metrics = str(generate_latest(REGISTRY)) - - assert "aur_users{" not in metrics - assert "aur_packages{" not in metrics - assert "aur_requests{" not in metrics - - # Let's update our metrics. We should find our gauges now - update_prometheus_metrics() - metrics = str(generate_latest(REGISTRY)) - - assert 'aur_users{type="user"} 9.0' in metrics - assert 'aur_packages{state="updated"} 9.0' in metrics - assert 'aur_requests{status="Pending",type="orphan"} 6.0' in metrics - assert 'aur_requests{status="Closed",type="orphan"} 1.0' in metrics - assert 'aur_requests{status="Accepted",type="orphan"} 1.0' in metrics - assert 'aur_requests{status="Rejected",type="orphan"} 1.0' in metrics - assert 'aur_requests{status="Pending",type="deletion"} 1.0' in metrics diff --git a/test/test_templates.py b/test/test_templates.py deleted file mode 100644 index 18a1f2b8..00000000 --- a/test/test_templates.py +++ /dev/null @@ -1,402 +0,0 @@ -import re -from typing import Any - -import pytest - -import aurweb.filters # noqa: F401 -from aurweb import config, db, templates, time -from aurweb.filters import as_timezone, number_format, timestamp_to_datetime as to_dt -from aurweb.models import Package, PackageBase, User -from aurweb.models.account_type import USER_ID -from aurweb.models.group import Group -from aurweb.models.license import License -from aurweb.models.package_base import popularity -from aurweb.models.package_group import PackageGroup -from aurweb.models.package_license import PackageLicense -from aurweb.models.package_relation import PackageRelation -from aurweb.models.relation_type import PROVIDES_ID, REPLACES_ID -from aurweb.templates import ( - base_template, - make_context, - make_variable_context, - register_filter, - register_function, -) -from aurweb.testing.html import parse_root -from aurweb.testing.requests import Request - -GIT_CLONE_URI_ANON = "anon_%s" -GIT_CLONE_URI_PRIV = "priv_%s" - - -@register_filter("func") -def func(): - pass - - -@register_function("function") -def function(): - pass - - -def create_user(username: str) -> User: - with db.begin(): - user = db.create( - User, - Username=username, - Email=f"{username}@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - return user - - -def create_pkgrel(package: Package, reltype_id: int, relname: str) -> PackageRelation: - return db.create( - PackageRelation, Package=package, RelTypeID=reltype_id, RelName=relname - ) - - -@pytest.fixture -def user(db_test) -> User: - user = create_user("test") - yield user - - -@pytest.fixture -def pkgbase(user: User) -> PackageBase: - now = time.utcnow() - with db.begin(): - pkgbase = db.create( - PackageBase, - Name="test-pkg", - Maintainer=user, - SubmittedTS=now, - ModifiedTS=now, - ) - yield pkgbase - - -@pytest.fixture -def package(user: User, pkgbase: PackageBase) -> Package: - with db.begin(): - pkg = db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - yield pkg - - -def create_license(pkg: Package, license_name: str) -> PackageLicense: - lic = db.create(License, Name=license_name) - pkglic = db.create(PackageLicense, License=lic, Package=pkg) - return pkglic - - -def create_group(pkg: Package, group_name: str) -> PackageGroup: - grp = db.create(Group, Name=group_name) - pkggrp = db.create(PackageGroup, Group=grp, Package=pkg) - return pkggrp - - -def test_register_function_exists_key_error(): - """Most instances of register_filter are tested through module - imports or template renders, so we only test failures here.""" - with pytest.raises(KeyError): - - @register_function("function") - def some_func(): - pass - - -def test_commit_hash(): - # Hashes we'll use for this test. long_commit_hash should be - # shortened to commit_hash for rendering. - commit_hash = "abcdefg" - long_commit_hash = commit_hash + "1234567" - - def config_get_with_fallback( - section: str, option: str, fallback: str = None - ) -> str: - if section == "devel" and option == "commit_hash": - return long_commit_hash - return config.original_get_with_fallback(section, option, fallback) - - # Fake config.get_with_fallback. - config.original_get_with_fallback = config.get_with_fallback - config.get_with_fallback = config_get_with_fallback - - request = Request() - context = templates.make_context(request, "Test Context") - render = templates.render_raw_template(request, "index.html", context) - - # We've faked config.get_with_fallback to return a "valid" commit_hash - # when queried. Test that the expected render occurs. - commit_url = config.get("devel", "commit_url") - expected = commit_url % commit_hash - assert expected in render - assert f"HEAD@{commit_hash}" in render - assert long_commit_hash not in render - - # Restore config.get_with_fallback. - config.get_with_fallback = config.original_get_with_fallback - config.original_get_with_fallback = None - - # Now, we no longer fake the commit_hash option: no commit - # is displayed in the footer. Assert this expectation. - context = templates.make_context(request, "Test Context") - render = templates.render_raw_template(request, "index.html", context) - assert commit_hash not in render - - -def pager_context(num_packages: int) -> dict[str, Any]: - return { - "request": Request(), - "singular": "%d package found.", - "plural": "%d packages found.", - "prefix": "/packages", - "total": num_packages, - "O": 0, - "PP": 50, - } - - -def test_pager_no_results(): - """Test the pager partial with no results.""" - num_packages = 0 - context = pager_context(num_packages) - body = base_template("partials/pager.html").render(context) - - root = parse_root(body) - stats = root.xpath('//div[@class="pkglist-stats"]/p') - expected = "0 packages found." - assert stats[0].text.strip() == expected - - -def test_pager(): - """Test the pager partial with two pages of results.""" - num_packages = 100 - context = pager_context(num_packages) - body = base_template("partials/pager.html").render(context) - - root = parse_root(body) - stats = root.xpath('//div[@class="pkglist-stats"]/p') - stats = re.sub(r"\s{2,}", " ", stats[0].text.strip()) - expected = f"{num_packages} packages found. Page 1 of 2." - assert stats == expected - - -def check_package_details(content: str, pkg: Package) -> None: - """ - Perform assertion checks against package details. - """ - pkgbase = pkg.PackageBase - - root = parse_root(content) - pkginfo = root.xpath('//table[@id="pkginfo"]')[0] - rows = pkginfo.xpath("./tr") - - # Check Git Clone URL. - git_clone_uris = rows[0].xpath("./td/a") - anon_uri, priv_uri = git_clone_uris - pkgbasename = pkgbase.Name - assert anon_uri.text.strip() == GIT_CLONE_URI_ANON % pkgbasename - assert priv_uri.text.strip() == GIT_CLONE_URI_PRIV % pkgbasename - - # Check Package Base. - pkgbase_markup = rows[1].xpath("./td/a")[0] - assert pkgbase_markup.text.strip() == pkgbasename - - # Check Description. - desc = rows[2].xpath("./td")[0] - assert desc.text.strip() == str(pkg.Description) - - # Check URL, for which we have none. In this case, no should - # be used since we have nothing to link. - url = rows[3].xpath("./td")[0] - assert url.text.strip() == str(pkg.URL) - - # Check Keywords, which should be empty. - keywords = rows[4].xpath("./td/form/div/input")[0] - assert keywords.attrib["value"] == str() - - i = 4 - licenses = pkg.package_licenses.all() - if licenses: - i += 1 - expected = ", ".join([p.License.Name for p in licenses]) - license_markup = rows[i].xpath("./td")[0] - assert license_markup.text.strip() == expected - else: - assert "Licenses" not in content - - groups = pkg.package_groups.all() - if groups: - i += 1 - expected = ", ".join([p.Group.Name for p in groups]) - group_markup = rows[i].xpath("./td")[0] - assert group_markup.text.strip() == expected - else: - assert "Groups" not in content - - provides = pkg.package_relations.filter( - PackageRelation.RelTypeID == PROVIDES_ID - ).all() - if provides: - i += 1 - expected = ", ".join([p.RelName for p in provides]) - provides_markup = rows[i].xpath("./td")[0] - assert provides_markup.text.strip() == expected - else: - assert "Provides" not in content - - replaces = pkg.package_relations.filter( - PackageRelation.RelTypeID == REPLACES_ID - ).all() - if replaces: - i += 1 - expected = ", ".join([r.RelName for r in replaces]) - replaces_markup = rows[i].xpath("./td")[0] - assert replaces_markup.text.strip() == expected - else: - assert "Replaces" not in content - - # Check Submitter. - selector = "./td" if not pkg.PackageBase.Submitter else "./td/a" - i += 1 - submitter = rows[i].xpath(selector)[0] - assert submitter.text.strip() == str(pkg.PackageBase.Submitter) - - # Check Maintainer. - selector = "./td" if not pkg.PackageBase.Maintainer else "./td/a" - i += 1 - maintainer = rows[i].xpath(selector)[0] - assert maintainer.text.strip() == str(pkg.PackageBase.Maintainer) - - # Check Packager. - selector = "./td" if not pkg.PackageBase.Packager else "./td/a" - i += 1 - packager = rows[i].xpath(selector)[0] - assert packager.text.strip() == str(pkg.PackageBase.Packager) - - # Check Votes. - i += 1 - votes = rows[i].xpath("./td")[0] - assert votes.text.strip() == str(pkg.PackageBase.NumVotes) - - # Check Popularity; for this package, a number_format of 6 places is used. - i += 1 - pop = rows[i].xpath("./td")[0] - assert pop.text.strip() == number_format(0, 6) - - # Check First Submitted - date_fmt = "%Y-%m-%d %H:%M (%Z)" - i += 1 - first_submitted = rows[i].xpath("./td")[0] - converted_dt = as_timezone(to_dt(pkg.PackageBase.SubmittedTS), "UTC") - expected = converted_dt.strftime(date_fmt) - assert first_submitted.text.strip() == expected - - # Check Last Updated. - i += 1 - last_updated = rows[i].xpath("./td")[0] - converted_dt = as_timezone(to_dt(pkg.PackageBase.ModifiedTS), "UTC") - expected = converted_dt.strftime(date_fmt) - assert last_updated.text.strip() == expected - - -def test_package_details(user: User, package: Package): - """Test package details with most fields populated, but not all.""" - request = Request(user=user, authenticated=True) - context = make_context(request, "Test Details") - - context.update( - { - "request": request, - "git_clone_uri_anon": GIT_CLONE_URI_ANON, - "git_clone_uri_priv": GIT_CLONE_URI_PRIV, - "pkgbase": package.PackageBase, - "popularity": popularity(package.PackageBase, time.utcnow()), - "package": package, - "comaintainers": [], - } - ) - - base = base_template("partials/packages/details.html") - body = base.render(context, show_package_details=True) - check_package_details(body, package) - - -def test_package_details_filled(user: User, package: Package): - """Test package details with all fields populated.""" - - pkgbase = package.PackageBase - with db.begin(): - # Setup Submitter and Packager; Maintainer is already set to `user`. - pkgbase.Submitter = pkgbase.Packager = user - - # Create two licenses. - create_license(package, "TPL") # Testing Public License - create_license(package, "TPL2") # Testing Public License 2 - - # Create two groups. - create_group(package, "GRP") - create_group(package, "GRP2") - - # Add provides. - create_pkgrel(package, PROVIDES_ID, "test-provider") - - # Add replaces. - create_pkgrel(package, REPLACES_ID, "test-replacement") - - request = Request(user=user, authenticated=True) - context = make_context(request, "Test Details") - context.update( - { - "request": request, - "git_clone_uri_anon": GIT_CLONE_URI_ANON, - "git_clone_uri_priv": GIT_CLONE_URI_PRIV, - "pkgbase": package.PackageBase, - "popularity": popularity(package.PackageBase, time.utcnow()), - "package": package, - "comaintainers": [], - "licenses": package.package_licenses, - "groups": package.package_groups, - "provides": package.package_relations.filter( - PackageRelation.RelTypeID == PROVIDES_ID - ), - "replaces": package.package_relations.filter( - PackageRelation.RelTypeID == REPLACES_ID - ), - } - ) - - base = base_template("partials/packages/details.html") - body = base.render(context, show_package_details=True) - check_package_details(body, package) - - -def test_make_context_timezone(user: User, package: Package): - request = Request( - user=user, authenticated=True, url="/packages/test?timezone=foobar" - ) - context = make_context(request, "Test Details") - assert context["timezone"] in time.SUPPORTED_TIMEZONES - - -@pytest.mark.asyncio -async def test_make_variable_context_timezone(user: User, package: Package): - request = Request( - user=user, authenticated=True, url="/packages/test?timezone=foobar" - ) - context = await make_variable_context( - request, "Test Details", next="/packages/test" - ) - assert context["timezone"] in time.SUPPORTED_TIMEZONES - - -@pytest.mark.asyncio -async def test_make_variable_context_params(): - request = Request(url="/test", query_params={"request": "test", "x": "test"}) - context = await make_variable_context(request, "Test") - - # make sure we can't override our Request object with a query parameter - assert context["request"] != "test" - assert context["x"] == "test" diff --git a/test/test_term.py b/test/test_term.py deleted file mode 100644 index 4b608a9a..00000000 --- a/test/test_term.py +++ /dev/null @@ -1,31 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db -from aurweb.models.term import Term - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def test_term_creation(): - with db.begin(): - term = db.create( - Term, Description="Term description", URL="https://fake_url.io" - ) - assert bool(term.ID) - assert term.Description == "Term description" - assert term.URL == "https://fake_url.io" - assert term.Revision == 1 - - -def test_term_null_description_raises_exception(): - with pytest.raises(IntegrityError): - Term(URL="https://fake_url.io") - - -def test_term_null_url_raises_exception(): - with pytest.raises(IntegrityError): - Term(Description="Term description") diff --git a/test/test_time.py b/test/test_time.py deleted file mode 100644 index 45328717..00000000 --- a/test/test_time.py +++ /dev/null @@ -1,36 +0,0 @@ -import aurweb.config -from aurweb.testing.requests import Request -from aurweb.time import get_request_timezone, tz_offset - - -def test_tz_offset_utc(): - offset = tz_offset("UTC") - assert offset == "+00:00" - - -def test_tz_offset_mst(): - offset = tz_offset("MST") - assert offset == "-07:00" - - -def test_request_timezone(): - request = Request() - - # Default timezone - dtz = aurweb.config.get("options", "default_timezone") - assert get_request_timezone(request) == dtz - - # Timezone from query params - request.query_params = {"timezone": "Europe/Berlin"} - assert get_request_timezone(request) == "Europe/Berlin" - - # Timezone from authenticated user. - request.query_params = {} - request.user.authenticated = True - request.user.Timezone = "America/Los_Angeles" - assert get_request_timezone(request) == "America/Los_Angeles" - - # Timezone from authenticated user with query param - # Query param should have precedence - request.query_params = {"timezone": "Europe/Berlin"} - assert get_request_timezone(request) == "Europe/Berlin" diff --git a/test/test_user.py b/test/test_user.py deleted file mode 100644 index 78a2a513..00000000 --- a/test/test_user.py +++ /dev/null @@ -1,330 +0,0 @@ -import hashlib -import json -from datetime import UTC, datetime, timedelta - -import bcrypt -import pytest - -import aurweb.auth -import aurweb.config -import aurweb.models.account_type as at -from aurweb import db -from aurweb.auth import creds -from aurweb.models.account_type import ( - DEVELOPER_ID, - PACKAGE_MAINTAINER_AND_DEV_ID, - PACKAGE_MAINTAINER_ID, - USER_ID, -) -from aurweb.models.ban import Ban -from aurweb.models.package import Package -from aurweb.models.package_base import PackageBase -from aurweb.models.package_notification import PackageNotification -from aurweb.models.package_vote import PackageVote -from aurweb.models.session import Session -from aurweb.models.ssh_pub_key import SSHPubKey -from aurweb.models.user import User -from aurweb.testing.requests import Request - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -def create_user(username: str, account_type_id: int): - with db.begin(): - user = db.create( - User, - Username=username, - Email=f"{username}@example.org", - RealName=username.title(), - Passwd="testPassword", - AccountTypeID=account_type_id, - ) - return user - - -@pytest.fixture -def user() -> User: - user = create_user("test", USER_ID) - yield user - - -@pytest.fixture -def pm_user() -> User: - user = create_user("test_pm", PACKAGE_MAINTAINER_ID) - yield user - - -@pytest.fixture -def dev_user() -> User: - user = create_user("test_dev", DEVELOPER_ID) - yield user - - -@pytest.fixture -def pm_and_dev_user() -> User: - user = create_user("test_pm_and_dev", PACKAGE_MAINTAINER_AND_DEV_ID) - yield user - - -@pytest.fixture -def package(user: User) -> Package: - with db.begin(): - pkgbase = db.create(PackageBase, Name="pkg1", Maintainer=user) - pkg = db.create(Package, PackageBase=pkgbase, Name=pkgbase.Name) - yield pkg - - -def test_user_login_logout(user: User): - """Test creating a user and reading its columns.""" - # Assert that make_user created a valid user. - assert bool(user.ID) - - # Test authentication. - assert user.valid_password("testPassword") - assert not user.valid_password("badPassword") - - # Make a raw request. - request = Request() - assert not user.login(request, "badPassword") - assert not user.is_authenticated() - - sid = user.login(request, "testPassword") - assert sid is not None - assert user.is_authenticated() - - # Expect that User session relationships work right. - user_session = db.query(Session, Session.UsersID == user.ID).first() - assert user_session == user.session - assert user.session.SessionID == sid - assert user.session.User == user - - # Search for the user via query API. - result = db.query(User, User.ID == user.ID).first() - - # Compare the result and our original user. - assert result == user - assert result.ID == user.ID - assert result.AccountType.ID == user.AccountType.ID - assert result.Username == user.Username - assert result.Email == user.Email - - # Test result authenticate methods to ensure they work the same. - assert not result.valid_password("badPassword") - assert result.valid_password("testPassword") - assert result.is_authenticated() - - # Test out user string functions. - assert ( - repr(user) - == f"" - ) - - # Test logout. - user.logout(request) - assert not user.is_authenticated() - - -def test_user_login_twice(user: User): - request = Request() - assert user.login(request, "testPassword") - assert user.login(request, "testPassword") - - -def test_user_login_banned(user: User): - # Add ban for the next 30 seconds. - banned_timestamp = datetime.now(UTC) + timedelta(seconds=30) - with db.begin(): - db.create(Ban, IPAddress="127.0.0.1", BanTS=banned_timestamp) - - request = Request() - request.client.host = "127.0.0.1" - assert not user.login(request, "testPassword") - - -def test_user_login_suspended(user: User): - with db.begin(): - user.Suspended = True - assert not user.login(Request(), "testPassword") - - -def test_legacy_user_authentication(user: User): - with db.begin(): - user.Salt = bcrypt.gensalt().decode() - user.Passwd = hashlib.md5(f"{user.Salt}testPassword".encode()).hexdigest() - - assert not user.valid_password("badPassword") - assert user.valid_password("testPassword") - - # Test by passing a password of None value in. - assert not user.valid_password(None) - - -def test_user_login_with_outdated_sid(user: User): - # Make a session with a LastUpdateTS 5 seconds ago, causing - # user.login to update it with a new sid. - with db.begin(): - db.create( - Session, - UsersID=user.ID, - SessionID="stub", - LastUpdateTS=datetime.now(UTC).timestamp() - 5, - ) - sid = user.login(Request(), "testPassword") - assert sid and user.is_authenticated() - assert sid != "stub" - - -def test_user_update_password(user: User): - user.update_password("secondPassword") - assert not user.valid_password("testPassword") - assert user.valid_password("secondPassword") - - -def test_user_minimum_passwd_length(): - passwd_min_len = aurweb.config.getint("options", "passwd_min_len") - assert User.minimum_passwd_length() == passwd_min_len - - -def test_user_has_credential(user: User): - assert not user.has_credential(creds.ACCOUNT_CHANGE_TYPE) - - -def test_user_ssh_pub_key(user: User): - assert user.ssh_pub_keys.first() is None - - with db.begin(): - ssh_pub_key = db.create( - SSHPubKey, - UserID=user.ID, - Fingerprint="testFingerprint", - PubKey="testPubKey", - ) - - assert user.ssh_pub_keys.first() == ssh_pub_key - - -def test_user_credential_types(user: User): - assert user.AccountTypeID in creds.user_developer_or_package_maintainer - assert user.AccountTypeID not in creds.package_maintainer - assert user.AccountTypeID not in creds.developer - assert user.AccountTypeID not in creds.package_maintainer_or_dev - - with db.begin(): - user.AccountTypeID = at.PACKAGE_MAINTAINER_ID - - assert user.AccountTypeID in creds.package_maintainer - assert user.AccountTypeID in creds.package_maintainer_or_dev - - with db.begin(): - user.AccountTypeID = at.DEVELOPER_ID - - assert user.AccountTypeID in creds.developer - assert user.AccountTypeID in creds.package_maintainer_or_dev - - with db.begin(): - user.AccountTypeID = at.PACKAGE_MAINTAINER_AND_DEV_ID - - assert user.AccountTypeID in creds.package_maintainer - assert user.AccountTypeID in creds.developer - assert user.AccountTypeID in creds.package_maintainer_or_dev - - # Some model authorization checks. - assert user.is_elevated() - assert user.is_package_maintainer() - assert user.is_developer() - - -def test_user_json(user: User): - data = json.loads(user.json()) - assert data.get("ID") == user.ID - assert data.get("Username") == user.Username - assert data.get("Email") == user.Email - # .json() converts datetime values to integer timestamps. - assert isinstance(data.get("RegistrationTS"), int) - - -def test_user_as_dict(user: User): - data = user.as_dict() - assert data.get("ID") == user.ID - assert data.get("Username") == user.Username - assert data.get("Email") == user.Email - # .as_dict() does not convert values to json-capable types. - assert isinstance(data.get("RegistrationTS"), datetime) - - -def test_user_is_package_maintainer(user: User): - with db.begin(): - user.AccountTypeID = at.PACKAGE_MAINTAINER_ID - assert user.is_package_maintainer() is True - - # Do it again with the combined role. - with db.begin(): - user.AccountTypeID = at.PACKAGE_MAINTAINER_AND_DEV_ID - assert user.is_package_maintainer() is True - - -def test_user_is_developer(user: User): - with db.begin(): - user.AccountTypeID = at.DEVELOPER_ID - assert user.is_developer() is True - - # Do it again with the combined role. - with db.begin(): - user.AccountTypeID = at.PACKAGE_MAINTAINER_AND_DEV_ID - assert user.is_developer() is True - - -def test_user_voted_for(user: User, package: Package): - pkgbase = package.PackageBase - now = int(datetime.now(UTC).timestamp()) - with db.begin(): - db.create(PackageVote, PackageBase=pkgbase, User=user, VoteTS=now) - assert user.voted_for(package) - - -def test_user_notified(user: User, package: Package): - pkgbase = package.PackageBase - with db.begin(): - db.create(PackageNotification, PackageBase=pkgbase, User=user) - assert user.notified(package) - - -def test_user_packages(user: User, package: Package): - assert package in user.packages() - - -def test_can_edit_user( - user: User, pm_user: User, dev_user: User, pm_and_dev_user: User -): - # User can edit. - assert user.can_edit_user(user) - - # User cannot edit. - assert not user.can_edit_user(pm_user) - assert not user.can_edit_user(dev_user) - assert not user.can_edit_user(pm_and_dev_user) - - # Package Maintainer can edit. - assert pm_user.can_edit_user(user) - assert pm_user.can_edit_user(pm_user) - - # Package Maintainer cannot edit. - assert not pm_user.can_edit_user(dev_user) - assert not pm_user.can_edit_user(pm_and_dev_user) - - # Developer can edit. - assert dev_user.can_edit_user(user) - assert dev_user.can_edit_user(pm_user) - assert dev_user.can_edit_user(dev_user) - - # Developer cannot edit. - assert not dev_user.can_edit_user(pm_and_dev_user) - - # Package Maintainer & Developer can edit. - assert pm_and_dev_user.can_edit_user(user) - assert pm_and_dev_user.can_edit_user(pm_user) - assert pm_and_dev_user.can_edit_user(dev_user) - assert pm_and_dev_user.can_edit_user(pm_and_dev_user) diff --git a/test/test_usermaint.py b/test/test_usermaint.py deleted file mode 100644 index 7d7bd135..00000000 --- a/test/test_usermaint.py +++ /dev/null @@ -1,70 +0,0 @@ -import pytest - -from aurweb import db, time -from aurweb.models import User -from aurweb.models.account_type import USER_ID -from aurweb.scripts import usermaint - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = db.create( - User, - Username="test", - Email="test@example.org", - Passwd="testPassword", - AccountTypeID=USER_ID, - ) - yield user - - -def test_usermaint_noop(user: User): - """Last[SSH]Login isn't expired in this test: usermaint is noop.""" - - now = time.utcnow() - with db.begin(): - user.LastLoginIPAddress = "127.0.0.1" - user.LastLogin = now - 10 - user.LastSSHLoginIPAddress = "127.0.0.1" - user.LastSSHLogin = now - 10 - - usermaint.main() - - assert user.LastLoginIPAddress == "127.0.0.1" - assert user.LastSSHLoginIPAddress == "127.0.0.1" - - -def test_usermaint(user: User): - """ - In this case, we first test that only the expired record gets - updated, but the non-expired record remains untouched. After, - we update the login time on the non-expired record and exercise - its code path. - """ - - now = time.utcnow() - limit_to = now - 86400 * 7 - with db.begin(): - user.LastLoginIPAddress = "127.0.0.1" - user.LastLogin = limit_to - 666 - user.LastSSHLoginIPAddress = "127.0.0.1" - user.LastSSHLogin = now - 10 - - usermaint.main() - - assert user.LastLoginIPAddress is None - assert user.LastSSHLoginIPAddress == "127.0.0.1" - - with db.begin(): - user.LastSSHLogin = limit_to - 666 - - usermaint.main() - - assert user.LastLoginIPAddress is None - assert user.LastSSHLoginIPAddress is None diff --git a/test/test_util.py b/test/test_util.py deleted file mode 100644 index 1c3b51af..00000000 --- a/test/test_util.py +++ /dev/null @@ -1,169 +0,0 @@ -import json -from http import HTTPStatus - -import fastapi -import pytest -from fastapi.responses import JSONResponse - -from aurweb import db, filters, util -from aurweb.models.user import User -from aurweb.testing.requests import Request - - -def test_round(): - assert filters.do_round(1.3) == 1 - assert filters.do_round(1.5) == 2 - assert filters.do_round(2.0) == 2 - - -def test_git_search(): - """Test that git_search matches the full commit if necessary.""" - commit_hash = "0123456789abcdef" - repo = {commit_hash} - prefixlen = util.git_search(repo, commit_hash) - assert prefixlen == 16 - - -def test_git_search_double_commit(): - """Test that git_search matches a shorter prefix length.""" - commit_hash = "0123456789abcdef" - repo = {commit_hash[:13]} - # Locate the shortest prefix length that matches commit_hash. - prefixlen = util.git_search(repo, commit_hash) - assert prefixlen == 13 - - -@pytest.mark.asyncio -async def test_error_or_result(): - async def route(request: fastapi.Request): - raise RuntimeError("No response returned.") - - response = await util.error_or_result(route, Request()) - assert response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR - - data = json.loads(response.body) - assert data.get("error") == "No response returned." - - async def good_route(request: fastapi.Request): - return JSONResponse("{}") - - response = await util.error_or_result(good_route, Request()) - assert response.status_code == HTTPStatus.OK - - -def test_valid_homepage(): - assert util.valid_homepage("http://google.com") - assert util.valid_homepage("https://google.com") - assert not util.valid_homepage("http://[google.com/broken-ipv6") - assert not util.valid_homepage("https://[google.com/broken-ipv6") - - assert not util.valid_homepage("gopher://gopher.hprc.utoronto.ca/") - - -def test_parse_ssh_key(): - # Test a valid key. - pk = """ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyN\ -TYAAABBBEURnkiY6JoLyqDE8Li1XuAW+LHmkmLDMW/GL5wY7k4/A+Ta7bjA3MOKrF9j4EuUTvCuNX\ -ULxvpfSqheTFWZc+g=""" - prefix, key = util.parse_ssh_key(pk) - e_prefix, e_key = pk.split() - assert prefix == e_prefix - assert key == e_key - - # Test an invalid key with just one word in it. - with pytest.raises(ValueError): - util.parse_ssh_key("ssh-rsa") - - # Test a valid key with extra words in it (after the PK). - pk = pk + " blah blah" - prefix, key = util.parse_ssh_key(pk) - assert prefix == e_prefix - assert key == e_key - - # Test an invalid prefix. - with pytest.raises(ValueError): - util.parse_ssh_key("invalid-prefix fake-content") - - -def test_parse_ssh_keys(): - pks = """ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyN\ -TYAAABBBEURnkiY6JoLyqDE8Li1XuAW+LHmkmLDMW/GL5wY7k4/A+Ta7bjA3MOKrF9j4EuUTvCuNX\ -ULxvpfSqheTFWZc+g= -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDmqEapFMh/ajPHnm1dBweYPeLOUjC0Ydp6uw7rB\ -S5KCggUVQR8WfIm+sRYTj2+smGsK6zHMBjFnbzvV11vnMqcnY+Sa4LhIAdwkbt/b8HlGaLj1hCWSh\ -a5b5/noeK7L+CECGHdvfJhpxBbhq38YEdFnCGbslk/4NriNcUp/DO81CXb1RzJ9GBFH8ivPW1mbe9\ -YbxDwGimZZslg0OZu9UzoAT6xEGyiZsqJkTMbRp1ZYIOv9jHCJxRuxxuN3fzxyT3xE69+vhq2/NJX\ -8aRsxGPL9G/XKcaYGS6y6LW4quIBCz/XsTZfx1GmkQeZPYHH8FeE+XC/+toXL/kamxdOQKFYEEpWK\ -vTNJCD6JtMClxbIXW9q74nNqG+2SD/VQNMUz/505TK1PbY/4uyFfq5HquHJXQVCBll03FRerNHH2N\ -schFne6BFHpa48PCoZNH45wLjFXwUyrGU1HrNqh6ZPdRfBTrTOkgs+BKBxGNeV45aYUPu/cFBSPcB\ -fRSo6OFcejKc=""" - assert_multiple_keys(pks) - - -def test_parse_ssh_keys_with_extra_lines(): - pks = """ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyN\ -TYAAABBBEURnkiY6JoLyqDE8Li1XuAW+LHmkmLDMW/GL5wY7k4/A+Ta7bjA3MOKrF9j4EuUTvCuNX\ -ULxvpfSqheTFWZc+g= - - - - -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDmqEapFMh/ajPHnm1dBweYPeLOUjC0Ydp6uw7rB\ -S5KCggUVQR8WfIm+sRYTj2+smGsK6zHMBjFnbzvV11vnMqcnY+Sa4LhIAdwkbt/b8HlGaLj1hCWSh\ -a5b5/noeK7L+CECGHdvfJhpxBbhq38YEdFnCGbslk/4NriNcUp/DO81CXb1RzJ9GBFH8ivPW1mbe9\ -YbxDwGimZZslg0OZu9UzoAT6xEGyiZsqJkTMbRp1ZYIOv9jHCJxRuxxuN3fzxyT3xE69+vhq2/NJX\ -8aRsxGPL9G/XKcaYGS6y6LW4quIBCz/XsTZfx1GmkQeZPYHH8FeE+XC/+toXL/kamxdOQKFYEEpWK\ -vTNJCD6JtMClxbIXW9q74nNqG+2SD/VQNMUz/505TK1PbY/4uyFfq5HquHJXQVCBll03FRerNHH2N\ -schFne6BFHpa48PCoZNH45wLjFXwUyrGU1HrNqh6ZPdRfBTrTOkgs+BKBxGNeV45aYUPu/cFBSPcB\ -fRSo6OFcejKc= - - -""" - assert_multiple_keys(pks) - - -@pytest.mark.parametrize( - "offset_str, per_page_str, expected", - [ - ("5", "100", (5, 100)), - ("", "100", (0, 100)), - ("5", "", (5, 50)), - ("", "", (0, 50)), - ("-1", "100", (0, 100)), - ("5", "-100", (5, 50)), - ("0", "0", (0, 50)), - ], -) -def test_sanitize_params(offset_str: str, per_page_str: str, expected: tuple[int, int]): - assert util.sanitize_params(offset_str, per_page_str) == expected - - -def assert_multiple_keys(pks): - keys = util.parse_ssh_keys(pks) - assert len(keys) == 2 - pfx1, key1, pfx2, key2 = pks.split() - assert (pfx1, key1) in keys - assert (pfx2, key2) in keys - - -def test_hash_query(): - # No conditions - query = db.query(User) - assert util.hash_query(query) == "75e76026b7d576536e745ec22892cf8f5d7b5d62" - - # With where clause - query = db.query(User).filter(User.Username == "bla") - assert util.hash_query(query) == "4dca710f33b1344c27ec6a3c266970f4fa6a8a00" - - # With where clause and sorting - query = db.query(User).filter(User.Username == "bla").order_by(User.Username) - assert util.hash_query(query) == "ee2c7846fede430776e140f8dfe1d83cd21d2eed" - - # With where clause, sorting and specific columns - query = ( - db.query(User) - .filter(User.Username == "bla") - .order_by(User.Username) - .with_entities(User.Username) - ) - assert util.hash_query(query) == "c1db751be61443d266cf643005eee7a884dac103" diff --git a/test/test_voteinfo.py b/test/test_voteinfo.py deleted file mode 100644 index 99e14a8c..00000000 --- a/test/test_voteinfo.py +++ /dev/null @@ -1,177 +0,0 @@ -import pytest -from sqlalchemy.exc import IntegrityError - -from aurweb import db, time -from aurweb.db import create, rollback -from aurweb.models.account_type import PACKAGE_MAINTAINER_ID -from aurweb.models.user import User -from aurweb.models.voteinfo import VoteInfo - - -@pytest.fixture(autouse=True) -def setup(db_test): - return - - -@pytest.fixture -def user() -> User: - with db.begin(): - user = create( - User, - Username="test", - Email="test@example.org", - RealName="Test User", - Passwd="testPassword", - AccountTypeID=PACKAGE_MAINTAINER_ID, - ) - yield user - - -def test_voteinfo_creation(user: User): - ts = time.utcnow() - with db.begin(): - voteinfo = create( - VoteInfo, - Agenda="Blah blah.", - User=user.Username, - Submitted=ts, - End=ts + 5, - Quorum=0.5, - Submitter=user, - ) - assert bool(voteinfo.ID) - assert voteinfo.Agenda == "Blah blah." - assert voteinfo.User == user.Username - assert voteinfo.Submitted == ts - assert voteinfo.End == ts + 5 - assert voteinfo.Quorum == 0.5 - assert voteinfo.Submitter == user - assert voteinfo.Yes == 0 - assert voteinfo.No == 0 - assert voteinfo.Abstain == 0 - assert voteinfo.ActiveUsers == 0 - - assert voteinfo in user.voteinfo_set - - -def test_voteinfo_is_running(user: User): - ts = time.utcnow() - with db.begin(): - voteinfo = create( - VoteInfo, - Agenda="Blah blah.", - User=user.Username, - Submitted=ts, - End=ts + 1000, - Quorum=0.5, - Submitter=user, - ) - assert voteinfo.is_running() is True - - with db.begin(): - voteinfo.End = ts - 5 - assert voteinfo.is_running() is False - - -def test_voteinfo_total_votes(user: User): - ts = time.utcnow() - with db.begin(): - voteinfo = create( - VoteInfo, - Agenda="Blah blah.", - User=user.Username, - Submitted=ts, - End=ts + 1000, - Quorum=0.5, - Submitter=user, - ) - - voteinfo.Yes = 1 - voteinfo.No = 3 - voteinfo.Abstain = 5 - - # total_votes() should be the sum of Yes, No and Abstain: 1 + 3 + 5 = 9. - assert voteinfo.total_votes() == 9 - - -def test_voteinfo_null_submitter_raises(user: User): - with pytest.raises(IntegrityError): - with db.begin(): - create( - VoteInfo, - Agenda="Blah blah.", - User=user.Username, - Submitted=0, - End=0, - Quorum=0.50, - ) - rollback() - - -def test_voteinfo_null_agenda_raises(user: User): - with pytest.raises(IntegrityError): - with db.begin(): - create( - VoteInfo, - User=user.Username, - Submitted=0, - End=0, - Quorum=0.50, - Submitter=user, - ) - rollback() - - -def test_voteinfo_null_user_raises(user: User): - with pytest.raises(IntegrityError): - with db.begin(): - create( - VoteInfo, - Agenda="Blah blah.", - Submitted=0, - End=0, - Quorum=0.50, - Submitter=user, - ) - rollback() - - -def test_voteinfo_null_submitted_raises(user: User): - with pytest.raises(IntegrityError): - with db.begin(): - create( - VoteInfo, - Agenda="Blah blah.", - User=user.Username, - End=0, - Quorum=0.50, - Submitter=user, - ) - rollback() - - -def test_voteinfo_null_end_raises(user: User): - with pytest.raises(IntegrityError): - with db.begin(): - create( - VoteInfo, - Agenda="Blah blah.", - User=user.Username, - Submitted=0, - Quorum=0.50, - Submitter=user, - ) - rollback() - - -def test_voteinfo_null_quorum_default(user: User): - with db.begin(): - vi = create( - VoteInfo, - Agenda="Blah blah.", - User=user.Username, - Submitted=0, - End=0, - Submitter=user, - ) - assert vi.Quorum == 0 diff --git a/test/test_votereminder.py b/test/test_votereminder.py deleted file mode 100644 index 39d20824..00000000 --- a/test/test_votereminder.py +++ /dev/null @@ -1,114 +0,0 @@ -from typing import Tuple - -import pytest - -from aurweb import config, db, time -from aurweb.models import User, Vote, VoteInfo -from aurweb.models.account_type import PACKAGE_MAINTAINER_ID -from aurweb.scripts import votereminder as reminder -from aurweb.testing.email import Email - -aur_location = config.get("options", "aur_location") - - -def create_vote(user: User, voteinfo: VoteInfo) -> Vote: - with db.begin(): - vote = db.create(Vote, User=user, VoteID=voteinfo.ID) - return vote - - -def create_user(username: str, type_id: int): - with db.begin(): - user = db.create( - User, - AccountTypeID=type_id, - Username=username, - Email=f"{username}@example.org", - Passwd=str(), - ) - return user - - -def email_pieces(voteinfo: VoteInfo) -> Tuple[str, str]: - """ - Return a (subject, content) tuple based on voteinfo.ID - - :param voteinfo: VoteInfo instance - :return: tuple(subject, content) - """ - subject = f"Package Maintainer Vote Reminder: Proposal {voteinfo.ID}" - content = ( - f"Please remember to cast your vote on proposal {voteinfo.ID} " - f"[1]. The voting period\nends in less than 48 hours.\n\n" - f"[1] {aur_location}/package-maintainer/?id={voteinfo.ID}" - ) - return subject, content - - -@pytest.fixture -def user(db_test) -> User: - yield create_user("test", PACKAGE_MAINTAINER_ID) - - -@pytest.fixture -def user2() -> User: - yield create_user("test2", PACKAGE_MAINTAINER_ID) - - -@pytest.fixture -def user3() -> User: - yield create_user("test3", PACKAGE_MAINTAINER_ID) - - -@pytest.fixture -def voteinfo(user: User) -> VoteInfo: - now = time.utcnow() - start = config.getint("votereminder", "range_start") - with db.begin(): - voteinfo = db.create( - VoteInfo, - Agenda="Lorem ipsum.", - User=user.Username, - End=(now + start + 1), - Quorum=0.00, - Submitter=user, - Submitted=0, - ) - yield voteinfo - - -def test_vote_reminders(user: User, user2: User, user3: User, voteinfo: VoteInfo): - reminder.main() - assert Email.count() == 3 - - emails = [Email(i).parse() for i in range(1, 4)] - subject, content = email_pieces(voteinfo) - expectations = [ - # (to, content) - (user.Email, subject, content), - (user2.Email, subject, content), - (user3.Email, subject, content), - ] - for i, element in enumerate(expectations): - email, subject, content = element - assert emails[i].headers.get("To") == email - assert emails[i].headers.get("Subject") == subject - assert emails[i].body == content - - -def test_vote_reminders_only_unvoted( - user: User, user2: User, user3: User, voteinfo: VoteInfo -): - # Vote with user2 and user3; leaving only user to be notified. - create_vote(user2, voteinfo) - create_vote(user3, voteinfo) - - reminder.main() - assert Email.count() == 1 - - email = Email(1).parse() - assert email.headers.get("To") == user.Email - - subject, content = email_pieces(voteinfo) - assert email.headers.get("Subject") == subject - assert email.body == content diff --git a/upgrading/3.0.0.txt b/upgrading/3.0.0.txt index 4f9c70f6..b134b797 100644 --- a/upgrading/3.0.0.txt +++ b/upgrading/3.0.0.txt @@ -200,7 +200,7 @@ CREATE TABLE PackageRelations ( 17. Create tables to store package groups: ---- -CREATE TABLE `Groups` ( +CREATE TABLE Groups ( ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Name VARCHAR(64) NOT NULL, PRIMARY KEY (ID), @@ -211,7 +211,7 @@ CREATE TABLE PackageGroups ( GroupID INTEGER UNSIGNED NOT NULL, PRIMARY KEY (PackageID, GroupID), FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE, - FOREIGN KEY (GroupID) REFERENCES `Groups`(ID) ON DELETE CASCADE + FOREIGN KEY (GroupID) REFERENCES Groups(ID) ON DELETE CASCADE ) ENGINE = InnoDB; ---- diff --git a/upgrading/3.1.0.txt b/upgrading/3.1.0.txt index e883a6cd..2fc16147 100644 --- a/upgrading/3.1.0.txt +++ b/upgrading/3.1.0.txt @@ -7,7 +7,7 @@ ALTER TABLE Packages MODIFY Name VARCHAR(255) NOT NULL, MODIFY Version VARCHAR(255) NOT NULL DEFAULT ''; ALTER TABLE Licenses MODIFY Name VARCHAR(255) NOT NULL; -ALTER TABLE `Groups` MODIFY Name VARCHAR(255) NOT NULL; +ALTER TABLE Groups MODIFY Name VARCHAR(255) NOT NULL; ALTER TABLE PackageDepends MODIFY DepCondition VARCHAR(255); ALTER TABLE PackageRelations MODIFY RelCondition VARCHAR(255); ---- diff --git a/upgrading/3.4.0.txt b/upgrading/3.4.0.txt index b3804e94..c2f16888 100644 --- a/upgrading/3.4.0.txt +++ b/upgrading/3.4.0.txt @@ -1,5 +1,5 @@ -1. Add the "Package Maintainer & Developer" user group: +1. Add the "Trusted User & Developer" user group: ---- -INSERT INTO AccountTypes (ID, AccountType) VALUES (4, 'Package Maintainer & Developer'); +INSERT INTO AccountTypes (ID, AccountType) VALUES (4, 'Trusted User & Developer'); ---- diff --git a/upgrading/4.1.0.txt b/upgrading/4.1.0.txt deleted file mode 100644 index 26f9f65e..00000000 --- a/upgrading/4.1.0.txt +++ /dev/null @@ -1,26 +0,0 @@ -1. Add a timestamp for comment editing/deletion and an ID of the last user -who edited a comment: - ----- -ALTER TABLE PackageComments - ADD COLUMN EditedTS BIGINT UNSIGNED NULL DEFAULT NULL, - ADD COLUMN EditedUsersID INTEGER UNSIGNED NULL DEFAULT NULL, - ADD FOREIGN KEY (EditedUsersID) REFERENCES Users(ID) ON DELETE SET NULL; ----- - -2. Add fields to store the ID and comment of the last user who flagged a -package out-of-date: - ----- -ALTER TABLE PackageBases - ADD COLUMN FlaggerUID INTEGER UNSIGNED NULL DEFAULT NULL, - ADD COLUMN FlaggerComment VARCHAR(255) NOT NULL, - ADD FOREIGN KEY (FlaggerUID) REFERENCES Users(ID) ON DELETE SET NULL; ----- - -3. Add field to store the state of a user's email address: - ----- -ALTER TABLE Users - ADD COLUMN HideEmail TINYINT UNSIGNED NOT NULL DEFAULT 0; ----- diff --git a/upgrading/4.2.0.txt b/upgrading/4.2.0.txt deleted file mode 100644 index 0bf9a319..00000000 --- a/upgrading/4.2.0.txt +++ /dev/null @@ -1,57 +0,0 @@ -1. Add a new table to store providers from official packages: - ----- -CREATE TABLE OfficialProviders ( - ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - Name VARCHAR(64) NOT NULL, - Provides VARCHAR(64) NOT NULL, - PRIMARY KEY (ID) -) ENGINE = InnoDB; -CREATE UNIQUE INDEX ProviderNameProvides ON OfficialProviders (Name, Provides); ----- - -2. Resize the email address field: - ----- -ALTER TABLE Users MODIFY Email VARCHAR(254) NOT NULL; ----- - -3. Add new columns to the PackageComments table: - ----- -ALTER TABLE PackageComments - ADD COLUMN DelTS BIGINT UNSIGNED NULL DEFAULT NULL, - ADD COLUMN PinnedTS BIGINT UNSIGNED NOT NULL DEFAULT 0; ----- - -4. Update the deletion time stamp of all deleted comments: - ----- -UPDATE PackageComments SET DelTS = EditedTS WHERE DelUsersID IS NOT NULL; ----- - -5. Add new column to store the closure comment of package requests: - ----- -ALTER TABLE PackageRequests ADD COLUMN ClosureComment TEXT NOT NULL DEFAULT ''; ----- - -6. Change FlaggerComment from VARCHAR to TEXT: - ----- -ALTER TABLE PackageBases MODIFY COLUMN FlaggerComment TEXT NOT NULL DEFAULT ''; ----- - -7. Rename the CommentNotify table to PackageNotifications: - ----- -ALTER TABLE CommentNotify RENAME TO PackageNotifications; ----- - -8. Add new columns to store notification settings: - ----- -ALTER TABLE Users - ADD COLUMN CommentNotify TINYINT(1) NOT NULL DEFAULT 1, - ADD COLUMN UpdateNotify TINYINT(1) NOT NULL DEFAULT 0; ----- diff --git a/upgrading/4.2.1.txt b/upgrading/4.2.1.txt deleted file mode 100644 index 83c8d46a..00000000 --- a/upgrading/4.2.1.txt +++ /dev/null @@ -1,5 +0,0 @@ -1. Convert the LastLoginIPAddress column to VARCHAR(40): - ----- -ALTER TABLE Users MODIFY LastLoginIPAddress VARCHAR(40) NULL DEFAULT NULL; ----- diff --git a/upgrading/4.3.0.txt b/upgrading/4.3.0.txt deleted file mode 100644 index 78f94551..00000000 --- a/upgrading/4.3.0.txt +++ /dev/null @@ -1,29 +0,0 @@ -1. Add a column to store ownership notification settings: - ----- -ALTER TABLE Users ADD COLUMN OwnershipNotify TINYINT(1) NOT NULL DEFAULT 1; ----- - -2. Resize the LastLoginIPAddress column: - ----- -ALTER TABLE Users MODIFY LastLoginIPAddress VARCHAR(45) NULL DEFAULT NULL; ----- - -3. Add a new column to store repository information of official providers: - ----- -ALTER TABLE OfficialProviders ADD COLUMN Repo VARCHAR(64) NOT NULL; ----- - -4. Add a column to store users' homepages: - ----- -ALTER TABLE Users ADD COLUMN Homepage TEXT NULL DEFAULT NULL; ----- - -5. Resize LangPreference to fit Latin American Spanish language code: - --- -ALTER TABLE Users MODIFY LangPreference VARCHAR(6); --- diff --git a/upgrading/4.4.0.txt b/upgrading/4.4.0.txt deleted file mode 100644 index afe01bea..00000000 --- a/upgrading/4.4.0.txt +++ /dev/null @@ -1,17 +0,0 @@ -1. Resize the URL column of the Packages table: - ----- -ALTER TABLE Packages MODIFY URL VARCHAR(8000) NULL DEFAULT NULL; ----- - -2. Resize the Source column of the PackageSources table: - ----- -ALTER TABLE PackageSources - MODIFY Source VARCHAR(8000) NOT NULL DEFAULT "/dev/null"; ----- - -3. The location of the Git interface scripts was changed. Make sure you update - your aurweb configuration, as well as the SSH daemon and AUR Git repository - configurations to point to the new wrapper scripts which are located in - /usr/local/bin/ by default. diff --git a/upgrading/4.4.1.txt b/upgrading/4.4.1.txt deleted file mode 100644 index 726f9e2b..00000000 --- a/upgrading/4.4.1.txt +++ /dev/null @@ -1,6 +0,0 @@ -1. The default configuration file search path now points to /etc/aurweb/config. - Make sure you copy your aurweb configuration to the new location before - upgrading. - -2. The maintenance scripts have been prefixed by "aurweb-" and can now be - installed using `python3 setup.py install`. diff --git a/upgrading/4.5.0.txt b/upgrading/4.5.0.txt deleted file mode 100644 index 37b2b810..00000000 --- a/upgrading/4.5.0.txt +++ /dev/null @@ -1,26 +0,0 @@ -1. Add Timezone column to Users: - ---- -ALTER TABLE Users ADD COLUMN Timezone VARCHAR(32) NOT NULL DEFAULT 'UTC'; ---- - -2. Add LastSSHLogin and LastSSHLoginIPAddress columns to the Users table: - ---- -ALTER TABLE Users - ADD COLUMN LastSSHLogin BIGINT UNSIGNED NOT NULL DEFAULT 0, - ADD COLUMN LastSSHLoginIPAddress VARCHAR(45) NULL DEFAULT NULL; ---- - -3. Convert the IPAddress column of the Bans table to VARCHAR(45). If the table - contains any active bans, convert them accordingly: - ----- -ALTER TABLE Bans MODIFY IPAddress VARCHAR(45) NULL DEFAULT NULL; ----- - -4. Resize the Passwd column of the Users table: - ---- -ALTER TABLE Users MODIFY Passwd VARCHAR(255) NOT NULL; ---- diff --git a/upgrading/4.6.0.txt b/upgrading/4.6.0.txt deleted file mode 100644 index 816409d5..00000000 --- a/upgrading/4.6.0.txt +++ /dev/null @@ -1,37 +0,0 @@ -1. Add DepDesc column to PackageDepends and split dependency names: - ---- -ALTER TABLE PackageDepends ADD COLUMN DepDesc VARCHAR(255) NULL DEFAULT NULL; -UPDATE PackageDepends - SET DepDesc = SUBSTRING(DepName FROM POSITION(': ' IN DepName) + 2) - WHERE POSITION(': ' IN DepName) > 0; -UPDATE PackageDepends - SET DepName = SUBSTRING(DepName FROM 1 FOR POSITION(': ' IN DepName) - 1) - WHERE POSITION(': ' IN DepName) > 0; ---- - -2. Add RenderedComment column to PackageComments: - ---- -ALTER TABLE PackageComments ADD COLUMN RenderedComment TEXT NOT NULL; ---- - -3. Add Terms and AcceptedTerms tables: - ---- -CREATE TABLE Terms ( - ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - Description VARCHAR(255) NOT NULL, - URL VARCHAR(8000) NOT NULL, - Revision INTEGER UNSIGNED NOT NULL DEFAULT 1, - PRIMARY KEY (ID) -) ENGINE = InnoDB; - -CREATE TABLE AcceptedTerms ( - UsersID INTEGER UNSIGNED NOT NULL, - TermsID INTEGER UNSIGNED NOT NULL, - Revision INTEGER UNSIGNED NOT NULL DEFAULT 0, - FOREIGN KEY (UsersID) REFERENCES Users(ID) ON DELETE CASCADE, - FOREIGN KEY (TermsID) REFERENCES Terms(ID) ON DELETE CASCADE -) ENGINE = InnoDB; ---- diff --git a/upgrading/4.7.0.txt b/upgrading/4.7.0.txt deleted file mode 100644 index 820e4540..00000000 --- a/upgrading/4.7.0.txt +++ /dev/null @@ -1,11 +0,0 @@ -1. Add ApiRateLimit table: - ---- -CREATE TABLE `ApiRateLimit` ( - IP VARCHAR(45) NOT NULL, - Requests INT(11) NOT NULL, - WindowStart BIGINT(20) NOT NULL, - PRIMARY KEY (`ip`) -) ENGINE = InnoDB; -CREATE INDEX ApiRateLimitWindowStart ON ApiRateLimit (WindowStart); ---- diff --git a/upgrading/5.x.x.txt b/upgrading/5.x.x.txt deleted file mode 100644 index 94f91c69..00000000 --- a/upgrading/5.x.x.txt +++ /dev/null @@ -1,20 +0,0 @@ -Starting from release 5.0.0, Alembic is used for managing database migrations. - -Run `alembic upgrade head` from the aurweb root directory to upgrade your -database after upgrading the source code to a new release. - -When upgrading from 4.8.0, you also need to execute the following manual SQL -statements before doing so. - -1. Add new columns to store the timestamp and UID when closing requests: - ----- -ALTER TABLE PackageRequests ADD COLUMN ClosedTS BIGINT UNSIGNED NULL DEFAULT NULL; -ALTER TABLE PackageRequests ADD COLUMN ClosedUID INTEGER UNSIGNED NULL DEFAULT NULL; ----- - -2. Add a new column to store backup email addresses: - ----- -ALTER TABLE Users ADD COLUMN BackupEmail VARCHAR(254) NULL DEFAULT NULL; ----- diff --git a/upgrading/post-checkout b/upgrading/post-checkout deleted file mode 100755 index 7ad41cfd..00000000 --- a/upgrading/post-checkout +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -( cd doc/ && make ) -( cd po/ && make && make install ) diff --git a/util/fix-coverage b/util/fix-coverage deleted file mode 100755 index 77cf29c1..00000000 --- a/util/fix-coverage +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env python3 -""" A simple script which updates paths for .coverage executed -in another directory. This is particularly useful for fixing -.coverage files received via ./cache/.coverage after Docker runs. - -Copyright (C) 2021 aurweb Development -All Rights Reserved. -""" -import os -import re -import sqlite3 -import sys -import traceback - -import aurweb.config - - -def eprint(*args, **kwargs): - print(*args, **kwargs, file=sys.stderr) - - -def main(): - if len(sys.argv) == 1: - print(f"usage: {sys.argv[0]} .coverage") - return 1 - - coverage_db = sys.argv[1] - if not os.path.exists(coverage_db): - eprint("error: coverage file not found") - return 2 - - aurwebdir = aurweb.config.get("options", "aurwebdir") - new_coverage_db = os.path.join(aurwebdir, ".coverage") - with open(coverage_db, "rb") as i: - with open(new_coverage_db, "wb") as f: - f.write(i.read()) - print(f"Copied coverage db to {new_coverage_db}.") - coverage_db = new_coverage_db - - sqlite3.paramstyle = "format" - db = sqlite3.connect(coverage_db) - - cursor = db.cursor() - results = cursor.execute("SELECT * FROM file") - - files = dict() - for i, path in results: - files[i] = path - - for _, i in enumerate(files.keys()): - new_path = re.sub(r"^/aurweb", aurwebdir, files[i]) - cursor.execute("UPDATE file SET path = ? WHERE id = ?", (new_path, i)) - - db.commit() - db.close() - - return 0 - - -if __name__ == "__main__": - e = 1 - try: - e = main() - except Exception: - traceback.print_exc() - e = 1 - sys.exit(e) diff --git a/util/sendmail b/util/sendmail deleted file mode 100755 index 9356851a..00000000 --- a/util/sendmail +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -# Send email to temporary filesystem for tests. -dir='test-emails' -filename='email.txt' -if [ ! -z ${PYTEST_CURRENT_TEST+x} ]; then - filename="$(echo $PYTEST_CURRENT_TEST | cut -d ' ' -f 1 | sed -r 's/(\/|\.|,|:)/_/g')" -fi -mkdir -p "$dir" - -path="${dir}/${filename}" -serial_file="${path}.serial" -if [ ! -f $serial_file ]; then - echo 0 > $serial_file -fi - -# Increment and update $serial_file. -serial=$(($(cat $serial_file) + 1)) -echo $serial > $serial_file - -# Use the serial we're on to mark the email file. -# Emails have the format: PYTEST_CURRENT_TEST.s.txt -# where s is the current serial for PYTEST_CURRENT_TEST. -cat > "${path}.${serial}.txt" - -exit 0 diff --git a/web/html/404.php b/web/html/404.php new file mode 100644 index 00000000..a47ae1e4 --- /dev/null +++ b/web/html/404.php @@ -0,0 +1,14 @@ + + +
+

404 -

+

+
+ + + +
+

503 -

+

+
+ +\n"; +echo "

".__("Accounts")."

\n"; + +if (isset($_COOKIE["AURSID"])) { + if ($action == "SearchAccounts") { + + # security check + # + if (has_credential(CRED_ACCOUNT_SEARCH)) { + # the user has entered search criteria, find any matching accounts + # + search_results_page(in_request("O"), in_request("SB"), + in_request("U"), in_request("T"), in_request("S"), + in_request("E"), in_request("R"), in_request("I"), + in_request("K")); + + } else { + # a non-privileged user is trying to access the search page + # + print __("You are not allowed to access this area.")."
\n"; + } + + } elseif ($action == "DisplayAccount") { + # the user has clicked 'edit', display the account details in a form + # + if (empty($row)) { + print __("Could not retrieve information for the specified user."); + } else { + /* Verify user has permission to edit the account */ + if (can_edit_account($row)) { + display_account_form("UpdateAccount", $row["Username"], + $row["AccountTypeID"], $row["Suspended"], $row["Email"], + "", "", $row["RealName"], $row["LangPreference"], + $row["IRCNick"], $row["PGPKey"], $PK, + $row["InactivityTS"] ? 1 : 0, $row["ID"]); + } else { + print __("You do not have permission to edit this account."); + } + } + + } elseif ($action == "DeleteAccount") { + /* Details for account being deleted. */ + if (can_edit_account($row)) { + $UID = $row['ID']; + if (in_request('confirm') && check_token()) { + user_delete($UID); + header('Location: /'); + } else { + $username = $row['Username']; + include("account_delete.php"); + } + } else { + print __("You do not have permission to edit this account."); + } + } elseif ($action == "AccountInfo") { + # no editing, just looking up user info + # + if (empty($row)) { + print __("Could not retrieve information for the specified user."); + } else { + include("account_details.php"); + } + + } elseif ($action == "UpdateAccount") { + /* Details for account being updated */ + /* Verify user permissions and that the request is a valid POST */ + if (can_edit_account($row) && check_token()) { + /* Update the details for the existing account */ + process_account_form("edit", "UpdateAccount", + in_request("U"), in_request("T"), in_request("S"), + in_request("E"), in_request("P"), in_request("C"), + in_request("R"), in_request("L"), in_request("I"), + in_request("K"), in_request("PK"), in_request("J"), + in_request("ID")); + } + } else { + if (has_credential(CRED_ACCOUNT_SEARCH)) { + # display the search page if they're a TU/dev + # + print __("Use this form to search existing accounts.")."
\n"; + include('search_accounts_form.php'); + + } else { + print __("You are not allowed to access this area."); + } + } + +} else { + # visitor is not logged in + # + print __("You must log in to view user information."); +} + +echo ""; + +html_footer(AURWEB_VERSION); + +?> diff --git a/web/html/addvote.php b/web/html/addvote.php new file mode 100644 index 00000000..03725182 --- /dev/null +++ b/web/html/addvote.php @@ -0,0 +1,117 @@ +" . __("New proposal submitted.") . "

\n"; + } else { +?> + + +

+ + +
+

+ +
+

+ + + +

+

+ + +

+

+
+
+ + + " /> +

+
+
+ + +
+
+
+

AUR

+

+ ', + '', + '', + '' + ); + ?> + ', '', + '', + '' + ); + ?> + + +

+

+ : + +

+

+
+
+

+

+
+

+ ', + '' + ); + ?> +

+
    +
  • :
  • +
  • :
  • +
  • :
  • +
+

+ ', + '' + ); + ?> +

+
+

+
+

+ ', + '' + ); + ?> +

+ +

+ +

+
    + $fingerprint): ?> +
  • :
  • + +
+ +
+

+
+

+ ', + '', + '', + '' + ); + ?> +

+
+

+
+

+ ', + '', + '', + '' + ); + ?> +

+
+
+
+
+
+
+
+
+ + + " maxlength="35" /> +
+
+
+
+ +
+
+ +
+ +
+ +
+ + +
+ + + + '1'); + } + } + + include get_route('/' . $tokens[1]); +} elseif (!empty($tokens[1]) && '/' . $tokens[1] == get_pkgreq_route()) { + if (!empty($tokens[2])) { + /* TODO: Create a proper data structure to pass variables from + * the routing framework to the individual pages instead of + * initializing arbitrary variables here. */ + if (!empty($tokens[3]) && $tokens[3] == 'close') { + $pkgreq_id = $tokens[2]; + } else { + $pkgreq_id = null; + } + + if (!$pkgreq_id) { + header("HTTP/1.0 404 Not Found"); + include "./404.php"; + return; + } + } + + include get_route('/' . $tokens[1]); +} elseif (!empty($tokens[1]) && '/' . $tokens[1] == get_user_route()) { + if (!empty($tokens[2])) { + $_REQUEST['ID'] = uid_from_username($tokens[2]); + + if (!$_REQUEST['ID']) { + header("HTTP/1.0 404 Not Found"); + include "./404.php"; + return; + } + + if (!empty($tokens[3])) { + if ($tokens[3] == 'edit') { + $_REQUEST['Action'] = "DisplayAccount"; + } elseif ($tokens[3] == 'update') { + $_REQUEST['Action'] = "UpdateAccount"; + } elseif ($tokens[3] == 'delete') { + $_REQUEST['Action'] = "DeleteAccount"; + } else { + header("HTTP/1.0 404 Not Found"); + include "./404.php"; + return; + } + } else { + $_REQUEST['Action'] = "AccountInfo"; + } + } + include get_route('/' . $tokens[1]); +} elseif (get_route($path) !== NULL) { + include get_route($path); +} else { + switch ($path) { + case "/css/archweb.css": + case "/css/aurweb.css": + case "/css/cgit.css": + case "/css/archnavbar/archnavbar.css": + header("Content-Type: text/css"); + readfile("./$path"); + break; + case "/css/archnavbar/archlogo.gif": + case "/images/new.png": + header("Content-Type: image/png"); + readfile("./$path"); + break; + case "/css/archnavbar/archlogo.png": + case "/css/archnavbar/aurlogo.png": + case "/images/AUR-logo-80.png": + case "/images/AUR-logo.png": + case "/images/favicon.ico": + case "/images/feed-icon-14x14.png": + case "/images/titlelogo.png": + case "/images/x.png": + header("Content-Type: image/png"); + readfile("./$path"); + break; + case "/js/bootstrap-typeahead.min.js": + header("Content-Type: application/javascript"); + readfile("./$path"); + break; + case "/packages.gz": + case "/pkgbase.gz": + header("Content-Type: text/plain"); + header("Content-Encoding: gzip"); + readfile("./$path"); + break; + default: + header("HTTP/1.0 404 Not Found"); + include "./404.php"; + break; + } +} diff --git a/web/html/js/bootstrap-typeahead.min.js b/web/html/js/bootstrap-typeahead.min.js new file mode 100644 index 00000000..7d555ed9 --- /dev/null +++ b/web/html/js/bootstrap-typeahead.min.js @@ -0,0 +1 @@ +!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=e(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return e&&this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:t.top+t.height,left:t.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length"+t+""})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),(e.browser.chrome||e.browser.webkit||e.browser.msie)&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this))},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=!~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},blur:function(e){var t=this;setTimeout(function(){t.hide()},150)},click:function(e){e.stopPropagation(),e.preventDefault(),this.select()},mouseenter:function(t){this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")}},e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'',item:'
  • ',minLength:1},e.fn.typeahead.Constructor=t,e(function(){e("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;t.preventDefault(),n.typeahead(n.data())})})}(window.jQuery) \ No newline at end of file diff --git a/web/html/login.php b/web/html/login.php new file mode 100644 index 00000000..ab7bac9e --- /dev/null +++ b/web/html/login.php @@ -0,0 +1,61 @@ + +
    +

    AUR

    + +

    + ' . username_from_sid($_COOKIE["AURSID"]) . ''); ?> + [] +

    + +
    +
    + + +
    + +

    + + +

    +

    + + +

    +

    + + +

    +

    + " /> + [] + + + + + +

    +
    +
    + +

    + ', ''); ?> +

    + +
    + + + + + +\n"; + } +} else { + if (!isset($_GET['K']) && !isset($_GET['SB'])) { + $_GET['SB'] = 'p'; + $_GET['SO'] = 'd'; + } + if (isset($_COOKIE["AURSID"])) { + pkg_search_page($_COOKIE["AURSID"]); + } else { + pkg_search_page(); + } +} + +html_footer(AURWEB_VERSION); + diff --git a/web/html/passreset.php b/web/html/passreset.php new file mode 100644 index 00000000..29f2c648 --- /dev/null +++ b/web/html/passreset.php @@ -0,0 +1,114 @@ + + +
    +

    + + +

    + +

    + + +
    + +
    + + + + + + + + + + + + + +
    +
    + +
    + +

    ', + ''); ?>

    + +
    + +
    +

    +

    + +
    + +
    + + $i) { + $id = intval($id); + if ($id > 0) { + $ids[] = $id; + } + } +} + +/* Perform package base actions. */ +$ret = false; +$output = ""; +if (check_token()) { + if (current_action("do_Flag")) { + list($ret, $output) = pkgbase_flag($ids); + } elseif (current_action("do_UnFlag")) { + list($ret, $output) = pkgbase_unflag($ids); + } elseif (current_action("do_Adopt")) { + list($ret, $output) = pkgbase_adopt($ids, true, NULL); + } elseif (current_action("do_Disown")) { + if (isset($_POST['confirm'])) { + $via = isset($_POST['via']) ? $_POST['via'] : NULL; + list($ret, $output) = pkgbase_adopt($ids, false, $via); + } else { + $output = __("The selected packages have not been disowned, check the confirmation checkbox."); + $ret = false; + } + } elseif (current_action("do_Vote")) { + list($ret, $output) = pkgbase_vote($ids, true); + } elseif (current_action("do_UnVote")) { + list($ret, $output) = pkgbase_vote($ids, false); + } elseif (current_action("do_Delete")) { + if (isset($_POST['confirm'])) { + $via = isset($_POST['via']) ? $_POST['via'] : NULL; + if (!isset($_POST['merge_Into']) || empty($_POST['merge_Into'])) { + list($ret, $output) = pkgbase_delete($ids, NULL, $via); + unset($_GET['ID']); + } + else { + $merge_base_id = pkgbase_from_name($_POST['merge_Into']); + if (!$merge_base_id) { + $output = __("Cannot find package to merge votes and comments into."); + $ret = false; + } elseif (in_array($merge_base_id, $ids)) { + $output = __("Cannot merge a package base with itself."); + $ret = false; + } else { + list($ret, $output) = pkgbase_delete($ids, $merge_base_id, $via); + unset($_GET['ID']); + } + } + } + else { + $output = __("The selected packages have not been deleted, check the confirmation checkbox."); + $ret = false; + } + } elseif (current_action("do_Notify")) { + list($ret, $output) = pkgbase_notify($ids); + } elseif (current_action("do_UnNotify")) { + list($ret, $output) = pkgbase_notify($ids, false); + } elseif (current_action("do_DeleteComment")) { + list($ret, $output) = pkgbase_delete_comment(); + } elseif (current_action("do_SetKeywords")) { + list($ret, $output) = pkgbase_set_keywords($base_id, preg_split("/[\s,;]+/", $_POST['keywords'], -1, PREG_SPLIT_NO_EMPTY)); + } elseif (current_action("do_FileRequest")) { + list($ret, $output) = pkgreq_file($ids, $_POST['type'], $_POST['merge_into'], $_POST['comments']); + } elseif (current_action("do_CloseRequest")) { + list($ret, $output) = pkgreq_close($_POST['reqid'], $_POST['reason'], $_POST['comments']); + } elseif (current_action("do_EditComaintainers")) { + list($ret, $output) = pkgbase_set_comaintainers($base_id, explode("\n", $_POST['users'])); + } + + if (isset($_REQUEST['comment'])) { + $uid = uid_from_sid($_COOKIE["AURSID"]); + pkgbase_add_comment($base_id, $uid, $_REQUEST['comment']); + $ret = true; + } + + if ($ret) { + if (current_action("do_CloseRequest") || + (current_action("do_Delete") && $_POST['via'])) { + /* Redirect back to package request page on success. */ + header('Location: ' . get_pkgreq_route()); + exit(); + } if (isset($base_id)) { + /* Redirect back to package base page on success. */ + header('Location: ' . get_pkgbase_uri($pkgbase_name)); + exit(); + } else { + /* Redirect back to package search page. */ + header('Location: ' . get_pkg_route()); + exit(); + } + } +} + +$pkgs = pkgbase_get_pkgnames($base_id); +if (!$output && count($pkgs) == 1) { + /* Not a split package. Redirect to the package page. */ + if (empty($_SERVER['QUERY_STRING'])) { + header('Location: ' . get_pkg_uri($pkgs[0])); + } else { + header('Location: ' . get_pkg_uri($pkgs[0]) . '?' . $_SERVER['QUERY_STRING']); + } +} + +$details = pkgbase_get_details($base_id); +html_header($title, $details); +?> + + + +

    + +
    + + + + +
    +

    +

    + ', htmlspecialchars($pkgbase_name), ''); ?> +

    +
      + +
    • + +
    +

    + + +

    +
    +
    + + + + + + +

    +

    " />

    +
    +
    +
    + + +
    +

    +

    + ', htmlspecialchars($pkgbase_name), ''); ?> +

    +
      + +
    • + +
    +

    + 0 && !has_credential(CRED_PKGBASE_DISOWN)): ?> + ', $comaintainers[0], ''); ?> + + + +

    +
    +
    + + + + + + +

    " />

    +
    +
    +
    + + +
    +

    +

    + ', htmlspecialchars($pkgbase_name), ''); ?> + +

    +
      + +
    • + +
    +

    + + + +

    +
    +
    + + + + + + + + + +

    +

    +

    +

    " />

    +
    +
    +
    + + 0) ? $_GET['PP'] : 50; + $current = ceil($first / $per_page); + $pages = ceil($total / $per_page); + $templ_pages = array(); + + if ($current > 1) { + $templ_pages['« ' . __('First')] = 0; + $templ_pages['‹ ' . __('Previous')] = ($current - 2) * $per_page; + } + + if ($current - 5 > 1) + $templ_pages["..."] = false; + + for ($i = max($current - 5, 1); $i <= min($pages, $current + 5); $i++) { + $templ_pages[$i] = ($i - 1) * $per_page; + } + + if ($current + 5 < $pages) + $templ_pages["... "] = false; + + if ($current < $pages) { + $templ_pages[__('Next') . ' ›'] = $current * $per_page; + $templ_pages[__('Last') . ' »'] = ($pages - 1) * $per_page; + } + + $SID = $_COOKIE['AURSID']; + + html_header(__("Requests")); + include('pkgreq_results.php'); +} + +html_footer(AURWEB_VERSION); + diff --git a/web/html/register.php b/web/html/register.php new file mode 100644 index 00000000..014d8026 --- /dev/null +++ b/web/html/register.php @@ -0,0 +1,36 @@ +'; +echo '

    ' . __('Register') . '

    '; + +if (in_request("Action") == "NewAccount") { + process_account_form("new", "NewAccount", in_request("U"), 1, 0, + in_request("E"), '', '', in_request("R"), + in_request("L"), in_request("I"), in_request("K"), + in_request("PK")); + +} else { + print __("Use this form to create an account."); + display_account_form("NewAccount", "", "", "", "", "", "", "", $LANG); +} + +echo ''; + +html_footer(AURWEB_VERSION); + +?> diff --git a/web/html/rpc.php b/web/html/rpc.php new file mode 100644 index 00000000..415dcb82 --- /dev/null +++ b/web/html/rpc.php @@ -0,0 +1,44 @@ +handle($_GET); +} +else { + // dump a simple usage output for people to use. + // this could be moved to an api doc in the future, or generated from + // the AurJSON class directly with phpdoc. For now though, just putting it + // here. +?> + +

    Allowed methods

    +
      +
    • search
    • +
    • info
    • +
    • multiinfo
    • +
    • msearch
    • +
    +

    Each method requires the following HTTP GET syntax:

    +
    type=methodname&arg=data
    +

    Where methodname is the name of an allowed method, and data is the argument to the call.

    +

    If you need jsonp type callback specification, you can provide an additional variable callback.

    +

    Examples

    +
    +
    search
    http://aur-url/rpc.php?type=search&arg=foobar
    +
    info
    http://aur-url/rpc.php?type=info&arg=foobar
    +
    multiinfo
    http://aur-url/rpc.php?type=multiinfo&arg[]=foo&arg[]=bar
    +
    msearch
    http://aur-url/rpc.php?type=msearch&arg=john
    +
    Callback
    http://aur-url/rpc.php?type=search&arg=foobar&callback=jsonp1192244621103
    +
    + + diff --git a/web/html/rss.php b/web/html/rss.php new file mode 100644 index 00000000..2470d994 --- /dev/null +++ b/web/html/rss.php @@ -0,0 +1,58 @@ +cssStyleSheet = false; +$rss->xslStyleSheet = false; + +# Use UTF-8 (fixes FS#10706). +$rss->encoding = "UTF-8"; + +#All the general RSS setup +$rss->title = "AUR Newest Packages"; +$rss->description = "The latest and greatest packages in the AUR"; +$rss->link = "${protocol}://{$host}"; +$rss->syndicationURL = "{$protocol}://{$host}" . get_uri('/rss/'); +$image = new FeedImage(); +$image->title = "AUR"; +$image->url = "{$protocol}://{$host}/images/AUR-logo-80.png"; +$image->link = $rss->link; +$image->description = "AUR Newest Packages Feed"; +$rss->image = $image; + +#Get the latest packages and add items for them +$packages = latest_pkgs(20); + +while (list($indx, $row) = each($packages)) { + $item = new FeedItem(); + $item->title = $row["Name"]; + $item->link = "{$protocol}://{$host}" . get_pkg_uri($row["Name"]); + $item->description = $row["Description"]; + $item->date = intval($row["SubmittedTS"]); + $item->source = "{$protocol}://{$host}"; + $item->author = username_from_id($row["MaintainerUID"]); + $rss->addItem($item); +} + +#save it so that useCached() can find it +$feedContent = $rss->createFeed(); +set_cache_value($feed_key, $feedContent, 1800); +echo $feedContent; +?> diff --git a/web/html/tu.php b/web/html/tu.php new file mode 100644 index 00000000..cc77d625 --- /dev/null +++ b/web/html/tu.php @@ -0,0 +1,125 @@ + time() ? 1 : 0; + + # List voters of a proposal. + $whovoted = voter_list($row['ID']); + + $canvote = 1; + $hasvoted = 0; + $errorvote = ""; + if ($isrunning == 0) { + $canvote = 0; + $errorvote = __("Voting is closed for this proposal."); + } else if (!has_credential(CRED_TU_VOTE)) { + $canvote = 0; + $errorvote = __("Only Trusted Users are allowed to vote."); + } else if ($row['User'] == username_from_sid($_COOKIE["AURSID"])) { + $canvote = 0; + $errorvote = __("You cannot vote in an proposal about you."); + } + if (tu_voted($row['ID'], uid_from_sid($_COOKIE["AURSID"]))) { + $canvote = 0; + $hasvoted = 1; + if ($isrunning) { + $errorvote = __("You've already voted for this proposal."); + } + } + + if ($canvote == 1) { + if (isset($_POST['doVote']) && check_token()) { + if (isset($_POST['voteYes'])) { + $myvote = "Yes"; + } else if (isset($_POST['voteNo'])) { + $myvote = "No"; + } else if (isset($_POST['voteAbstain'])) { + $myvote = "Abstain"; + } + + cast_proposal_vote($row['ID'], uid_from_sid($_COOKIE["AURSID"]), $myvote, $row[$myvote] + 1); + + # Can't vote anymore + # + $canvote = 0; + $errorvote = __("You've already voted for this proposal."); + + # Update if they voted + if (tu_voted($row['ID'], uid_from_sid($_COOKIE["AURSID"]))) { + $hasvoted = 1; + } + $row = vote_details($_GET['id']); + } + } + include("tu_details.php"); + } + } else { + print __("Vote ID not valid."); + } + + } else { + $limit = $pp; + if (isset($_GET['off'])) + $offset = $_GET['off']; + + if (isset($_GET['by'])) + $by = $_GET['by']; + else + $by = 'desc'; + + if (!empty($offset) && is_numeric($offset)) { + if ($offset >= 1) { + $off = $offset; + } else { + $off = 0; + } + } else { + $off = 0; + } + + $order = ($by == 'asc') ? 'ASC' : 'DESC'; + $lim = ($limit > 0) ? " LIMIT $limit OFFSET $off" : ""; + $by_next = ($by == 'desc') ? 'asc' : 'desc'; + + $result = current_proposal_list($order); + $type = __("Current Votes"); + $nextresult = 0; + include("tu_list.php"); + + $result = past_proposal_list($order, $lim); + $type = __("Past Votes"); + $nextresult = proposal_count(); + include("tu_list.php"); + + $result = last_votes_list(); + include("tu_last_votes_list.php"); + } +} +else { + header('Location: /'); +} + +html_footer(AURWEB_VERSION); + diff --git a/web/html/voters.php b/web/html/voters.php new file mode 100644 index 00000000..8833be1e --- /dev/null +++ b/web/html/voters.php @@ -0,0 +1,34 @@ + + +
    +

    Votes for

    +
    +
      + +
    • + + 0): ?> + () + +
    • + +
    +
    +
    + +exec("SET NAMES 'utf8' COLLATE 'utf8_general_ci';"); + } catch (PDOException $e) { + die('Error - Could not connect to AUR database'); + } + } + + return self::$dbh; + } +} diff --git a/web/lib/acctfuncs.inc.php b/web/lib/acctfuncs.inc.php new file mode 100644 index 00000000..861de0ac --- /dev/null +++ b/web/lib/acctfuncs.inc.php @@ -0,0 +1,1311 @@ +\n" + . "
  • " . __("It must be between %s and %s characters long", $length_min, $length_max) + . "
  • " + . "
  • " . __("Start and end with a letter or number") . "
  • " + . "
  • " . __("Can contain only one period, underscore or hyphen.") + . "
  • \n"; + } + + if (!$error && $P && $C && ($P != $C)) { + $error = __("Password fields do not match."); + } + if (!$error && $P != '' && !good_passwd($P)) { + $length_min = config_get_int('options', 'passwd_min_len'); + $error = __("Your password must be at least %s characters.", + $length_min); + } + + if (!$error && !valid_email($E)) { + $error = __("The email address is invalid."); + } + + if (!$error && $K != '' && !valid_pgp_fingerprint($K)) { + $error = __("The PGP key fingerprint is invalid."); + } + + if (!$error && !empty($PK)) { + $ssh_keys = array_filter(array_map('trim', explode("\n", $PK))); + $ssh_fingerprints = array(); + + foreach ($ssh_keys as &$ssh_key) { + if (!valid_ssh_pubkey($ssh_key)) { + $error = __("The SSH public key is invalid."); + break; + } + + $ssh_fingerprint = ssh_key_fingerprint($ssh_key); + if (!$ssh_fingerprint) { + $error = __("The SSH public key is invalid."); + break; + } + + $tokens = explode(" ", $ssh_key); + $ssh_key = $tokens[0] . " " . $tokens[1]; + + $ssh_fingerprints[] = $ssh_fingerprint; + } + + /* + * Destroy last reference to prevent accidentally overwriting + * an array element. + */ + unset($ssh_key); + } + + if (isset($_COOKIE['AURSID'])) { + $atype = account_from_sid($_COOKIE['AURSID']); + if (($atype == "User" && $T > 1) || ($atype == "Trusted User" && $T > 2)) { + $error = __("Cannot increase account permissions."); + } + } + + if (!$error && !array_key_exists($L, $SUPPORTED_LANGS)) { + $error = __("Language is not currently supported."); + } + if (!$error) { + /* + * Check whether the user name is available. + * TODO: Fix race condition. + */ + $q = "SELECT COUNT(*) AS CNT FROM Users "; + $q.= "WHERE Username = " . $dbh->quote($U); + if ($TYPE == "edit") { + $q.= " AND ID != ".intval($UID); + } + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_NUM); + + if ($row[0]) { + $error = __("The username, %s%s%s, is already in use.", + "", htmlspecialchars($U,ENT_QUOTES), ""); + } + } + if (!$error) { + /* + * Check whether the e-mail address is available. + * TODO: Fix race condition. + */ + $q = "SELECT COUNT(*) AS CNT FROM Users "; + $q.= "WHERE Email = " . $dbh->quote($E); + if ($TYPE == "edit") { + $q.= " AND ID != ".intval($UID); + } + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_NUM); + + if ($row[0]) { + $error = __("The address, %s%s%s, is already in use.", + "", htmlspecialchars($E,ENT_QUOTES), ""); + } + } + if (!$error && count($ssh_keys) > 0) { + /* + * Check whether any of the SSH public keys is already in use. + * TODO: Fix race condition. + */ + $q = "SELECT Fingerprint FROM SSHPubKeys "; + $q.= "WHERE Fingerprint IN ("; + $q.= implode(',', array_map(array($dbh, 'quote'), $ssh_fingerprints)); + $q.= ")"; + if ($TYPE == "edit") { + $q.= " AND UserID != " . intval($UID); + } + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_NUM); + + if ($row) { + $error = __("The SSH public key, %s%s%s, is already in use.", + "", htmlspecialchars($row[0], ENT_QUOTES), ""); + } + } + + if ($error) { + print "
    • ".$error."
    \n"; + display_account_form($A, $U, $T, $S, $E, "", "", + $R, $L, $I, $K, $PK, $J, $UID); + return; + } + + if ($TYPE == "new") { + /* Create an unprivileged user. */ + $salt = generate_salt(); + if (empty($P)) { + $send_resetkey = true; + $email = $E; + } else { + $send_resetkey = false; + $P = salted_hash($P, $salt); + } + $U = $dbh->quote($U); + $E = $dbh->quote($E); + $P = $dbh->quote($P); + $salt = $dbh->quote($salt); + $R = $dbh->quote($R); + $L = $dbh->quote($L); + $I = $dbh->quote($I); + $K = $dbh->quote(str_replace(" ", "", $K)); + $q = "INSERT INTO Users (AccountTypeID, Suspended, "; + $q.= "InactivityTS, Username, Email, Passwd, Salt, "; + $q.= "RealName, LangPreference, IRCNick, PGPKey) "; + $q.= "VALUES (1, 0, 0, $U, $E, $P, $salt, $R, $L, "; + $q.= "$I, $K)"; + $result = $dbh->exec($q); + if (!$result) { + print __("Error trying to create account, %s%s%s.", + "", htmlspecialchars($U,ENT_QUOTES), ""); + return; + } + + $uid = $dbh->lastInsertId(); + account_set_ssh_keys($uid, $ssh_keys, $ssh_fingerprints); + + print __("The account, %s%s%s, has been successfully created.", + "", htmlspecialchars($U,ENT_QUOTES), ""); + print "

    \n"; + + if (!$send_resetkey) { + print __("Click on the Login link above to use your account."); + print "

    \n"; + return; + } + + $subject = 'Welcome to the Arch User Repository'; + $body = __('Welcome to %s! In order ' . + 'to set an initial password ' . + 'for your new account, ' . + 'please click the link ' . + 'below. If the link does ' . + 'not work try copying and ' . + 'pasting it into your ' . + 'browser.', + aur_location()); + send_resetkey($email, $subject, $body); + + print __("A password reset key has been sent to your e-mail address."); + print "

    \n"; + } else { + /* Modify an existing account. */ + $q = "SELECT InactivityTS FROM Users WHERE "; + $q.= "ID = " . intval($UID); + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_NUM); + if ($row[0] && $J) { + $inactivity_ts = $row[0]; + } elseif ($J) { + $inactivity_ts = time(); + } else { + $inactivity_ts = 0; + } + + $q = "UPDATE Users SET "; + $q.= "Username = " . $dbh->quote($U); + if ($T) { + $q.= ", AccountTypeID = ".intval($T); + } + if ($S) { + /* Ensure suspended users can't keep an active session */ + delete_user_sessions($UID); + $q.= ", Suspended = 1"; + } else { + $q.= ", Suspended = 0"; + } + $q.= ", Email = " . $dbh->quote($E); + if ($P) { + $salt = generate_salt(); + $hash = salted_hash($P, $salt); + $q .= ", Passwd = '$hash', Salt = '$salt'"; + } + $q.= ", RealName = " . $dbh->quote($R); + $q.= ", LangPreference = " . $dbh->quote($L); + $q.= ", IRCNick = " . $dbh->quote($I); + $q.= ", PGPKey = " . $dbh->quote(str_replace(" ", "", $K)); + $q.= ", InactivityTS = " . $inactivity_ts; + $q.= " WHERE ID = ".intval($UID); + $result = $dbh->exec($q); + + $ssh_key_result = account_set_ssh_keys($UID, $ssh_keys, $ssh_fingerprints); + + if ($result === false || $ssh_key_result === false) { + print __("No changes were made to the account, %s%s%s.", + "", htmlspecialchars($U,ENT_QUOTES), ""); + } else { + print __("The account, %s%s%s, has been successfully modified.", + "", htmlspecialchars($U,ENT_QUOTES), ""); + } + } +} + +/** + * Display the search results page + * + * @param string $O The offset for the results page + * @param string $SB The column to sort the results page by + * @param string $U The username search criteria + * @param string $T The account type search criteria + * @param string $S Whether the account is suspended search criteria + * @param string $E The e-mail address search criteria + * @param string $R The real name search criteria + * @param string $I The IRC nickname search criteria + * @param string $K The PGP key fingerprint search criteria + * + * @return void + */ +function search_results_page($O=0,$SB="",$U="",$T="", + $S="",$E="",$R="",$I="",$K="") { + + $HITS_PER_PAGE = 50; + if ($O) { + $OFFSET = intval($O); + } else { + $OFFSET = 0; + } + if ($OFFSET < 0) { + $OFFSET = 0; + } + $search_vars = array(); + + $dbh = DB::connect(); + + $q = "SELECT Users.*, AccountTypes.AccountType "; + $q.= "FROM Users, AccountTypes "; + $q.= "WHERE AccountTypes.ID = Users.AccountTypeID "; + if ($T == "u") { + $q.= "AND AccountTypes.ID = 1 "; + $search_vars[] = "T"; + } elseif ($T == "t") { + $q.= "AND AccountTypes.ID = 2 "; + $search_vars[] = "T"; + } elseif ($T == "d") { + $q.= "AND AccountTypes.ID = 3 "; + $search_vars[] = "T"; + } elseif ($T == "td") { + $q.= "AND AccountTypes.ID = 4 "; + $search_vars[] = "T"; + } + if ($S) { + $q.= "AND Users.Suspended = 1 "; + $search_vars[] = "S"; + } + if ($U) { + $U = "%" . addcslashes($U, '%_') . "%"; + $q.= "AND Username LIKE " . $dbh->quote($U) . " "; + $search_vars[] = "U"; + } + if ($E) { + $E = "%" . addcslashes($E, '%_') . "%"; + $q.= "AND Email LIKE " . $dbh->quote($E) . " "; + $search_vars[] = "E"; + } + if ($R) { + $R = "%" . addcslashes($R, '%_') . "%"; + $q.= "AND RealName LIKE " . $dbh->quote($R) . " "; + $search_vars[] = "R"; + } + if ($I) { + $I = "%" . addcslashes($I, '%_') . "%"; + $q.= "AND IRCNick LIKE " . $dbh->quote($I) . " "; + $search_vars[] = "I"; + } + if ($K) { + $K = "%" . addcslashes(str_replace(" ", "", $K), '%_') . "%"; + $q.= "AND PGPKey LIKE " . $dbh->quote($K) . " "; + $search_vars[] = "K"; + } + switch ($SB) { + case 't': + $q.= "ORDER BY AccountTypeID, Username "; + break; + case 'r': + $q.= "ORDER BY RealName, AccountTypeID "; + break; + case 'i': + $q.= "ORDER BY IRCNick, AccountTypeID "; + break; + default: + $q.= "ORDER BY Username, AccountTypeID "; + break; + } + $search_vars[] = "SB"; + $q.= "LIMIT " . $HITS_PER_PAGE . " OFFSET " . $OFFSET; + + $dbh = DB::connect(); + + $result = $dbh->query($q); + + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $userinfo[] = $row; + } + + include("account_search_results.php"); + return; +} + +/** + * Attempt to login and generate a session + * + * @return array Session ID for user, error message if applicable + */ +function try_login() { + $login_error = ""; + $new_sid = ""; + $userID = null; + + if (!isset($_REQUEST['user']) && !isset($_REQUEST['passwd'])) { + return array('SID' => '', 'error' => null); + } + + if (is_ipbanned()) { + $login_error = __('The login form is currently disabled ' . + 'for your IP address, probably due ' . + 'to sustained spam attacks. Sorry for the ' . + 'inconvenience.'); + return array('SID' => '', 'error' => $login_error); + } + + $dbh = DB::connect(); + $userID = valid_user($_REQUEST['user']); + + if (user_suspended($userID)) { + $login_error = __('Account suspended'); + return array('SID' => '', 'error' => $login_error); + } elseif (passwd_is_empty($userID)) { + $login_error = __('Your password has been reset. ' . + 'If you just created a new account, please ' . + 'use the link from the confirmation email ' . + 'to set an initial password. Otherwise, ' . + 'please request a reset key on the %s' . + 'Password Reset%s page.', '', + ''); + return array('SID' => '', 'error' => $login_error); + } elseif (!valid_passwd($userID, $_REQUEST['passwd'])) { + $login_error = __("Bad username or password."); + return array('SID' => '', 'error' => $login_error); + } + + $logged_in = 0; + $num_tries = 0; + + /* Generate a session ID and store it. */ + while (!$logged_in && $num_tries < 5) { + $session_limit = config_get_int('options', 'max_sessions_per_user'); + if ($session_limit) { + /* + * Delete all user sessions except the + * last ($session_limit - 1). + */ + $q = "DELETE s.* FROM Sessions s "; + $q.= "LEFT JOIN (SELECT SessionID FROM Sessions "; + $q.= "WHERE UsersId = " . $userID . " "; + $q.= "ORDER BY LastUpdateTS DESC "; + $q.= "LIMIT " . ($session_limit - 1) . ") q "; + $q.= "ON s.SessionID = q.SessionID "; + $q.= "WHERE s.UsersId = " . $userID . " "; + $q.= "AND q.SessionID IS NULL;"; + $dbh->query($q); + } + + $new_sid = new_sid(); + $q = "INSERT INTO Sessions (UsersID, SessionID, LastUpdateTS)" + ." VALUES (" . $userID . ", '" . $new_sid . "', UNIX_TIMESTAMP())"; + $result = $dbh->exec($q); + + /* Query will fail if $new_sid is not unique. */ + if ($result) { + $logged_in = 1; + break; + } + + $num_tries++; + } + + if (!$logged_in) { + $login_error = __('An error occurred trying to generate a user session.'); + return array('SID' => $new_sid, 'error' => $login_error); + } + + $q = "UPDATE Users SET LastLogin = UNIX_TIMESTAMP(), "; + $q.= "LastLoginIPAddress = " . $dbh->quote(ip2long($_SERVER['REMOTE_ADDR'])) . " "; + $q.= "WHERE ID = '$userID'"; + $dbh->exec($q); + + /* Set the SID cookie. */ + if (isset($_POST['remember_me']) && $_POST['remember_me'] == "on") { + /* Set cookies for 30 days. */ + $timeout = config_get_int('options', 'persistent_cookie_timeout'); + $cookie_time = time() + $timeout; + + /* Set session for 30 days. */ + $q = "UPDATE Sessions SET LastUpdateTS = $cookie_time "; + $q.= "WHERE SessionID = '$new_sid'"; + $dbh->exec($q); + } else { + $cookie_time = 0; + } + + setcookie("AURSID", $new_sid, $cookie_time, "/", null, !empty($_SERVER['HTTPS']), true); + + $referer = in_request('referer'); + if (strpos($referer, aur_location()) !== 0) { + $referer = '/'; + } + header("Location: " . get_uri($referer)); + $login_error = ""; +} + +/** + * Determine if the user is using a banned IP address + * + * @return bool True if IP address is banned, otherwise false + */ +function is_ipbanned() { + $dbh = DB::connect(); + + $q = "SELECT * FROM Bans WHERE IPAddress = " . $dbh->quote(ip2long($_SERVER['REMOTE_ADDR'])); + $result = $dbh->query($q); + + return ($result->fetchColumn() ? true : false); +} + +/** + * Validate a username against a collection of rules + * + * The username must be longer or equal to the configured minimum length. It + * must be shorter or equal to the configured maximum length. It must start and + * end with either a letter or a number. It can contain one period, hypen, or + * underscore. Returns boolean of whether name is valid. + * + * @param string $user Username to validate + * + * @return bool True if username meets criteria, otherwise false + */ +function valid_username($user) { + $length_min = config_get_int('options', 'username_min_len'); + $length_max = config_get_int('options', 'username_max_len'); + + if (strlen($user) < $length_min || strlen($user) > $length_max) { + return false; + } else if (!preg_match("/^[a-z0-9]+[.\-_]?[a-z0-9]+$/Di", $user)) { + return false; + } + + return true; +} + +/** + * Determine if a username exists in the database + * + * @param string $user Username to check in the database + * + * @return string|void Return user ID if in database, otherwise void + */ +function valid_user($user) { + if (!$user) { + return false; + } + + $dbh = DB::connect(); + + $q = "SELECT ID FROM Users WHERE "; + $q.= "Username = " . $dbh->quote($user); + $result = $dbh->query($q); + if (!$result) { + return null; + } + + $row = $result->fetch(PDO::FETCH_NUM); + return $row[0]; +} + +/** + * Determine if a user already has a proposal open about themselves + * + * @param string $user Username to checkout for open proposal + * + * @return bool True if there is an open proposal about the user, otherwise false + */ +function open_user_proposals($user) { + $dbh = DB::connect(); + $q = "SELECT * FROM TU_VoteInfo WHERE User = " . $dbh->quote($user) . " "; + $q.= "AND End > UNIX_TIMESTAMP()"; + $result = $dbh->query($q); + + return ($result->fetchColumn() ? true : false); +} + +/** + * Add a new Trusted User proposal to the database + * + * @param string $agenda The agenda of the vote + * @param string $user The use the vote is about + * @param int $votelength The length of time for the vote to last + * @param string $submitteruid The user ID of the individual who submitted the proposal + * + * @return void + */ +function add_tu_proposal($agenda, $user, $votelength, $quorum, $submitteruid) { + $dbh = DB::connect(); + + $q = "SELECT COUNT(*) FROM Users WHERE (AccountTypeID = 2 OR AccountTypeID = 4)"; + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_NUM); + $active_tus = $row[0]; + + $q = "INSERT INTO TU_VoteInfo (Agenda, User, Submitted, End, Quorum, "; + $q.= "SubmitterID, ActiveTUs) VALUES "; + $q.= "(" . $dbh->quote($agenda) . ", " . $dbh->quote($user) . ", "; + $q.= "UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + " . $dbh->quote($votelength); + $q.= ", " . $dbh->quote($quorum) . ", " . $submitteruid . ", "; + $q.= $active_tus . ")"; + $result = $dbh->exec($q); +} + +/** + * Add a reset key to the database for a specified user + * + * @param string $resetkey A password reset key to be stored in database + * @param string $uid The user ID to store the reset key for + * + * @return void + */ +function create_resetkey($resetkey, $uid) { + $dbh = DB::connect(); + $q = "UPDATE Users "; + $q.= "SET ResetKey = '" . $resetkey . "' "; + $q.= "WHERE ID = " . $uid; + $dbh->exec($q); +} + +/** + * Send a reset key to a specific e-mail address + * + * @param string $email E-mail address of the user resetting their password + * @param string $subject Subject of the email + * @param string $body Body of the email + * + * @return void + */ +function send_resetkey($email, $subject, $body) { + $uid = uid_from_email($email); + if ($uid == null) { + return; + } + + /* We (ab)use new_sid() to get a random 32 characters long string. */ + $resetkey = new_sid(); + create_resetkey($resetkey, $uid); + + /* Send e-mail with confirmation link. */ + $body = wordwrap($body, 70); + $body .= "\n\n". get_uri('/passreset/', true) . + "?resetkey={$resetkey}"; + $headers = "MIME-Version: 1.0\r\n" . + "Content-type: text/plain; charset=UTF-8\r\n" . + "Reply-to: noreply@aur.archlinux.org\r\n" . + "From: notify@aur.archlinux.org\r\n" . + "X-Mailer: PHP\r\n" . + "X-MimeOLE: Produced By AUR"; + @mail($email, $subject, $body, $headers); +} + +/** + * Change a user's password in the database if reset key and e-mail are correct + * + * @param string $hash New MD5 hash of a user's password + * @param string $salt New salt for the user's password + * @param string $resetkey Code e-mailed to a user to reset a password + * @param string $email E-mail address of the user resetting their password + * + * @return string|void Redirect page if successful, otherwise return error message + */ +function password_reset($hash, $salt, $resetkey, $email) { + $dbh = DB::connect(); + $q = "UPDATE Users "; + $q.= "SET Passwd = '$hash', "; + $q.= "Salt = '$salt', "; + $q.= "ResetKey = '' "; + $q.= "WHERE ResetKey != '' "; + $q.= "AND ResetKey = " . $dbh->quote($resetkey) . " "; + $q.= "AND Email = " . $dbh->quote($email); + $result = $dbh->exec($q); + + if (!$result) { + $error = __('Invalid e-mail and reset key combination.'); + return $error; + } else { + header('Location: ' . get_uri('/passreset/') . '?step=complete'); + exit(); + } +} + +/** + * Determine if the password is longer than the minimum length + * + * @param string $passwd The password to check + * + * @return bool True if longer than minimum length, otherwise false + */ +function good_passwd($passwd) { + $length_min = config_get_int('options', 'passwd_min_len'); + return (strlen($passwd) >= $length_min); +} + +/** + * Determine if the password is correct and salt it if it hasn't been already + * + * @param string $userID The user ID to check the password against + * @param string $passwd The password the visitor sent + * + * @return bool True if password was correct and properly salted, otherwise false + */ +function valid_passwd($userID, $passwd) { + $dbh = DB::connect(); + if ($passwd == "") { + return false; + } + + /* Get salt for this user. */ + $salt = get_salt($userID); + if ($salt) { + $q = "SELECT ID FROM Users "; + $q.= "WHERE ID = " . $userID . " "; + $q.= "AND Passwd = " . $dbh->quote(salted_hash($passwd, $salt)); + $result = $dbh->query($q); + if (!$result) { + return false; + } + + $row = $result->fetch(PDO::FETCH_NUM); + return ($row[0] > 0); + } else { + /* Check password without using salt. */ + $q = "SELECT ID FROM Users "; + $q.= "WHERE ID = " . $userID . " "; + $q.= "AND Passwd = " . $dbh->quote(md5($passwd)); + $result = $dbh->query($q); + if (!$result) { + return false; + } + + $row = $result->fetch(PDO::FETCH_NUM); + if (!$row[0]) { + return false; + } + + /* Password correct, but salt it first! */ + if (!save_salt($userID, $passwd)) { + trigger_error("Unable to salt user's password;" . + " ID " . $userID, E_USER_WARNING); + return false; + } + + return true; + } +} + +/** + * Determine if a user's password is empty + * + * @param string $uid The user ID to check for an empty password + * + * @return bool True if the user's password is empty, otherwise false + */ +function passwd_is_empty($uid) { + $dbh = DB::connect(); + + $q = "SELECT * FROM Users WHERE ID = " . $dbh->quote($uid) . " "; + $q .= "AND Passwd = " . $dbh->quote(''); + $result = $dbh->query($q); + + if ($result->fetchColumn()) { + return true; + } else { + return false; + } +} + +/** + * Determine if the PGP key fingerprint is valid (must be 40 hexadecimal digits) + * + * @param string $fingerprint PGP fingerprint to check if valid + * + * @return bool True if the fingerprint is 40 hexadecimal digits, otherwise false + */ +function valid_pgp_fingerprint($fingerprint) { + $fingerprint = str_replace(" ", "", $fingerprint); + return (strlen($fingerprint) == 40 && ctype_xdigit($fingerprint)); +} + +/** + * Determine if the SSH public key is valid + * + * @param string $pubkey SSH public key to check + * + * @return bool True if the SSH public key is valid, otherwise false + */ +function valid_ssh_pubkey($pubkey) { + $valid_prefixes = array( + "ssh-rsa", "ssh-dss", "ecdsa-sha2-nistp256", + "ecdsa-sha2-nistp384", "ecdsa-sha2-nistp521", "ssh-ed25519" + ); + + $has_valid_prefix = false; + foreach ($valid_prefixes as $prefix) { + if (strpos($pubkey, $prefix . " ") === 0) { + $has_valid_prefix = true; + break; + } + } + if (!$has_valid_prefix) { + return false; + } + + $tokens = explode(" ", $pubkey); + if (empty($tokens[1])) { + return false; + } + + return (base64_encode(base64_decode($tokens[1], true)) == $tokens[1]); +} + +/** + * Determine if the user account has been suspended + * + * @param string $id The ID of user to check if suspended + * + * @return bool True if the user is suspended, otherwise false + */ +function user_suspended($id) { + $dbh = DB::connect(); + if (!$id) { + return false; + } + $q = "SELECT Suspended FROM Users WHERE ID = " . $id; + $result = $dbh->query($q); + if ($result) { + $row = $result->fetch(PDO::FETCH_NUM); + if ($row[0]) { + return true; + } + } + return false; +} + +/** + * Delete a specified user account from the database + * + * @param int $id The user ID of the account to be deleted + * + * @return void + */ +function user_delete($id) { + $dbh = DB::connect(); + $id = intval($id); + + /* + * These are normally already taken care of by propagation constraints + * but it is better to be explicit here. + */ + $fields_delete = array( + array("Sessions", "UsersID"), + array("PackageVotes", "UsersID"), + array("CommentNotify", "UsersID") + ); + + $fields_set_null = array( + array("PackageBases", "SubmitterUID"), + array("PackageBases", "MaintainerUID"), + array("PackageBases", "SubmitterUID"), + array("PackageComments", "UsersID"), + array("PackageComments", "DelUsersID"), + array("PackageRequests", "UsersID"), + array("TU_VoteInfo", "SubmitterID"), + array("TU_Votes", "UserID") + ); + + foreach($fields_delete as list($table, $field)) { + $q = "DELETE FROM " . $table . " "; + $q.= "WHERE " . $field . " = " . $id; + $dbh->query($q); + } + + foreach($fields_set_null as list($table, $field)) { + $q = "UPDATE " . $table . " SET " . $field . " = NULL "; + $q.= "WHERE " . $field . " = " . $id; + $dbh->query($q); + } + + $q = "DELETE FROM Users WHERE ID = " . $id; + $dbh->query($q); + return; +} + +/** + * Remove the session from the database on logout + * + * @param string $sid User's session ID + * + * @return void + */ +function delete_session_id($sid) { + $dbh = DB::connect(); + + $q = "DELETE FROM Sessions WHERE SessionID = " . $dbh->quote($sid); + $dbh->query($q); +} + +/** + * Remove all sessions belonging to a particular user + * + * @param int $uid ID of user to remove all sessions for + * + * @return void + */ +function delete_user_sessions($uid) { + $dbh = DB::connect(); + + $q = "DELETE FROM Sessions WHERE UsersID = " . intval($uid); + $dbh->exec($q); +} + +/** + * Remove sessions from the database that have exceed the timeout + * + * @return void + */ +function clear_expired_sessions() { + $dbh = DB::connect(); + + $timeout = config_get_int('options', 'login_timeout'); + $q = "DELETE FROM Sessions WHERE LastUpdateTS < (UNIX_TIMESTAMP() - " . $timeout . ")"; + $dbh->query($q); + + return; +} + +/** + * Get account details for a specific user + * + * @param string $uid The User ID of account to get information for + * @param string $username The username of the account to get for + * + * @return array Account details for the specified user + */ +function account_details($uid, $username) { + $dbh = DB::connect(); + $q = "SELECT Users.*, AccountTypes.AccountType "; + $q.= "FROM Users, AccountTypes "; + $q.= "WHERE AccountTypes.ID = Users.AccountTypeID "; + if (!empty($uid)) { + $q.= "AND Users.ID = ".intval($uid); + } else { + $q.= "AND Users.Username = " . $dbh->quote($username); + } + $result = $dbh->query($q); + + if ($result) { + $row = $result->fetch(PDO::FETCH_ASSOC); + } + + return $row; +} + +/** + * Determine if a user has already voted on a specific proposal + * + * @param string $voteid The ID of the Trusted User proposal + * @param string $uid The ID to check if the user already voted + * + * @return bool True if the user has already voted, otherwise false + */ +function tu_voted($voteid, $uid) { + $dbh = DB::connect(); + + $q = "SELECT COUNT(*) FROM TU_Votes "; + $q.= "WHERE VoteID = " . intval($voteid) . " AND UserID = " . intval($uid); + $result = $dbh->query($q); + if ($result->fetchColumn() > 0) { + return true; + } + else { + return false; + } +} + +/** + * Get all current Trusted User proposals from the database + * + * @param string $order Ascending or descending order for the proposal listing + * + * @return array The details for all current Trusted User proposals + */ +function current_proposal_list($order) { + $dbh = DB::connect(); + + $q = "SELECT * FROM TU_VoteInfo WHERE End > " . time() . " ORDER BY Submitted " . $order; + $result = $dbh->query($q); + + $details = array(); + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $details[] = $row; + } + + return $details; +} + +/** + * Get a subset of all past Trusted User proposals from the database + * + * @param string $order Ascending or descending order for the proposal listing + * @param string $lim The number of proposals to list with the offset + * + * @return array The details for the subset of past Trusted User proposals + */ +function past_proposal_list($order, $lim) { + $dbh = DB::connect(); + + $q = "SELECT * FROM TU_VoteInfo WHERE End < " . time() . " ORDER BY Submitted " . $order . $lim; + $result = $dbh->query($q); + + $details = array(); + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $details[] = $row; + } + + return $details; +} + +/** + * Get the vote ID of the last vote of all Trusted Users + * + * @return array The vote ID of the last vote of each Trusted User + */ +function last_votes_list() { + $dbh = DB::connect(); + + $q = "SELECT UserID, MAX(VoteID) AS LastVote FROM TU_Votes, "; + $q .= "TU_VoteInfo, Users WHERE TU_VoteInfo.ID = TU_Votes.VoteID AND "; + $q .= "TU_VoteInfo.End < UNIX_TIMESTAMP() AND "; + $q .= "Users.ID = TU_Votes.UserID AND (Users.AccountTypeID = 2 OR Users.AccountTypeID = 4) "; + $q .= "GROUP BY UserID ORDER BY LastVote DESC, UserName ASC"; + $result = $dbh->query($q); + + $details = array(); + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $details[] = $row; + } + + return $details; +} + +/** + * Determine the total number of Trusted User proposals + * + * @return string The total number of Trusted User proposals + */ +function proposal_count() { + $dbh = DB::connect(); + $q = "SELECT COUNT(*) FROM TU_VoteInfo"; + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_NUM); + + return $row[0]; +} + +/** + * Get all details related to a specific vote from the database + * + * @param string $voteid The ID of the Trusted User proposal + * + * @return array All stored details for a specific vote + */ +function vote_details($voteid) { + $dbh = DB::connect(); + + $q = "SELECT * FROM TU_VoteInfo "; + $q.= "WHERE ID = " . intval($voteid); + + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_ASSOC); + + return $row; +} + +/** + * Get an alphabetical list of users who voted for a proposal with HTML links + * + * @param string $voteid The ID of the Trusted User proposal + * + * @return array All users who voted for a specific proposal + */ +function voter_list($voteid) { + $dbh = DB::connect(); + + $whovoted = array(); + + $q = "SELECT tv.UserID,U.Username "; + $q.= "FROM TU_Votes tv, Users U "; + $q.= "WHERE tv.VoteID = " . intval($voteid); + $q.= " AND tv.UserID = U.ID "; + $q.= "ORDER BY Username"; + + $result = $dbh->query($q); + if ($result) { + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $whovoted[] = $row['Username']; + } + } + return $whovoted; +} + +/** + * Cast a vote for a specific user proposal + * + * @param string $voteid The ID of the proposal being voted on + * @param string $uid The user ID of the individual voting + * @param string $vote Vote position, either "Yes", "No", or "Abstain" + * @param int $newtotal The total number of votes after the user has voted + * + * @return void + */ +function cast_proposal_vote($voteid, $uid, $vote, $newtotal) { + $dbh = DB::connect(); + + $q = "UPDATE TU_VoteInfo SET " . $vote . " = (" . $newtotal . ") WHERE ID = " . $voteid; + $result = $dbh->exec($q); + + $q = "INSERT INTO TU_Votes (VoteID, UserID) VALUES (" . intval($voteid) . ", " . intval($uid) . ")"; + $result = $dbh->exec($q); +} + +/** + * Verify a user has the proper permissions to edit an account + * + * @param array $acctinfo User account information for edited account + * + * @return bool True if permission to edit the account, otherwise false + */ +function can_edit_account($acctinfo) { + if ($acctinfo['AccountType'] == 'Developer' || + $acctinfo['AccountType'] == 'Trusted User & Developer') { + return has_credential(CRED_ACCOUNT_EDIT_DEV); + } + + $uid = $acctinfo['ID']; + return has_credential(CRED_ACCOUNT_EDIT, array($uid)); +} + +/* + * Compute the fingerprint of an SSH key. + * + * @param string $ssh_key The SSH public key to retrieve the fingerprint for + * + * @return string The SSH key fingerprint + */ +function ssh_key_fingerprint($ssh_key) { + $tmpfile = tempnam(sys_get_temp_dir(), "aurweb"); + file_put_contents($tmpfile, $ssh_key); + + /* + * The -l option of ssh-keygen can be used to show the fingerprint of + * the specified public key file. Expected output format: + * + * 2048 SHA256:uBBTXmCNjI2CnLfkuz9sG8F+e9/T4C+qQQwLZWIODBY user@host (RSA) + * + * ... where 2048 is the key length, the second token is the actual + * fingerprint, followed by the key comment and the key type. + */ + + $cmd = "/usr/bin/ssh-keygen -l -f " . escapeshellarg($tmpfile); + exec($cmd, $out, $ret); + if ($ret !== 0 || count($out) !== 1) { + return false; + } + + unlink($tmpfile); + + $tokens = explode(' ', $out[0]); + if (count($tokens) != 4) { + return false; + } + + $tokens = explode(':', $tokens[1]); + if (count($tokens) != 2 || $tokens[0] != 'SHA256') { + return false; + } + + return $tokens[1]; +} + +/* + * Get the SSH public keys associated with an account. + * + * @param int $uid The user ID of the account to retrieve the keys for. + * + * @return array An array representing the keys + */ +function account_get_ssh_keys($uid) { + $dbh = DB::connect(); + $q = "SELECT PubKey FROM SSHPubKeys WHERE UserID = " . intval($uid); + $result = $dbh->query($q); + + if ($result) { + return $result->fetchAll(PDO::FETCH_COLUMN, 0); + } else { + return array(); + } +} + +/* + * Set the SSH public keys associated with an account. + * + * @param int $uid The user ID of the account to assign the keys to. + * @param array $ssh_keys The SSH public keys. + * @param array $ssh_fingerprints The corresponding SSH key fingerprints. + * + * @return bool Boolean flag indicating success or failure. + */ +function account_set_ssh_keys($uid, $ssh_keys, $ssh_fingerprints) { + $dbh = DB::connect(); + + $q = sprintf("DELETE FROM SSHPubKeys WHERE UserID = %d", $uid); + $dbh->exec($q); + + $ssh_fingerprint = reset($ssh_fingerprints); + foreach ($ssh_keys as $ssh_key) { + $q = sprintf( + "INSERT INTO SSHPubKeys (UserID, Fingerprint, PubKey) " . + "VALUES (%d, %s, %s)", $uid, + $dbh->quote($ssh_fingerprint), $dbh->quote($ssh_key) + ); + $dbh->exec($q); + $ssh_fingerprint = next($ssh_fingerprints); + } + + return true; +} diff --git a/web/lib/aur.inc.php b/web/lib/aur.inc.php new file mode 100644 index 00000000..7a455c6e --- /dev/null +++ b/web/lib/aur.inc.php @@ -0,0 +1,681 @@ +quote($_COOKIE["AURSID"]); + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_NUM); + + if (!$row[0]) { + # Invalid SessionID - hacker alert! + # + $failed = 1; + } else { + $last_update = $row[0]; + if ($last_update + $timeout <= $row[1]) { + $failed = 2; + } + } + + if ($failed == 1) { + # clear out the hacker's cookie, and send them to a naughty page + # why do you have to be so harsh on these people!? + # + setcookie("AURSID", "", 1, "/", null, !empty($_SERVER['HTTPS']), true); + unset($_COOKIE['AURSID']); + } elseif ($failed == 2) { + # session id timeout was reached and they must login again. + # + delete_session_id($_COOKIE["AURSID"]); + + setcookie("AURSID", "", 1, "/", null, !empty($_SERVER['HTTPS']), true); + unset($_COOKIE['AURSID']); + } else { + # still logged in and haven't reached the timeout, go ahead + # and update the idle timestamp + + # Only update the timestamp if it is less than the + # current time plus $timeout. + # + # This keeps 'remembered' sessions from being + # overwritten. + if ($last_update < time() + $timeout) { + $q = "UPDATE Sessions SET LastUpdateTS = UNIX_TIMESTAMP() "; + $q.= "WHERE SessionID = " . $dbh->quote($_COOKIE["AURSID"]); + $dbh->exec($q); + } + } + } + return; +} + +/** + * Verify the supplied CSRF token matches expected token + * + * @return bool True if the CSRF token is the same as the cookie SID, otherwise false + */ +function check_token() { + if (isset($_POST['token']) && isset($_COOKIE['AURSID'])) { + return ($_POST['token'] == $_COOKIE['AURSID']); + } else { + return false; + } +} + +/** + * Verify a user supplied e-mail against RFC 3696 and DNS records + * + * @param string $addy E-mail address being validated in foo@example.com format + * + * @return bool True if e-mail passes validity checks, otherwise false + */ +function valid_email($addy) { + // check against RFC 3696 + if (filter_var($addy, FILTER_VALIDATE_EMAIL) === false) { + return false; + } + + // check dns for mx, a, aaaa records + list($local, $domain) = explode('@', $addy); + if (!(checkdnsrr($domain, 'MX') || checkdnsrr($domain, 'A') || checkdnsrr($domain, 'AAAA'))) { + return false; + } + + return true; +} + +/** + * Generate a unique session ID + * + * @return string MD5 hash of the concatenated user IP, random number, and current time + */ +function new_sid() { + return md5($_SERVER['REMOTE_ADDR'] . uniqid(mt_rand(), true)); +} + +/** + * Determine the user's username in the database using a user ID + * + * @param string $id User's ID + * + * @return string Username if it exists, otherwise null + */ +function username_from_id($id) { + $id = intval($id); + + $dbh = DB::connect(); + $q = "SELECT Username FROM Users WHERE ID = " . $dbh->quote($id); + $result = $dbh->query($q); + if (!$result) { + return null; + } + + $row = $result->fetch(PDO::FETCH_NUM); + return $row[0]; +} + +/** + * Determine the user's username in the database using a session ID + * + * @param string $sid User's session ID + * + * @return string Username of the visitor + */ +function username_from_sid($sid="") { + if (!$sid) { + return ""; + } + $dbh = DB::connect(); + $q = "SELECT Username "; + $q.= "FROM Users, Sessions "; + $q.= "WHERE Users.ID = Sessions.UsersID "; + $q.= "AND Sessions.SessionID = " . $dbh->quote($sid); + $result = $dbh->query($q); + if (!$result) { + return ""; + } + $row = $result->fetch(PDO::FETCH_NUM); + + return $row[0]; +} + +/** + * Format a user name for inclusion in HTML data + * + * @param string $username The user name to format + * + * @return string The generated HTML code for the account link + */ +function html_format_username($username) { + $username_fmt = $username ? htmlspecialchars($username, ENT_QUOTES) : __("None"); + + if ($username && isset($_COOKIE["AURSID"])) { + $link = '' . $username_fmt . ''; + return $link; + } else { + return $username_fmt; + } +} + +/** + * Format the maintainer and co-maintainers for inclusion in HTML data + * + * @param string $maintainer The user name of the maintainer + * @param array $comaintainers The list of co-maintainer user names + * + * @return string The generated HTML code for the account links + */ +function html_format_maintainers($maintainer, $comaintainers) { + $code = html_format_username($maintainer); + + if (count($comaintainers) > 0) { + $code .= ' ('; + foreach ($comaintainers as $comaintainer) { + $code .= html_format_username($comaintainer); + if ($comaintainer !== end($comaintainers)) { + $code .= ', '; + } + } + $code .= ')'; + } + + return $code; +} + +/** + * Format a link in the package actions box + * + * @param string $uri The link target + * @param string $desc The link label + * + * @return string The generated HTML code for the action link + */ +function html_action_link($uri, $desc) { + if (isset($_COOKIE["AURSID"])) { + $code = ''; + } else { + $code = ''; + } + $code .= htmlspecialchars($desc) . ''; + + return $code; +} + +/** + * Format a form in the package actions box + * + * @param string $uri The link target + * @param string $action The action name (passed as HTTP POST parameter) + * @param string $desc The link label + * + * @return string The generated HTML code for the action link + */ +function html_action_form($uri, $action, $desc) { + if (isset($_COOKIE["AURSID"])) { + $code = '
    '; + $code .= ''; + $code .= '
    '; + } else { + $code = ''; + $code .= htmlspecialchars($desc) . ''; + } + + return $code; +} + +/** + * Determine the user's e-mail address in the database using a session ID + * + * @param string $sid User's session ID + * + * @return string User's e-mail address as given during registration + */ +function email_from_sid($sid="") { + if (!$sid) { + return ""; + } + $dbh = DB::connect(); + $q = "SELECT Email "; + $q.= "FROM Users, Sessions "; + $q.= "WHERE Users.ID = Sessions.UsersID "; + $q.= "AND Sessions.SessionID = " . $dbh->quote($sid); + $result = $dbh->query($q); + if (!$result) { + return ""; + } + $row = $result->fetch(PDO::FETCH_NUM); + + return $row[0]; +} + +/** + * Determine the user's account type in the database using a session ID + * + * @param string $sid User's session ID + * + * @return string Account type of user ("User", "Trusted User", or "Developer") + */ +function account_from_sid($sid="") { + if (!$sid) { + return ""; + } + $dbh = DB::connect(); + $q = "SELECT AccountType "; + $q.= "FROM Users, AccountTypes, Sessions "; + $q.= "WHERE Users.ID = Sessions.UsersID "; + $q.= "AND AccountTypes.ID = Users.AccountTypeID "; + $q.= "AND Sessions.SessionID = " . $dbh->quote($sid); + $result = $dbh->query($q); + if (!$result) { + return ""; + } + $row = $result->fetch(PDO::FETCH_NUM); + + return $row[0]; +} + +/** + * Determine the user's ID in the database using a session ID + * + * @param string $sid User's session ID + * + * @return string|int The user's name, 0 on query failure + */ +function uid_from_sid($sid="") { + if (!$sid) { + return ""; + } + $dbh = DB::connect(); + $q = "SELECT Users.ID "; + $q.= "FROM Users, Sessions "; + $q.= "WHERE Users.ID = Sessions.UsersID "; + $q.= "AND Sessions.SessionID = " . $dbh->quote($sid); + $result = $dbh->query($q); + if (!$result) { + return 0; + } + $row = $result->fetch(PDO::FETCH_NUM); + + return $row[0]; +} + +/** + * Common AUR header displayed on all pages + * + * @global string $LANG Language selected by the visitor + * @global array $SUPPORTED_LANGS Languages that are supported by the AUR + * @param string $title Name of the AUR page to be displayed on browser + * + * @return void + */ +function html_header($title="", $details=array()) { + global $LANG; + global $SUPPORTED_LANGS; + + include('header.php'); + return; +} + +/** + * Common AUR footer displayed on all pages + * + * @param string $ver The AUR version + * + * @return void + */ +function html_footer($ver="") { + include('footer.php'); + return; +} + +/** + * Determine if a user has permission to submit a package + * + * @param string $name Name of the package to be submitted + * @param string $sid User's session ID + * + * @return int 0 if the user can't submit, 1 if the user can submit + */ +function can_submit_pkgbase($name="", $sid="") { + if (!$name || !$sid) {return 0;} + $dbh = DB::connect(); + $q = "SELECT MaintainerUID "; + $q.= "FROM PackageBases WHERE Name = " . $dbh->quote($name); + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_NUM); + + if (!$row[0]) { + return 1; + } + $my_uid = uid_from_sid($sid); + + if ($row[0] === NULL || $row[0] == $my_uid) { + return 1; + } + + return 0; +} + +/** + * Determine if a package can be overwritten by some package base + * + * @param string $name Name of the package to be submitted + * @param int $base_id The ID of the package base + * + * @return bool True if the package can be overwritten, false if not + */ +function can_submit_pkg($name, $base_id) { + $dbh = DB::connect(); + $q = "SELECT COUNT(*) FROM Packages WHERE "; + $q.= "Name = " . $dbh->quote($name) . " AND "; + $q.= "PackageBaseID <> " . intval($base_id); + $result = $dbh->query($q); + + if (!$result) return false; + return ($result->fetchColumn() == 0); +} + +/** + * Recursively delete a directory + * + * @param string $dirname Name of the directory to be removed + * + * @return void + */ +function rm_tree($dirname) { + if (empty($dirname) || !is_dir($dirname)) return; + + foreach (scandir($dirname) as $item) { + if ($item != '.' && $item != '..') { + $path = $dirname . '/' . $item; + if (is_file($path) || is_link($path)) { + unlink($path); + } + else { + rm_tree($path); + } + } + } + + rmdir($dirname); + + return; +} + + /** + * Determine the user's ID in the database using a username + * + * @param string $username The username of an account + * + * @return string Return user ID if exists for username, otherwise null + */ +function uid_from_username($username) { + $dbh = DB::connect(); + $q = "SELECT ID FROM Users WHERE Username = " . $dbh->quote($username); + $result = $dbh->query($q); + if (!$result) { + return null; + } + + $row = $result->fetch(PDO::FETCH_NUM); + return $row[0]; +} + +/** + * Determine the user's ID in the database using an e-mail address + * + * @param string $email An e-mail address in foo@example.com format + * + * @return string The user's ID + */ +function uid_from_email($email) { + $dbh = DB::connect(); + $q = "SELECT ID FROM Users WHERE Email = " . $dbh->quote($email); + $result = $dbh->query($q); + if (!$result) { + return null; + } + + $row = $result->fetch(PDO::FETCH_NUM); + return $row[0]; +} + +/** + * Generate clean url with edited/added user values + * + * Makes a clean string of variables for use in URLs based on current $_GET and + * list of values to edit/add to that. Any empty variables are discarded. + * + * @example print "http://example.com/test.php?" . mkurl("foo=bar&bar=baz") + * + * @param string $append string of variables and values formatted as in URLs + * + * @return string clean string of variables to append to URL, urlencoded + */ +function mkurl($append) { + $get = $_GET; + $append = explode('&', $append); + $uservars = array(); + $out = ''; + + foreach ($append as $i) { + $ex = explode('=', $i); + $uservars[$ex[0]] = $ex[1]; + } + + foreach ($uservars as $k => $v) { $get[$k] = $v; } + + foreach ($get as $k => $v) { + if ($v !== '') { + $out .= '&' . urlencode($k) . '=' . urlencode($v); + } + } + + return substr($out, 5); +} + +/** + * Determine a user's salt from the database + * + * @param string $user_id The user ID of the user trying to log in + * + * @return string|void Return the salt for the requested user, otherwise void + */ +function get_salt($user_id) { + $dbh = DB::connect(); + $q = "SELECT Salt FROM Users WHERE ID = " . $user_id; + $result = $dbh->query($q); + if ($result) { + $row = $result->fetch(PDO::FETCH_NUM); + return $row[0]; + } + return; +} + +/** + * Save a user's salted password in the database + * + * @param string $user_id The user ID of the user who is salting their password + * @param string $passwd The password of the user logging in + */ +function save_salt($user_id, $passwd) { + $dbh = DB::connect(); + $salt = generate_salt(); + $hash = salted_hash($passwd, $salt); + $q = "UPDATE Users SET Salt = " . $dbh->quote($salt) . ", "; + $q.= "Passwd = " . $dbh->quote($hash) . " WHERE ID = " . $user_id; + return $dbh->exec($q); +} + +/** + * Generate a string to be used for salting passwords + * + * @return string MD5 hash of concatenated random number and current time + */ +function generate_salt() { + return md5(uniqid(mt_rand(), true)); +} + +/** + * Combine salt and password to form a hash + * + * @param string $passwd User plaintext password + * @param string $salt MD5 hash to be used as user salt + * + * @return string The MD5 hash of the concatenated salt and user password + */ +function salted_hash($passwd, $salt) { + if (strlen($salt) != 32) { + trigger_error('Salt does not look like an md5 hash', E_USER_WARNING); + } + return md5($salt . $passwd); +} + +/** + * Process submitted comments so any links can be followed + * + * @param string $comment Raw user submitted package comment + * + * @return string User comment with links printed in HTML + */ +function parse_comment($comment) { + $url_pattern = '/(\b(?:https?|ftp):\/\/[\w\/\#~:.?+=&%@!\-;,]+?' . + '(?=[.:?\-;,]*(?:[^\w\/\#~:.?+=&%@!\-;,]|$)))/iS'; + + $matches = preg_split($url_pattern, $comment, -1, + PREG_SPLIT_DELIM_CAPTURE); + + $html = ''; + for ($i = 0; $i < count($matches); $i++) { + if ($i % 2) { + # convert links + $html .= '' . htmlspecialchars($matches[$i]) . ''; + } + else { + # convert everything else + $html .= nl2br(htmlspecialchars($matches[$i])); + } + } + + return $html; +} + +/** + * Wrapper for beginning a database transaction + */ +function begin_atomic_commit() { + $dbh = DB::connect(); + $dbh->beginTransaction(); +} + +/** + * Wrapper for committing a database transaction + */ +function end_atomic_commit() { + $dbh = DB::connect(); + $dbh->commit(); +} + +/** + * Merge pkgbase and package options + * + * Merges entries of the first and the second array. If any key appears in both + * arrays and the corresponding value in the second array is either a non-array + * type or a non-empty array, the value from the second array replaces the + * value from the first array. If the value from the second array is an array + * containing a single empty string, the value in the resulting array becomes + * an empty array instead. If the value in the second array is empty, the + * resulting array contains the value from the first array. + * + * @param array $pkgbase_info Options from the pkgbase section + * @param array $section_info Options from the package section + * + * @return array Merged information from both sections + */ +function array_pkgbuild_merge($pkgbase_info, $section_info) { + $pi = $pkgbase_info; + foreach ($section_info as $opt_key => $opt_val) { + if (is_array($opt_val)) { + if ($opt_val == array('')) { + $pi[$opt_key] = array(); + } elseif (count($opt_val) > 0) { + $pi[$opt_key] = $opt_val; + } + } else { + $pi[$opt_key] = $opt_val; + } + } + return $pi; +} + +/** + * Bound an integer value between two values + * + * @param int $n Integer value to bound + * @param int $min Lower bound + * @param int $max Upper bound + * + * @return int Bounded integer value + */ +function bound($n, $min, $max) { + return min(max($n, $min), $max); +} + +/** + * Return the URL of the AUR root + * + * @return string The URL of the AUR root + */ +function aur_location() { + $location = config_get('options', 'aur_location'); + if (substr($location, -1) != '/') { + $location .= '/'; + } + return $location; +} diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php new file mode 100644 index 00000000..7b77da46 --- /dev/null +++ b/web/lib/aurjson.class.php @@ -0,0 +1,452 @@ +version = intval($http_data['v']); + } + if ($this->version < 1 || $this->version > 4) { + return $this->json_error('Invalid version specified.'); + } + + if (!isset($http_data['type']) || !isset($http_data['arg'])) { + return $this->json_error('No request type/data specified.'); + } + if (!in_array($http_data['type'], self::$exposed_methods)) { + return $this->json_error('Incorrect request type specified.'); + } + + $this->dbh = DB::connect(); + + $type = str_replace('-', '_', $http_data['type']); + $json = call_user_func(array(&$this, $type), $http_data['arg']); + + $etag = md5($json); + header("Etag: \"$etag\""); + /* + * Make sure to strip a few things off the + * if-none-match header. Stripping whitespace may not + * be required, but removing the quote on the incoming + * header is required to make the equality test. + */ + $if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? + trim($_SERVER['HTTP_IF_NONE_MATCH'], "\t\n\r\" ") : false; + if ($if_none_match && $if_none_match == $etag) { + header('HTTP/1.1 304 Not Modified'); + return; + } + + if (isset($http_data['callback'])) { + header('content-type: text/javascript'); + return $http_data['callback'] . "({$json})"; + } else { + header('content-type: application/json'); + return $json; + } + } + + /* + * Returns a JSON formatted error string. + * + * @param $msg The error string to return + * + * @return mixed A json formatted error response. + */ + private function json_error($msg) { + header('content-type: application/json'); + if ($this->version < 3) { + return $this->json_results('error', 0, $msg, NULL); + } elseif ($this->version >= 3) { + return $this->json_results('error', 0, array(), $msg); + } + } + + /* + * Returns a JSON formatted result data. + * + * @param $type The response method type. + * @param $data The result data to return + * @param $error An error message to include in the response + * + * @return mixed A json formatted result response. + */ + private function json_results($type, $count, $data, $error) { + $json_array = array( + 'version' => $this->version, + 'type' => $type, + 'resultcount' => $count, + 'results' => $data + ); + + if ($error) { + $json_array['error'] = $error; + } + + return json_encode($json_array); + } + + private function get_extended_fields($pkgid) { + $query = "SELECT DependencyTypes.Name AS Type, " . + "PackageDepends.DepName AS Name, " . + "PackageDepends.DepCondition AS Cond " . + "FROM PackageDepends " . + "LEFT JOIN DependencyTypes " . + "ON DependencyTypes.ID = PackageDepends.DepTypeID " . + "WHERE PackageDepends.PackageID = " . $pkgid . " " . + "UNION SELECT RelationTypes.Name AS Type, " . + "PackageRelations.RelName AS Name, " . + "PackageRelations.RelCondition AS Cond " . + "FROM PackageRelations " . + "LEFT JOIN RelationTypes " . + "ON RelationTypes.ID = PackageRelations.RelTypeID " . + "WHERE PackageRelations.PackageID = " . $pkgid . " " . + "UNION SELECT 'groups' AS Type, Groups.Name, '' AS Cond " . + "FROM Groups INNER JOIN PackageGroups " . + "ON PackageGroups.PackageID = " . $pkgid . " " . + "AND PackageGroups.GroupID = Groups.ID " . + "UNION SELECT 'license' AS Type, Licenses.Name, '' AS Cond " . + "FROM Licenses INNER JOIN PackageLicenses " . + "ON PackageLicenses.PackageID = " . $pkgid . " " . + "AND PackageLicenses.LicenseID = Licenses.ID"; + $result = $this->dbh->query($query); + + if (!$result) { + return null; + } + + $type_map = array( + 'depends' => 'Depends', + 'makedepends' => 'MakeDepends', + 'checkdepends' => 'CheckDepends', + 'optdepends' => 'OptDepends', + 'conflicts' => 'Conflicts', + 'provides' => 'Provides', + 'replaces' => 'Replaces', + 'groups' => 'Groups', + 'license' => 'License', + ); + $data = array(); + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $type = $type_map[$row['Type']]; + $data[$type][] = $row['Name'] . $row['Cond']; + } + + return $data; + } + + private function process_query($type, $where_condition) { + $max_results = config_get_int('options', 'max_rpc_results'); + $package_url = config_get('options', 'package_url'); + + if ($this->version == 1) { + $fields = implode(',', self::$fields_v1); + $query = "SELECT {$fields} " . + "FROM Packages LEFT JOIN PackageBases " . + "ON PackageBases.ID = Packages.PackageBaseID " . + "LEFT JOIN Users " . + "ON PackageBases.MaintainerUID = Users.ID " . + "LEFT JOIN PackageLicenses " . + "ON PackageLicenses.PackageID = Packages.ID " . + "LEFT JOIN Licenses " . + "ON Licenses.ID = PackageLicenses.LicenseID " . + "WHERE ${where_condition} " . + "AND PackageBases.PackagerUID IS NOT NULL " . + "GROUP BY Packages.ID " . + "LIMIT $max_results"; + } elseif ($this->version >= 2) { + if ($this->version == 2 || $this->version == 3) { + $fields = implode(',', self::$fields_v2); + } else if ($this->version == 4) { + $fields = implode(',', self::$fields_v4); + } + $query = "SELECT {$fields} " . + "FROM Packages LEFT JOIN PackageBases " . + "ON PackageBases.ID = Packages.PackageBaseID " . + "LEFT JOIN Users " . + "ON PackageBases.MaintainerUID = Users.ID " . + "WHERE ${where_condition} " . + "AND PackageBases.PackagerUID IS NOT NULL " . + "LIMIT $max_results"; + } + $result = $this->dbh->query($query); + + if ($result) { + $resultcount = 0; + $search_data = array(); + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $resultcount++; + $row['URLPath'] = sprintf(config_get('options', 'snapshot_uri'), urlencode($row['PackageBase'])); + if ($this->version < 4) { + $row['CategoryID'] = 1; + } + + /* + * Unfortunately, mysql_fetch_assoc() returns + * all fields as strings. We need to coerce + * numeric values into integers to provide + * proper data types in the JSON response. + */ + foreach (self::$numeric_fields as $field) { + $row[$field] = intval($row[$field]); + } + + if ($this->version >= 2 && ($type == 'info' || $type == 'multiinfo')) { + $row = array_merge($row, $this->get_extended_fields($row['ID'])); + } + + if ($this->version < 3) { + if ($type == 'info') { + $search_data = $row; + break; + } else { + array_push($search_data, $row); + } + } elseif ($this->version >= 3) { + array_push($search_data, $row); + } + } + + if ($resultcount === $max_results) { + return $this->json_error('Too many package results.'); + } + + return $this->json_results($type, $resultcount, $search_data, NULL); + } else { + return $this->json_results($type, 0, array(), NULL); + } + } + + /* + * Parse the args to the multiinfo function. We may have a string or an + * array, so do the appropriate thing. Within the elements, both * package + * IDs and package names are valid; sort them into the relevant arrays and + * escape/quote the names. + * + * @param $args the arg string or array to parse. + * + * @return mixed An array containing 'ids' and 'names'. + */ + private function parse_multiinfo_args($args) { + if (!is_array($args)) { + $args = array($args); + } + + $id_args = array(); + $name_args = array(); + foreach ($args as $arg) { + if (!$arg) { + continue; + } + if (is_numeric($arg)) { + $id_args[] = intval($arg); + } else { + $name_args[] = $this->dbh->quote($arg); + } + } + + return array('ids' => $id_args, 'names' => $name_args); + } + + /* + * Performs a fulltext mysql search of the package database. + * + * @param $keyword_string A string of keywords to search with. + * + * @return mixed Returns an array of package matches. + */ + private function search($keyword_string) { + if (strlen($keyword_string) < 2) { + return $this->json_error('Query arg too small'); + } + + $keyword_string = $this->dbh->quote("%" . addcslashes($keyword_string, '%_') . "%"); + + $where_condition = "(Packages.Name LIKE $keyword_string OR "; + $where_condition .= "Description LIKE $keyword_string)"; + + return $this->process_query('search', $where_condition); + } + + /* + * Returns the info on a specific package. + * + * @param $pqdata The ID or name of the package. Package Query Data. + * + * @return mixed Returns an array of value data containing the package data + */ + private function info($pqdata) { + if (is_numeric($pqdata)) { + $where_condition = "Packages.ID = $pqdata"; + } else { + $where_condition = "Packages.Name = " . $this->dbh->quote($pqdata); + } + + return $this->process_query('info', $where_condition); + } + + /* + * Returns the info on multiple packages. + * + * @param $pqdata A comma-separated list of IDs or names of the packages. + * + * @return mixed Returns an array of results containing the package data + */ + private function multiinfo($pqdata) { + $args = $this->parse_multiinfo_args($pqdata); + $ids = $args['ids']; + $names = $args['names']; + + if (!$ids && !$names) { + return $this->json_error('Invalid query arguments'); + } + + $where_condition = ""; + if ($ids) { + $ids_value = implode(',', $args['ids']); + $where_condition .= "Packages.ID IN ($ids_value) "; + } + if ($ids && $names) { + $where_condition .= "OR "; + } + if ($names) { + /* + * Individual names were quoted in + * parse_multiinfo_args(). + */ + $names_value = implode(',', $args['names']); + $where_condition .= "Packages.Name IN ($names_value) "; + } + + return $this->process_query('multiinfo', $where_condition); + } + + /* + * Returns all the packages for a specific maintainer. + * + * @param $maintainer The name of the maintainer. + * + * @return mixed Returns an array of value data containing the package data + */ + private function msearch($maintainer) { + $maintainer = $this->dbh->quote($maintainer); + + $where_condition = "Users.Username = $maintainer "; + + return $this->process_query('msearch', $where_condition); + } + + /* + * Get all package names that start with $search. + * + * @param string $search Search string. + * + * @return string The JSON formatted response data. + */ + private function suggest($search) { + $query = "SELECT Packages.Name FROM Packages "; + $query.= "LEFT JOIN PackageBases "; + $query.= "ON PackageBases.ID = Packages.PackageBaseID "; + $query.= "WHERE Packages.Name LIKE "; + $query.= $this->dbh->quote(addcslashes($search, '%_') . '%'); + $query.= " AND PackageBases.PackagerUID IS NOT NULL "; + $query.= "ORDER BY Name ASC LIMIT 20"; + + $result = $this->dbh->query($query); + $result_array = array(); + + if ($result) { + $result_array = $result->fetchAll(PDO::FETCH_COLUMN, 0); + } + + return json_encode($result_array); + } + + /* + * Get all package base names that start with $search. + * + * @param string $search Search string. + * + * @return string The JSON formatted response data. + */ + private function suggest_pkgbase($search) { + $query = "SELECT Name FROM PackageBases WHERE Name LIKE "; + $query.= $this->dbh->quote(addcslashes($search, '%_') . '%'); + $query.= " AND PackageBases.PackagerUID IS NOT NULL "; + $query.= "ORDER BY Name ASC LIMIT 20"; + + $result = $this->dbh->query($query); + $result_array = array(); + + if ($result) { + $result_array = $result->fetchAll(PDO::FETCH_COLUMN, 0); + } + + return json_encode($result_array); + } +} + diff --git a/web/lib/cachefuncs.inc.php b/web/lib/cachefuncs.inc.php new file mode 100644 index 00000000..d558be44 --- /dev/null +++ b/web/lib/cachefuncs.inc.php @@ -0,0 +1,83 @@ +addServer($mcserver[0], intval($mcserver[1])); + } +} + +# Set a value in the cache (currently APC) if cache is available for use. If +# not available, this becomes effectively a no-op (return value is +# false). Accepts an optional TTL (defaults to 600 seconds). +function set_cache_value($key, $value, $ttl=600) { + $status = false; + if (defined('EXTENSION_LOADED_APC')) { + $status = apc_store(CACHE_PREFIX.$key, $value, $ttl); + } + if (defined('EXTENSION_LOADED_MEMCACHE')) { + global $memcache; + $status = $memcache->set(CACHE_PREFIX.$key, $value, $ttl); + } + return $status; +} + +# Get a value from the cache (currently APC) if cache is available for use. If +# not available, this returns false (optionally sets passed in variable $status +# to false, much like apc_fetch() behaves). This allows for testing the fetch +# result appropriately even in the event that a 'false' value was the value in +# the cache. +function get_cache_value($key, &$status=false) { + if(defined('EXTENSION_LOADED_APC')) { + $ret = apc_fetch(CACHE_PREFIX.$key, $status); + if ($status) { + return $ret; + } + } + if (defined('EXTENSION_LOADED_MEMCACHE')) { + global $memcache; + $ret = $memcache->get(CACHE_PREFIX.$key); + if (!$ret) { + $status = false; + } + else { + $status = true; + } + return $ret; + } + return $status; +} + +# Run a simple db query, retrieving and/or caching the value if APC is +# available for use. Accepts an optional TTL value (defaults to 600 seconds). +function db_cache_value($dbq, $key, $ttl=600) { + $dbh = DB::connect(); + $status = false; + $value = get_cache_value($key, $status); + if (!$status) { + $result = $dbh->query($dbq); + $row = $result->fetch(PDO::FETCH_NUM); + $value = $row[0]; + set_cache_value($key, $value, $ttl); + } + return $value; +} + +?> diff --git a/web/lib/confparser.inc.php b/web/lib/confparser.inc.php new file mode 100644 index 00000000..6368b869 --- /dev/null +++ b/web/lib/confparser.inc.php @@ -0,0 +1,39 @@ +useCached(); // use cached version if age<1 hour +$rss->title = "PHP news"; +$rss->description = "daily news from the PHP scripting world"; + +//optional +$rss->descriptionTruncSize = 500; +$rss->descriptionHtmlSyndicated = true; + +$rss->link = "http://www.dailyphp.net/news"; +$rss->syndicationURL = "http://www.dailyphp.net/".$_SERVER["PHP_SELF"]; + +$image = new FeedImage(); +$image->title = "dailyphp.net logo"; +$image->url = "http://www.dailyphp.net/images/logo.gif"; +$image->link = "http://www.dailyphp.net"; +$image->description = "Feed provided by dailyphp.net. Click to visit."; + +//optional +$image->descriptionTruncSize = 500; +$image->descriptionHtmlSyndicated = true; + +$rss->image = $image; + +// get your news items from somewhere, e.g. your database: +mysql_select_db($dbHost, $dbUser, $dbPass); +$res = mysql_query("SELECT * FROM news ORDER BY newsdate DESC"); +while ($data = mysql_fetch_object($res)) { + $item = new FeedItem(); + $item->title = $data->title; + $item->link = $data->url; + $item->description = $data->short; + + //optional + item->descriptionTruncSize = 500; + item->descriptionHtmlSyndicated = true; + + $item->date = $data->newsdate; + $item->source = "http://www.dailyphp.net"; + $item->author = "John Doe"; + + $rss->addItem($item); +} + +// valid format strings are: RSS0.91, RSS1.0, RSS2.0, PIE0.1 (deprecated), +// MBOX, OPML, ATOM, ATOM0.3, HTML, JS +echo $rss->saveFeed("RSS1.0", "news/feed.xml"); + + +*************************************************************************** +* A little setup * +**************************************************************************/ + +// your local timezone, set to "" to disable or for GMT +define("TIME_ZONE","+01:00"); + + + + +/** + * Version string. + **/ +define("FEEDCREATOR_VERSION", "FeedCreator 1.7.2"); + + + +/** + * A FeedItem is a part of a FeedCreator feed. + * + * @author Kai Blankenhorn + * @since 1.3 + */ +class FeedItem extends HtmlDescribable { + /** + * Mandatory attributes of an item. + */ + var $title, $description, $link; + + /** + * Optional attributes of an item. + */ + var $author, $authorEmail, $image, $category, $comments, $guid, $source, $creator; + + /** + * Publishing date of an item. May be in one of the following formats: + * + * RFC 822: + * "Mon, 20 Jan 03 18:05:41 +0400" + * "20 Jan 03 18:05:41 +0000" + * + * ISO 8601: + * "2003-01-20T18:05:41+04:00" + * + * Unix: + * 1043082341 + */ + var $date; + + /** + * Any additional elements to include as an assiciated array. All $key => $value pairs + * will be included unencoded in the feed item in the form + * <$key>$value + * Again: No encoding will be used! This means you can invalidate or enhance the feed + * if $value contains markup. This may be abused to embed tags not implemented by + * the FeedCreator class used. + */ + var $additionalElements = Array(); + + // on hold + // var $source; +} + + + +/** + * An FeedImage may be added to a FeedCreator feed. + * @author Kai Blankenhorn + * @since 1.3 + */ +class FeedImage extends HtmlDescribable { + /** + * Mandatory attributes of an image. + */ + var $title, $url, $link; + + /** + * Optional attributes of an image. + */ + var $width, $height, $description; +} + + + +/** + * An HtmlDescribable is an item within a feed that can have a description that may + * include HTML markup. + */ +class HtmlDescribable { + /** + * Indicates whether the description field should be rendered in HTML. + */ + var $descriptionHtmlSyndicated; + + /** + * Indicates whether and to how many characters a description should be truncated. + */ + var $descriptionTruncSize; + + /** + * Returns a formatted description field, depending on descriptionHtmlSyndicated and + * $descriptionTruncSize properties + * @return string the formatted description + */ + function getDescription() { + $descriptionField = new FeedHtmlField($this->description); + $descriptionField->syndicateHtml = $this->descriptionHtmlSyndicated; + $descriptionField->truncSize = $this->descriptionTruncSize; + return $descriptionField->output(); + } + +} + + +/** + * An FeedHtmlField describes and generates + * a feed, item or image html field (probably a description). Output is + * generated based on $truncSize, $syndicateHtml properties. + * @author Pascal Van Hecke + * @version 1.6 + */ +class FeedHtmlField { + /** + * Mandatory attributes of a FeedHtmlField. + */ + var $rawFieldContent; + + /** + * Optional attributes of a FeedHtmlField. + * + */ + var $truncSize, $syndicateHtml; + + /** + * Creates a new instance of FeedHtmlField. + * @param $string: if given, sets the rawFieldContent property + */ + function FeedHtmlField($parFieldContent) { + if ($parFieldContent) { + $this->rawFieldContent = $parFieldContent; + } + } + + + /** + * Creates the right output, depending on $truncSize, $syndicateHtml properties. + * @return string the formatted field + */ + function output() { + // when field available and syndicated in html we assume + // - valid html in $rawFieldContent and we enclose in CDATA tags + // - no truncation (truncating risks producing invalid html) + if (!$this->rawFieldContent) { + $result = ""; + } elseif ($this->syndicateHtml) { + $result = "rawFieldContent."]]>"; + } else { + if ($this->truncSize and is_int($this->truncSize)) { + $result = FeedCreator::iTrunc(htmlspecialchars($this->rawFieldContent),$this->truncSize); + } else { + $result = htmlspecialchars($this->rawFieldContent); + } + } + return $result; + } + +} + + + +/** + * UniversalFeedCreator lets you choose during runtime which + * format to build. + * For general usage of a feed class, see the FeedCreator class + * below or the example above. + * + * @since 1.3 + * @author Kai Blankenhorn + */ +class UniversalFeedCreator extends FeedCreator { + var $_feed; + + function _setFormat($format) { + switch (strtoupper($format)) { + + case "2.0": + // fall through + case "RSS2.0": + $this->_feed = new RSSCreator20(); + break; + + case "1.0": + // fall through + case "RSS1.0": + $this->_feed = new RSSCreator10(); + break; + + case "0.91": + // fall through + case "RSS0.91": + $this->_feed = new RSSCreator091(); + break; + + case "PIE0.1": + $this->_feed = new PIECreator01(); + break; + + case "MBOX": + $this->_feed = new MBOXCreator(); + break; + + case "OPML": + $this->_feed = new OPMLCreator(); + break; + + case "ATOM": + // fall through: always the latest ATOM version + + case "ATOM0.3": + $this->_feed = new AtomCreator03(); + break; + + case "HTML": + $this->_feed = new HTMLCreator(); + break; + + case "JS": + // fall through + case "JAVASCRIPT": + $this->_feed = new JSCreator(); + break; + + default: + $this->_feed = new RSSCreator091(); + break; + } + + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + // prevent overwriting of properties "contentType", "encoding"; do not copy "_feed" itself + if (!in_array($key, array("_feed", "contentType", "encoding"))) { + $this->_feed->{$key} = $this->{$key}; + } + } + } + + /** + * Creates a syndication feed based on the items previously added. + * + * @see FeedCreator::addItem() + * @param string format format the feed should comply to. Valid values are: + * "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3", "HTML", "JS" + * @return string the contents of the feed. + */ + function createFeed($format = "RSS0.91") { + $this->_setFormat($format); + return $this->_feed->createFeed(); + } + + + + /** + * Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect + * header may be sent to redirect the use to the newly created file. + * @since 1.4 + * + * @param string format format the feed should comply to. Valid values are: + * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM", "ATOM0.3", "HTML", "JS" + * @param string filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()). + * @param boolean displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response. + */ + function saveFeed($format="RSS0.91", $filename="", $displayContents=true) { + $this->_setFormat($format); + $this->_feed->saveFeed($filename, $displayContents); + } + + + /** + * Turns on caching and checks if there is a recent version of this feed in the cache. + * If there is, an HTTP redirect header is sent. + * To effectively use caching, you should create the FeedCreator object and call this method + * before anything else, especially before you do the time consuming task to build the feed + * (web fetching, for example). + * + * @param string format format the feed should comply to. Valid values are: + * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3". + * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()). + * @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour) + */ + function useCached($format="RSS0.91", $filename="", $timeout=3600) { + $this->_setFormat($format); + $this->_feed->useCached($filename, $timeout); + } + +} + + +/** + * FeedCreator is the abstract base implementation for concrete + * implementations that implement a specific format of syndication. + * + * @abstract + * @author Kai Blankenhorn + * @since 1.4 + */ +class FeedCreator extends HtmlDescribable { + + /** + * Mandatory attributes of a feed. + */ + var $title, $description, $link; + + + /** + * Optional attributes of a feed. + */ + var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays; + + /** + * The url of the external xsl stylesheet used to format the naked rss feed. + * Ignored in the output when empty. + */ + var $xslStyleSheet = ""; + + + /** + * @access private + */ + var $items = Array(); + + + /** + * This feed's MIME content type. + * @since 1.4 + * @access private + */ + var $contentType = "application/xml"; + + + /** + * This feed's character encoding. + * @since 1.6.1 + **/ + var $encoding = "ISO-8859-1"; + + + /** + * Any additional elements to include as an assiciated array. All $key => $value pairs + * will be included unencoded in the feed in the form + * <$key>$value + * Again: No encoding will be used! This means you can invalidate or enhance the feed + * if $value contains markup. This may be abused to embed tags not implemented by + * the FeedCreator class used. + */ + var $additionalElements = Array(); + + + /** + * Adds an FeedItem to the feed. + * + * @param object FeedItem $item The FeedItem to add to the feed. + * @access public + */ + function addItem($item) { + $this->items[] = $item; + } + + + /** + * Truncates a string to a certain length at the most sensible point. + * First, if there's a '.' character near the end of the string, the string is truncated after this character. + * If there is no '.', the string is truncated after the last ' ' character. + * If the string is truncated, " ..." is appended. + * If the string is already shorter than $length, it is returned unchanged. + * + * @static + * @param string string A string to be truncated. + * @param int length the maximum length the string should be truncated to + * @return string the truncated string + */ + function iTrunc($string, $length) { + if (strlen($string)<=$length) { + return $string; + } + + $pos = strrpos($string,"."); + if ($pos>=$length-4) { + $string = substr($string,0,$length-4); + $pos = strrpos($string,"."); + } + if ($pos>=$length*0.4) { + return substr($string,0,$pos+1)." ..."; + } + + $pos = strrpos($string," "); + if ($pos>=$length-4) { + $string = substr($string,0,$length-4); + $pos = strrpos($string," "); + } + if ($pos>=$length*0.4) { + return substr($string,0,$pos)." ..."; + } + + return substr($string,0,$length-4)." ..."; + + } + + + /** + * Creates a comment indicating the generator of this feed. + * The format of this comment seems to be recognized by + * Syndic8.com. + */ + function _createGeneratorComment() { + return "\n"; + } + + + /** + * Creates a string containing all additional elements specified in + * $additionalElements. + * @param elements array an associative array containing key => value pairs + * @param indentString string a string that will be inserted before every generated line + * @return string the XML tags corresponding to $additionalElements + */ + function _createAdditionalElements($elements, $indentString="") { + $ae = ""; + if (is_array($elements)) { + foreach($elements AS $key => $value) { + $ae.= $indentString."<$key>$value\n"; + } + } + return $ae; + } + + function _createStylesheetReferences() { + $xml = ""; + if ($this->cssStyleSheet) $xml .= "cssStyleSheet."\" type=\"text/css\"?>\n"; + if ($this->xslStyleSheet) $xml .= "xslStyleSheet."\" type=\"text/xsl\"?>\n"; + return $xml; + } + + + /** + * Builds the feed's text. + * @abstract + * @return string the feed's complete text + */ + function createFeed() { + } + + /** + * Generate a filename for the feed cache file. The result will be $_SERVER["PHP_SELF"] with the extension changed to .xml. + * For example: + * + * echo $_SERVER["PHP_SELF"]."\n"; + * echo FeedCreator::_generateFilename(); + * + * would produce: + * + * /rss/latestnews.php + * latestnews.xml + * + * @return string the feed cache filename + * @since 1.4 + * @access private + */ + function _generateFilename() { + $fileInfo = pathinfo($_SERVER["PHP_SELF"]); + return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml"; + } + + + /** + * @since 1.4 + * @access private + */ + function _redirect($filename) { + // attention, heavily-commented-out-area + + // maybe use this in addition to file time checking + //Header("Expires: ".date("r",time()+$this->_timeout)); + + /* no caching at all, doesn't seem to work as good: + Header("Cache-Control: no-cache"); + Header("Pragma: no-cache"); + */ + + // HTTP redirect, some feed readers' simple HTTP implementations don't follow it + //Header("Location: ".$filename); + + Header("Content-Type: ".$this->contentType."; charset=".$this->encoding."; filename=".basename($filename)); + Header("Content-Disposition: inline; filename=".basename($filename)); + readfile($filename, "r"); + die(); + } + + /** + * Turns on caching and checks if there is a recent version of this feed in the cache. + * If there is, an HTTP redirect header is sent. + * To effectively use caching, you should create the FeedCreator object and call this method + * before anything else, especially before you do the time consuming task to build the feed + * (web fetching, for example). + * @since 1.4 + * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()). + * @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour) + */ + function useCached($filename="", $timeout=3600) { + $this->_timeout = $timeout; + if ($filename=="") { + $filename = $this->_generateFilename(); + } + if (file_exists($filename) AND (time()-filemtime($filename) < $timeout)) { + $this->_redirect($filename); + } + } + + + /** + * Saves this feed as a file on the local disk. After the file is saved, a redirect + * header may be sent to redirect the user to the newly created file. + * @since 1.4 + * + * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()). + * @param redirect boolean optional send an HTTP redirect header or not. If true, the user will be automatically redirected to the created file. + */ + function saveFeed($filename="", $displayContents=true) { + if ($filename=="") { + $filename = $this->_generateFilename(); + } + $feedFile = fopen($filename, "w+"); + if ($feedFile) { + fputs($feedFile,$this->createFeed()); + fclose($feedFile); + if ($displayContents) { + $this->_redirect($filename); + } + } else { + echo "
    Error creating feed file, please check write permissions.
    "; + } + } + +} + + +/** + * FeedDate is an internal class that stores a date for a feed or feed item. + * Usually, you won't need to use this. + */ +class FeedDate { + var $unix; + + /** + * Creates a new instance of FeedDate representing a given date. + * Accepts RFC 822, ISO 8601 date formats as well as unix time stamps. + * @param mixed $dateString optional the date this FeedDate will represent. If not specified, the current date and time is used. + */ + function FeedDate($dateString="") { + if ($dateString=="") $dateString = date("r"); + + if (is_integer($dateString)) { + $this->unix = $dateString; + return; + } + if (preg_match("~(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s+)?(\\d{1,2})\\s+([a-zA-Z]{3})\\s+(\\d{4})\\s+(\\d{2}):(\\d{2}):(\\d{2})\\s+(.*)~",$dateString,$matches)) { + $months = Array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12); + $this->unix = mktime($matches[4],$matches[5],$matches[6],$months[$matches[2]],$matches[1],$matches[3]); + if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') { + $tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60; + } else { + if (strlen($matches[7])==1) { + $oneHour = 3600; + $ord = ord($matches[7]); + if ($ord < ord("M")) { + $tzOffset = (ord("A") - $ord - 1) * $oneHour; + } elseif ($ord >= ord("M") AND $matches[7]!="Z") { + $tzOffset = ($ord - ord("M")) * $oneHour; + } elseif ($matches[7]=="Z") { + $tzOffset = 0; + } + } + switch ($matches[7]) { + case "UT": + case "GMT": $tzOffset = 0; + } + } + $this->unix += $tzOffset; + return; + } + if (preg_match("~(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(.*)~",$dateString,$matches)) { + $this->unix = mktime($matches[4],$matches[5],$matches[6],$matches[2],$matches[3],$matches[1]); + if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') { + $tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60; + } else { + if ($matches[7]=="Z") { + $tzOffset = 0; + } + } + $this->unix += $tzOffset; + return; + } + $this->unix = 0; + } + + /** + * Gets the date stored in this FeedDate as an RFC 822 date. + * + * @return a date in RFC 822 format + */ + function rfc822() { + //return gmdate("r",$this->unix); + $date = gmdate("D, d M Y H:i:s", $this->unix); + if (TIME_ZONE!="") $date .= " ".str_replace(":","",TIME_ZONE); + return $date; + } + + /** + * Gets the date stored in this FeedDate as an ISO 8601 date. + * + * @return a date in ISO 8601 format + */ + function iso8601() { + $date = gmdate("Y-m-d\TH:i:sO",$this->unix); + $date = substr($date,0,22) . ':' . substr($date,-2); + if (TIME_ZONE!="") $date = str_replace("+00:00",TIME_ZONE,$date); + return $date; + } + + /** + * Gets the date stored in this FeedDate as unix time stamp. + * + * @return a date as a unix time stamp + */ + function unix() { + return $this->unix; + } +} + + +/** + * RSSCreator10 is a FeedCreator that implements RDF Site Summary (RSS) 1.0. + * + * @see http://www.purl.org/rss/1.0/ + * @since 1.3 + * @author Kai Blankenhorn + */ +class RSSCreator10 extends FeedCreator { + + /** + * Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0. + * The feed will contain all items previously added in the same order. + * @return string the feed's complete text + */ + function createFeed() { + $feed = "encoding."\"?>\n"; + $feed.= $this->_createGeneratorComment(); + if ($this->cssStyleSheet=="") { + $cssStyleSheet = "http://www.w3.org/2000/08/w3c-synd/style.css"; + } + $feed.= $this->_createStylesheetReferences(); + $feed.= "\n"; + $feed.= " syndicationURL."\">\n"; + $feed.= " ".htmlspecialchars($this->title)."\n"; + $feed.= " ".htmlspecialchars($this->description)."\n"; + $feed.= " ".$this->link."\n"; + if ($this->image!=null) { + $feed.= " image->url."\" />\n"; + } + $now = new FeedDate(); + $feed.= " ".htmlspecialchars($now->iso8601())."\n"; + $feed.= " \n"; + $feed.= " \n"; + for ($i=0;$iitems);$i++) { + $feed.= " items[$i]->link)."\"/>\n"; + } + $feed.= " \n"; + $feed.= " \n"; + $feed.= " \n"; + if ($this->image!=null) { + $feed.= " image->url."\">\n"; + $feed.= " ".$this->image->title."\n"; + $feed.= " ".$this->image->link."\n"; + $feed.= " ".$this->image->url."\n"; + $feed.= " \n"; + } + $feed.= $this->_createAdditionalElements($this->additionalElements, " "); + + for ($i=0;$iitems);$i++) { + $feed.= " items[$i]->link)."\">\n"; + //$feed.= " Posting\n"; + $feed.= " text/html\n"; + if ($this->items[$i]->date!=null) { + $itemDate = new FeedDate($this->items[$i]->date); + $feed.= " ".htmlspecialchars($itemDate->iso8601())."\n"; + } + if ($this->items[$i]->source!="") { + $feed.= " ".htmlspecialchars($this->items[$i]->source)."\n"; + } + if ($this->items[$i]->author!="") { + $feed.= " ".htmlspecialchars($this->items[$i]->author)."\n"; + } + $feed.= " ".htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")))."\n"; + $feed.= " ".htmlspecialchars($this->items[$i]->link)."\n"; + $feed.= " ".htmlspecialchars($this->items[$i]->description)."\n"; + $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " "); + $feed.= " \n"; + } + $feed.= "\n"; + return $feed; + } +} + + + +/** + * RSSCreator091 is a FeedCreator that implements RSS 0.91 Spec, revision 3. + * + * @see http://my.netscape.com/publish/formats/rss-spec-0.91.html + * @since 1.3 + * @author Kai Blankenhorn + */ +class RSSCreator091 extends FeedCreator { + + /** + * Stores this RSS feed's version number. + * @access private + */ + var $RSSVersion; + + function RSSCreator091() { + $this->_setRSSVersion("0.91"); + $this->contentType = "application/rss+xml"; + } + + /** + * Sets this RSS feed's version number. + * @access private + */ + function _setRSSVersion($version) { + $this->RSSVersion = $version; + } + + /** + * Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0. + * The feed will contain all items previously added in the same order. + * @return string the feed's complete text + */ + function createFeed() { + $feed = "encoding."\"?>\n"; + $feed.= $this->_createGeneratorComment(); + $feed.= $this->_createStylesheetReferences(); + $feed.= "RSSVersion."\">\n"; + $feed.= " \n"; + $feed.= " ".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."\n"; + $this->descriptionTruncSize = 500; + $feed.= " ".$this->getDescription()."\n"; + $feed.= " ".$this->link."\n"; + $now = new FeedDate(); + $feed.= " ".htmlspecialchars($now->rfc822())."\n"; + $feed.= " ".FEEDCREATOR_VERSION."\n"; + + if ($this->image!=null) { + $feed.= " \n"; + $feed.= " ".$this->image->url."\n"; + $feed.= " ".FeedCreator::iTrunc(htmlspecialchars($this->image->title),100)."\n"; + $feed.= " ".$this->image->link."\n"; + if ($this->image->width!="") { + $feed.= " ".$this->image->width."\n"; + } + if ($this->image->height!="") { + $feed.= " ".$this->image->height."\n"; + } + if ($this->image->description!="") { + $feed.= " ".$this->image->getDescription()."\n"; + } + $feed.= " \n"; + } + if ($this->language!="") { + $feed.= " ".$this->language."\n"; + } + if ($this->copyright!="") { + $feed.= " ".FeedCreator::iTrunc(htmlspecialchars($this->copyright),100)."\n"; + } + if ($this->editor!="") { + $feed.= " ".FeedCreator::iTrunc(htmlspecialchars($this->editor),100)."\n"; + } + if ($this->webmaster!="") { + $feed.= " ".FeedCreator::iTrunc(htmlspecialchars($this->webmaster),100)."\n"; + } + if ($this->pubDate!="") { + $pubDate = new FeedDate($this->pubDate); + $feed.= " ".htmlspecialchars($pubDate->rfc822())."\n"; + } + if ($this->category!="") { + $feed.= " ".htmlspecialchars($this->category)."\n"; + } + if ($this->docs!="") { + $feed.= " ".FeedCreator::iTrunc(htmlspecialchars($this->docs),500)."\n"; + } + if ($this->ttl!="") { + $feed.= " ".htmlspecialchars($this->ttl)."\n"; + } + if ($this->rating!="") { + $feed.= " ".FeedCreator::iTrunc(htmlspecialchars($this->rating),500)."\n"; + } + if ($this->skipHours!="") { + $feed.= " ".htmlspecialchars($this->skipHours)."\n"; + } + if ($this->skipDays!="") { + $feed.= " ".htmlspecialchars($this->skipDays)."\n"; + } + $feed.= $this->_createAdditionalElements($this->additionalElements, " "); + + for ($i=0;$iitems);$i++) { + $feed.= " \n"; + $feed.= " ".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."\n"; + $feed.= " ".htmlspecialchars($this->items[$i]->link)."\n"; + $feed.= " ".$this->items[$i]->getDescription()."\n"; + + if ($this->items[$i]->author!="") { + $feed.= " ".htmlspecialchars($this->items[$i]->author)."\n"; + } + /* + // on hold + if ($this->items[$i]->source!="") { + $feed.= " ".htmlspecialchars($this->items[$i]->source)."\n"; + } + */ + if ($this->items[$i]->category!="") { + $feed.= " ".htmlspecialchars($this->items[$i]->category)."\n"; + } + if ($this->items[$i]->comments!="") { + $feed.= " ".htmlspecialchars($this->items[$i]->comments)."\n"; + } + if ($this->items[$i]->date!="") { + $itemDate = new FeedDate($this->items[$i]->date); + $feed.= " ".htmlspecialchars($itemDate->rfc822())."\n"; + } + if ($this->items[$i]->guid!="") { + $feed.= " ".htmlspecialchars($this->items[$i]->guid)."\n"; + } + $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " "); + $feed.= " \n"; + } + $feed.= " \n"; + $feed.= "\n"; + return $feed; + } +} + + + +/** + * RSSCreator20 is a FeedCreator that implements RDF Site Summary (RSS) 2.0. + * + * @see http://backend.userland.com/rss + * @since 1.3 + * @author Kai Blankenhorn + */ +class RSSCreator20 extends RSSCreator091 { + + function RSSCreator20() { + parent::_setRSSVersion("2.0"); + } + +} + + +/** + * PIECreator01 is a FeedCreator that implements the emerging PIE specification, + * as in http://intertwingly.net/wiki/pie/Syntax. + * + * @deprecated + * @since 1.3 + * @author Scott Reynen and Kai Blankenhorn + */ +class PIECreator01 extends FeedCreator { + + function PIECreator01() { + $this->encoding = "utf-8"; + } + + function createFeed() { + $feed = "encoding."\"?>\n"; + $feed.= $this->_createStylesheetReferences(); + $feed.= "\n"; + $feed.= " ".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."\n"; + $this->truncSize = 500; + $feed.= " ".$this->getDescription()."\n"; + $feed.= " ".$this->link."\n"; + for ($i=0;$iitems);$i++) { + $feed.= " \n"; + $feed.= " ".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."\n"; + $feed.= " ".htmlspecialchars($this->items[$i]->link)."\n"; + $itemDate = new FeedDate($this->items[$i]->date); + $feed.= " ".htmlspecialchars($itemDate->iso8601())."\n"; + $feed.= " ".htmlspecialchars($itemDate->iso8601())."\n"; + $feed.= " ".htmlspecialchars($itemDate->iso8601())."\n"; + $feed.= " ".htmlspecialchars($this->items[$i]->guid)."\n"; + if ($this->items[$i]->author!="") { + $feed.= " \n"; + $feed.= " ".htmlspecialchars($this->items[$i]->author)."\n"; + if ($this->items[$i]->authorEmail!="") { + $feed.= " ".$this->items[$i]->authorEmail."\n"; + } + $feed.=" \n"; + } + $feed.= " \n"; + $feed.= "
    ".$this->items[$i]->getDescription()."
    \n"; + $feed.= "
    \n"; + $feed.= "
    \n"; + } + $feed.= "
    \n"; + return $feed; + } +} + + +/** + * AtomCreator03 is a FeedCreator that implements the atom specification, + * as in http://www.intertwingly.net/wiki/pie/FrontPage. + * Please note that just by using AtomCreator03 you won't automatically + * produce valid atom files. For example, you have to specify either an editor + * for the feed or an author for every single feed item. + * + * Some elements have not been implemented yet. These are (incomplete list): + * author URL, item author's email and URL, item contents, alternate links, + * other link content types than text/html. Some of them may be created with + * AtomCreator03::additionalElements. + * + * @see FeedCreator#additionalElements + * @since 1.6 + * @author Kai Blankenhorn , Scott Reynen + */ +class AtomCreator03 extends FeedCreator { + + function AtomCreator03() { + $this->contentType = "application/atom+xml"; + $this->encoding = "utf-8"; + } + + function createFeed() { + $feed = "encoding."\"?>\n"; + $feed.= $this->_createGeneratorComment(); + $feed.= $this->_createStylesheetReferences(); + $feed.= "language!="") { + $feed.= " xml:lang=\"".$this->language."\""; + } + $feed.= ">\n"; + $feed.= " ".htmlspecialchars($this->title)."\n"; + $feed.= " ".htmlspecialchars($this->description)."\n"; + $feed.= " link)."\"/>\n"; + $feed.= " ".htmlspecialchars($this->link)."\n"; + $now = new FeedDate(); + $feed.= " ".htmlspecialchars($now->iso8601())."\n"; + if ($this->editor!="") { + $feed.= " \n"; + $feed.= " ".$this->editor."\n"; + if ($this->editorEmail!="") { + $feed.= " ".$this->editorEmail."\n"; + } + $feed.= " \n"; + } + $feed.= " ".FEEDCREATOR_VERSION."\n"; + $feed.= $this->_createAdditionalElements($this->additionalElements, " "); + for ($i=0;$iitems);$i++) { + $feed.= " \n"; + $feed.= " ".htmlspecialchars(strip_tags($this->items[$i]->title))."\n"; + $feed.= " items[$i]->link)."\"/>\n"; + if ($this->items[$i]->date=="") { + $this->items[$i]->date = time(); + } + $itemDate = new FeedDate($this->items[$i]->date); + $feed.= " ".htmlspecialchars($itemDate->iso8601())."\n"; + $feed.= " ".htmlspecialchars($itemDate->iso8601())."\n"; + $feed.= " ".htmlspecialchars($itemDate->iso8601())."\n"; + $feed.= " ".htmlspecialchars($this->items[$i]->link)."\n"; + $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " "); + if ($this->items[$i]->author!="") { + $feed.= " \n"; + $feed.= " ".htmlspecialchars($this->items[$i]->author)."\n"; + $feed.= " \n"; + } + if ($this->items[$i]->description!="") { + $feed.= " ".htmlspecialchars($this->items[$i]->description)."\n"; + } + $feed.= " \n"; + } + $feed.= "\n"; + return $feed; + } +} + + +/** + * MBOXCreator is a FeedCreator that implements the mbox format + * as described in http://www.qmail.org/man/man5/mbox.html + * + * @since 1.3 + * @author Kai Blankenhorn + */ +class MBOXCreator extends FeedCreator { + + function MBOXCreator() { + $this->contentType = "text/plain"; + $this->encoding = "ISO-8859-15"; + } + + function qp_enc($input = "", $line_max = 76) { + $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); + $lines = preg_split("/(?:\r\n|\r|\n)/", $input); + $eol = "\r\n"; + $escape = "="; + $output = ""; + while( list(, $line) = each($lines) ) { + //$line = rtrim($line); // remove trailing white space -> no =20\r\n necessary + $linlen = strlen($line); + $newline = ""; + for($i = 0; $i < $linlen; $i++) { + $c = substr($line, $i, 1); + $dec = ord($c); + if ( ($dec == 32) && ($i == ($linlen - 1)) ) { // convert space at eol only + $c = "=20"; + } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required + $h2 = floor($dec/16); $h1 = floor($dec%16); + $c = $escape.$hex["$h2"].$hex["$h1"]; + } + if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted + $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay + $newline = ""; + } + $newline .= $c; + } // end of for + $output .= $newline.$eol; + } + return trim($output); + } + + + /** + * Builds the MBOX contents. + * @return string the feed's complete text + */ + function createFeed() { + for ($i=0;$iitems);$i++) { + if ($this->items[$i]->author!="") { + $from = $this->items[$i]->author; + } else { + $from = $this->title; + } + $itemDate = new FeedDate($this->items[$i]->date); + $feed.= "From ".strtr(MBOXCreator::qp_enc($from)," ","_")." ".date("D M d H:i:s Y",$itemDate->unix())."\n"; + $feed.= "Content-Type: text/plain;\n"; + $feed.= " charset=\"".$this->encoding."\"\n"; + $feed.= "Content-Transfer-Encoding: quoted-printable\n"; + $feed.= "Content-Type: text/plain\n"; + $feed.= "From: \"".MBOXCreator::qp_enc($from)."\"\n"; + $feed.= "Date: ".$itemDate->rfc822()."\n"; + $feed.= "Subject: ".MBOXCreator::qp_enc(FeedCreator::iTrunc($this->items[$i]->title,100))."\n"; + $feed.= "\n"; + $body = chunk_split(MBOXCreator::qp_enc($this->items[$i]->description)); + $feed.= preg_replace("~\nFrom ([^\n]*)(\n?)~","\n>From $1$2\n",$body); + $feed.= "\n"; + $feed.= "\n"; + } + return $feed; + } + + /** + * Generate a filename for the feed cache file. Overridden from FeedCreator to prevent XML data types. + * @return string the feed cache filename + * @since 1.4 + * @access private + */ + function _generateFilename() { + $fileInfo = pathinfo($_SERVER["PHP_SELF"]); + return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".mbox"; + } +} + + +/** + * OPMLCreator is a FeedCreator that implements OPML 1.0. + * + * @see http://opml.scripting.com/spec + * @author Dirk Clemens, Kai Blankenhorn + * @since 1.5 + */ +class OPMLCreator extends FeedCreator { + + function OPMLCreator() { + $this->encoding = "utf-8"; + } + + function createFeed() { + $feed = "encoding."\"?>\n"; + $feed.= $this->_createGeneratorComment(); + $feed.= $this->_createStylesheetReferences(); + $feed.= "\n"; + $feed.= " \n"; + $feed.= " ".htmlspecialchars($this->title)."\n"; + if ($this->pubDate!="") { + $date = new FeedDate($this->pubDate); + $feed.= " ".$date->rfc822()."\n"; + } + if ($this->lastBuildDate!="") { + $date = new FeedDate($this->lastBuildDate); + $feed.= " ".$date->rfc822()."\n"; + } + if ($this->editor!="") { + $feed.= " ".$this->editor."\n"; + } + if ($this->editorEmail!="") { + $feed.= " ".$this->editorEmail."\n"; + } + $feed.= " \n"; + $feed.= " \n"; + for ($i=0;$iitems);$i++) { + $feed.= " items[$i]->title,"\n\r"," "))); + $feed.= " title=\"".$title."\""; + $feed.= " text=\"".$title."\""; + //$feed.= " description=\"".htmlspecialchars($this->items[$i]->description)."\""; + $feed.= " url=\"".htmlspecialchars($this->items[$i]->link)."\""; + $feed.= "/>\n"; + } + $feed.= " \n"; + $feed.= "\n"; + return $feed; + } +} + + + +/** + * HTMLCreator is a FeedCreator that writes an HTML feed file to a specific + * location, overriding the createFeed method of the parent FeedCreator. + * The HTML produced can be included over http by scripting languages, or serve + * as the source for an IFrame. + * All output by this class is embedded in
    tags to enable formatting + * using CSS. + * + * @author Pascal Van Hecke + * @since 1.7 + */ +class HTMLCreator extends FeedCreator { + + var $contentType = "text/html"; + + /** + * Contains HTML to be output at the start of the feed's html representation. + */ + var $header; + + /** + * Contains HTML to be output at the end of the feed's html representation. + */ + var $footer ; + + /** + * Contains HTML to be output between entries. A separator is only used in + * case of multiple entries. + */ + var $separator; + + /** + * Used to prefix the stylenames to make sure they are unique + * and do not clash with stylenames on the users' page. + */ + var $stylePrefix; + + /** + * Determines whether the links open in a new window or not. + */ + var $openInNewWindow = true; + + var $imageAlign ="right"; + + /** + * In case of very simple output you may want to get rid of the style tags, + * hence this variable. There's no equivalent on item level, but of course you can + * add strings to it while iterating over the items ($this->stylelessOutput .= ...) + * and when it is non-empty, ONLY the styleless output is printed, the rest is ignored + * in the function createFeed(). + */ + var $stylelessOutput =""; + + /** + * Writes the HTML. + * @return string the scripts's complete text + */ + function createFeed() { + // if there is styleless output, use the content of this variable and ignore the rest + if ($this->stylelessOutput!="") { + return $this->stylelessOutput; + } + + //if no stylePrefix is set, generate it yourself depending on the script name + if ($this->stylePrefix=="") { + $this->stylePrefix = str_replace(".", "_", $this->_generateFilename())."_"; + } + + //set an openInNewWindow_token_to be inserted or not + if ($this->openInNewWindow) { + $targetInsert = " target='_blank'"; + } + + // use this array to put the lines in and implode later with "document.write" javascript + $feedArray = array(); + if ($this->image!=null) { + $imageStr = "". + "".
+							FeedCreator::iTrunc(htmlspecialchars($this->image->title),100).
+							"image->width) { + $imageStr .=" width='".$this->image->width. "' "; + } + if ($this->image->height) { + $imageStr .=" height='".$this->image->height."' "; + } + $imageStr .="/>"; + $feedArray[] = $imageStr; + } + + if ($this->title) { + $feedArray[] = ""; + } + if ($this->getDescription()) { + $feedArray[] = "
    ". + str_replace("]]>", "", str_replace("getDescription())). + "
    "; + } + + if ($this->header) { + $feedArray[] = "
    ".$this->header."
    "; + } + + for ($i=0;$iitems);$i++) { + if ($this->separator and $i > 0) { + $feedArray[] = "
    ".$this->separator."
    "; + } + + if ($this->items[$i]->title) { + if ($this->items[$i]->link) { + $feedArray[] = + ""; + } else { + $feedArray[] = + "
    ". + FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100). + "
    "; + } + } + if ($this->items[$i]->getDescription()) { + $feedArray[] = + "
    ". + str_replace("]]>", "", str_replace("items[$i]->getDescription())). + "
    "; + } + } + if ($this->footer) { + $feedArray[] = "
    ".$this->footer."
    "; + } + + $feed= "".join($feedArray, "\r\n"); + return $feed; + } + + /** + * Overrrides parent to produce .html extensions + * + * @return string the feed cache filename + * @since 1.4 + * @access private + */ + function _generateFilename() { + $fileInfo = pathinfo($_SERVER["PHP_SELF"]); + return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".html"; + } +} + + +/** + * JSCreator is a class that writes a js file to a specific + * location, overriding the createFeed method of the parent HTMLCreator. + * + * @author Pascal Van Hecke + */ +class JSCreator extends HTMLCreator { + var $contentType = "text/javascript"; + + /** + * writes the javascript + * @return string the scripts's complete text + */ + function createFeed() + { + $feed = parent::createFeed(); + $feedArray = explode("\n",$feed); + + $jsFeed = ""; + foreach ($feedArray as $value) { + $jsFeed .= "document.write('".trim(addslashes($value))."');\n"; + } + return $jsFeed; + } + + /** + * Overrrides parent to produce .js extensions + * + * @return string the feed cache filename + * @since 1.4 + * @access private + */ + function _generateFilename() { + $fileInfo = pathinfo($_SERVER["PHP_SELF"]); + return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".js"; + } + +} + + + +/*** TEST SCRIPT ********************************************************* + +//include("feedcreator.class.php"); + +$rss = new UniversalFeedCreator(); +$rss->useCached(); +$rss->title = "PHP news"; +$rss->description = "daily news from the PHP scripting world"; + +//optional +//$rss->descriptionTruncSize = 500; +//$rss->descriptionHtmlSyndicated = true; +//$rss->xslStyleSheet = "http://feedster.com/rss20.xsl"; + +$rss->link = "http://www.dailyphp.net/news"; +$rss->feedURL = "http://www.dailyphp.net/".$PHP_SELF; + +$image = new FeedImage(); +$image->title = "dailyphp.net logo"; +$image->url = "http://www.dailyphp.net/images/logo.gif"; +$image->link = "http://www.dailyphp.net"; +$image->description = "Feed provided by dailyphp.net. Click to visit."; + +//optional +$image->descriptionTruncSize = 500; +$image->descriptionHtmlSyndicated = true; + +$rss->image = $image; + +// get your news items from somewhere, e.g. your database: +//mysql_select_db($dbHost, $dbUser, $dbPass); +//$res = mysql_query("SELECT * FROM news ORDER BY newsdate DESC"); +//while ($data = mysql_fetch_object($res)) { + $item = new FeedItem(); + $item->title = "This is an the test title of an item"; + $item->link = "http://localhost/item/"; + $item->description = "description in
    HTML"; + + //optional + //item->descriptionTruncSize = 500; + $item->descriptionHtmlSyndicated = true; + + $item->date = time(); + $item->source = "http://www.dailyphp.net"; + $item->author = "John Doe"; + + $rss->addItem($item); +//} + +// valid format strings are: RSS0.91, RSS1.0, RSS2.0, PIE0.1, MBOX, OPML, ATOM0.3, HTML, JS +echo $rss->saveFeed("RSS0.91", "feed.xml"); + + + +***************************************************************************/ + +?> diff --git a/web/lib/gettext.php b/web/lib/gettext.php new file mode 100644 index 00000000..4ccd75db --- /dev/null +++ b/web/lib/gettext.php @@ -0,0 +1,432 @@ +. + Copyright (c) 2005 Nico Kaiser + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +/** + * Provides a simple gettext replacement that works independently from + * the system's gettext abilities. + * It can read MO files and use them for translating strings. + * The files are passed to gettext_reader as a Stream (see streams.php) + * + * This version has the ability to cache all strings and translations to + * speed up the string lookup. + * While the cache is enabled by default, it can be switched off with the + * second parameter in the constructor (e.g. whenusing very large MO files + * that you don't want to keep in memory) + */ +class gettext_reader { + //public: + var $error = 0; // public variable that holds error code (0 if no error) + + //private: + var $BYTEORDER = 0; // 0: low endian, 1: big endian + var $STREAM = NULL; + var $short_circuit = false; + var $enable_cache = false; + var $originals = NULL; // offset of original table + var $translations = NULL; // offset of translation table + var $pluralheader = NULL; // cache header field for plural forms + var $total = 0; // total string count + var $table_originals = NULL; // table for original strings (offsets) + var $table_translations = NULL; // table for translated strings (offsets) + var $cache_translations = NULL; // original -> translation mapping + + + /* Methods */ + + + /** + * Reads a 32bit Integer from the Stream + * + * @access private + * @return Integer from the Stream + */ + function readint() { + if ($this->BYTEORDER == 0) { + // low endian + $input=unpack('V', $this->STREAM->read(4)); + return array_shift($input); + } else { + // big endian + $input=unpack('N', $this->STREAM->read(4)); + return array_shift($input); + } + } + + function read($bytes) { + return $this->STREAM->read($bytes); + } + + /** + * Reads an array of Integers from the Stream + * + * @param int count How many elements should be read + * @return Array of Integers + */ + function readintarray($count) { + if ($this->BYTEORDER == 0) { + // low endian + return unpack('V'.$count, $this->STREAM->read(4 * $count)); + } else { + // big endian + return unpack('N'.$count, $this->STREAM->read(4 * $count)); + } + } + + /** + * Constructor + * + * @param object Reader the StreamReader object + * @param boolean enable_cache Enable or disable caching of strings (default on) + */ + function gettext_reader($Reader, $enable_cache = true) { + // If there isn't a StreamReader, turn on short circuit mode. + if (! $Reader || isset($Reader->error) ) { + $this->short_circuit = true; + return; + } + + // Caching can be turned off + $this->enable_cache = $enable_cache; + + $MAGIC1 = "\x95\x04\x12\xde"; + $MAGIC2 = "\xde\x12\x04\x95"; + + $this->STREAM = $Reader; + $magic = $this->read(4); + if ($magic == $MAGIC1) { + $this->BYTEORDER = 1; + } elseif ($magic == $MAGIC2) { + $this->BYTEORDER = 0; + } else { + $this->error = 1; // not MO file + return false; + } + + // FIXME: Do we care about revision? We should. + $revision = $this->readint(); + + $this->total = $this->readint(); + $this->originals = $this->readint(); + $this->translations = $this->readint(); + } + + /** + * Loads the translation tables from the MO file into the cache + * If caching is enabled, also loads all strings into a cache + * to speed up translation lookups + * + * @access private + */ + function load_tables() { + if (is_array($this->cache_translations) && + is_array($this->table_originals) && + is_array($this->table_translations)) + return; + + /* get original and translations tables */ + if (!is_array($this->table_originals)) { + $this->STREAM->seekto($this->originals); + $this->table_originals = $this->readintarray($this->total * 2); + } + if (!is_array($this->table_translations)) { + $this->STREAM->seekto($this->translations); + $this->table_translations = $this->readintarray($this->total * 2); + } + + if ($this->enable_cache) { + $this->cache_translations = array (); + /* read all strings in the cache */ + for ($i = 0; $i < $this->total; $i++) { + $this->STREAM->seekto($this->table_originals[$i * 2 + 2]); + $original = $this->STREAM->read($this->table_originals[$i * 2 + 1]); + $this->STREAM->seekto($this->table_translations[$i * 2 + 2]); + $translation = $this->STREAM->read($this->table_translations[$i * 2 + 1]); + $this->cache_translations[$original] = $translation; + } + } + } + + /** + * Returns a string from the "originals" table + * + * @access private + * @param int num Offset number of original string + * @return string Requested string if found, otherwise '' + */ + function get_original_string($num) { + $length = $this->table_originals[$num * 2 + 1]; + $offset = $this->table_originals[$num * 2 + 2]; + if (! $length) + return ''; + $this->STREAM->seekto($offset); + $data = $this->STREAM->read($length); + return (string)$data; + } + + /** + * Returns a string from the "translations" table + * + * @access private + * @param int num Offset number of original string + * @return string Requested string if found, otherwise '' + */ + function get_translation_string($num) { + $length = $this->table_translations[$num * 2 + 1]; + $offset = $this->table_translations[$num * 2 + 2]; + if (! $length) + return ''; + $this->STREAM->seekto($offset); + $data = $this->STREAM->read($length); + return (string)$data; + } + + /** + * Binary search for string + * + * @access private + * @param string string + * @param int start (internally used in recursive function) + * @param int end (internally used in recursive function) + * @return int string number (offset in originals table) + */ + function find_string($string, $start = -1, $end = -1) { + if (($start == -1) or ($end == -1)) { + // find_string is called with only one parameter, set start end end + $start = 0; + $end = $this->total; + } + if (abs($start - $end) <= 1) { + // We're done, now we either found the string, or it doesn't exist + $txt = $this->get_original_string($start); + if ($string == $txt) + return $start; + else + return -1; + } else if ($start > $end) { + // start > end -> turn around and start over + return $this->find_string($string, $end, $start); + } else { + // Divide table in two parts + $half = (int)(($start + $end) / 2); + $cmp = strcmp($string, $this->get_original_string($half)); + if ($cmp == 0) + // string is exactly in the middle => return it + return $half; + else if ($cmp < 0) + // The string is in the upper half + return $this->find_string($string, $start, $half); + else + // The string is in the lower half + return $this->find_string($string, $half, $end); + } + } + + /** + * Translates a string + * + * @access public + * @param string string to be translated + * @return string translated string (or original, if not found) + */ + function translate($string) { + if ($this->short_circuit) + return $string; + $this->load_tables(); + + if ($this->enable_cache) { + // Caching enabled, get translated string from cache + if (array_key_exists($string, $this->cache_translations)) + return $this->cache_translations[$string]; + else + return $string; + } else { + // Caching not enabled, try to find string + $num = $this->find_string($string); + if ($num == -1) + return $string; + else + return $this->get_translation_string($num); + } + } + + /** + * Sanitize plural form expression for use in PHP eval call. + * + * @access private + * @return string sanitized plural form expression + */ + function sanitize_plural_expression($expr) { + // Get rid of disallowed characters. + $expr = preg_replace('@[^a-zA-Z0-9_:;\(\)\?\|\&=!<>+*/\%-]@', '', $expr); + + // Add parenthesis for tertiary '?' operator. + $expr .= ';'; + $res = ''; + $p = 0; + for ($i = 0; $i < strlen($expr); $i++) { + $ch = $expr[$i]; + switch ($ch) { + case '?': + $res .= ' ? ('; + $p++; + break; + case ':': + $res .= ') : ('; + break; + case ';': + $res .= str_repeat( ')', $p) . ';'; + $p = 0; + break; + default: + $res .= $ch; + } + } + return $res; + } + + /** + * Parse full PO header and extract only plural forms line. + * + * @access private + * @return string verbatim plural form header field + */ + function extract_plural_forms_header_from_po_header($header) { + if (preg_match("/(^|\n)plural-forms: ([^\n]*)\n/i", $header, $regs)) + $expr = $regs[2]; + else + $expr = "nplurals=2; plural=n == 1 ? 0 : 1;"; + return $expr; + } + + /** + * Get possible plural forms from MO header + * + * @access private + * @return string plural form header + */ + function get_plural_forms() { + // lets assume message number 0 is header + // this is true, right? + $this->load_tables(); + + // cache header field for plural forms + if (! is_string($this->pluralheader)) { + if ($this->enable_cache) { + $header = $this->cache_translations[""]; + } else { + $header = $this->get_translation_string(0); + } + $expr = $this->extract_plural_forms_header_from_po_header($header); + $this->pluralheader = $this->sanitize_plural_expression($expr); + } + return $this->pluralheader; + } + + /** + * Detects which plural form to take + * + * @access private + * @param n count + * @return int array index of the right plural form + */ + function select_string($n) { + $string = $this->get_plural_forms(); + $string = str_replace('nplurals',"\$total",$string); + $string = str_replace("n",$n,$string); + $string = str_replace('plural',"\$plural",$string); + + $total = 0; + $plural = 0; + + eval("$string"); + if ($plural >= $total) $plural = $total - 1; + return $plural; + } + + /** + * Plural version of gettext + * + * @access public + * @param string single + * @param string plural + * @param string number + * @return translated plural form + */ + function ngettext($single, $plural, $number) { + if ($this->short_circuit) { + if ($number != 1) + return $plural; + else + return $single; + } + + // find out the appropriate form + $select = $this->select_string($number); + + // this should contains all strings separated by NULLs + $key = $single . chr(0) . $plural; + + + if ($this->enable_cache) { + if (! array_key_exists($key, $this->cache_translations)) { + return ($number != 1) ? $plural : $single; + } else { + $result = $this->cache_translations[$key]; + $list = explode(chr(0), $result); + return $list[$select]; + } + } else { + $num = $this->find_string($key); + if ($num == -1) { + return ($number != 1) ? $plural : $single; + } else { + $result = $this->get_translation_string($num); + $list = explode(chr(0), $result); + return $list[$select]; + } + } + } + + function pgettext($context, $msgid) { + $key = $context . chr(4) . $msgid; + $ret = $this->translate($key); + if (strpos($ret, "\004") !== false) { + return $msgid; + } else { + return $ret; + } + } + + function npgettext($context, $singular, $plural, $number) { + $key = $context . chr(4) . $singular; + $ret = $this->ngettext($key, $plural, $number); + if (strpos($ret, "\004") !== false) { + return $singular; + } else { + return $ret; + } + + } +} + +?> diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php new file mode 100644 index 00000000..92202bf8 --- /dev/null +++ b/web/lib/pkgbasefuncs.inc.php @@ -0,0 +1,1075 @@ +query($q); + if (!$result) { + return null; + } + + return $result->fetchColumn(0); +} + +/** + * Get all package comment information for a specific package base + * + * @param int $base_id The package base ID to get comments for + * @param int $limit Maximum number of comments to return (0 means unlimited) + * @param bool $include_deleted True if deleted comments should be included + * + * @return array All package comment information for a specific package base + */ +function pkgbase_comments($base_id, $limit, $include_deleted) { + $base_id = intval($base_id); + $limit = intval($limit); + if (!$base_id) { + return null; + } + + $dbh = DB::connect(); + $q = "SELECT PackageComments.ID, UserName, UsersID, Comments, "; + $q.= "CommentTS, DelUsersID FROM PackageComments LEFT JOIN Users "; + $q.= "ON PackageComments.UsersID = Users.ID "; + $q.= "WHERE PackageBaseID = " . $base_id . " "; + if (!$include_deleted) { + $q.= "AND DelUsersID IS NULL "; + } + $q.= "ORDER BY CommentTS DESC"; + if ($limit > 0) { + $q.=" LIMIT " . $limit; + } + $result = $dbh->query($q); + if (!$result) { + return null; + } + + return $result->fetchAll(); +} + +/** + * Add a comment to a package page and send out appropriate notifications + * + * @param string $base_id The package base ID to add the comment on + * @param string $uid The user ID of the individual who left the comment + * @param string $comment The comment left on a package page + * + * @return void + */ +function pkgbase_add_comment($base_id, $uid, $comment) { + $dbh = DB::connect(); + + $q = "INSERT INTO PackageComments "; + $q.= "(PackageBaseID, UsersID, Comments, CommentTS) VALUES ("; + $q.= intval($base_id) . ", " . $uid . ", "; + $q.= $dbh->quote($comment) . ", UNIX_TIMESTAMP())"; + $dbh->exec($q); + + /* + * Send e-mail notifications. + * TODO: Move notification logic to separate function where it belongs. + */ + $q = "SELECT CommentNotify.*, Users.Email "; + $q.= "FROM CommentNotify, Users "; + $q.= "WHERE Users.ID = CommentNotify.UserID "; + $q.= "AND CommentNotify.UserID != " . $uid . " "; + $q.= "AND CommentNotify.PackageBaseID = " . intval($base_id); + $result = $dbh->query($q); + $bcc = array(); + + if ($result) { + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + array_push($bcc, $row['Email']); + } + + $q = "SELECT Name FROM PackageBases WHERE ID = "; + $q.= intval($base_id); + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_ASSOC); + + /* + * TODO: Add native language emails for users, based on their + * preferences. Simply making these strings translatable won't + * work, users would be getting emails in the language that the + * user who posted the comment was in. + */ + $body = 'from ' . get_pkgbase_uri($row['Name'], true) . "\n" + . username_from_sid($_COOKIE['AURSID']) . " wrote:\n\n" + . $comment + . "\n\n---\nIf you no longer wish to receive notifications about this package, please go the the above package page and click the UnNotify button."; + $body = wordwrap($body, 70); + $bcc = implode(', ', $bcc); + $thread_id = ""; + $headers = "MIME-Version: 1.0\r\n" . + "Content-type: text/plain; charset=UTF-8\r\n" . + "Bcc: $bcc\r\n" . + "Reply-to: noreply@aur.archlinux.org\r\n" . + "From: notify@aur.archlinux.org\r\n" . + "In-Reply-To: $thread_id\r\n" . + "References: $thread_id\r\n" . + "X-Mailer: AUR"; + @mail('undisclosed-recipients: ;', "AUR Comment for " . $row['Name'], $body, $headers); + } +} + +/** + * Get a list of all packages a logged-in user has voted for + * + * @param string $sid The session ID of the visitor + * + * @return array All packages the visitor has voted for + */ +function pkgbase_votes_from_sid($sid="") { + $pkgs = array(); + if (!$sid) {return $pkgs;} + $dbh = DB::connect(); + $q = "SELECT PackageBaseID "; + $q.= "FROM PackageVotes, Users, Sessions "; + $q.= "WHERE Users.ID = Sessions.UsersID "; + $q.= "AND Users.ID = PackageVotes.UsersID "; + $q.= "AND Sessions.SessionID = " . $dbh->quote($sid); + $result = $dbh->query($q); + if ($result) { + while ($row = $result->fetch(PDO::FETCH_NUM)) { + $pkgs[$row[0]] = 1; + } + } + return $pkgs; +} + +/** + * Get the package base details + * + * @param string $id The package base ID to get description for + * + * @return array The package base's details OR error message + **/ +function pkgbase_get_details($base_id) { + $dbh = DB::connect(); + + $q = "SELECT PackageBases.ID, PackageBases.Name, "; + $q.= "PackageBases.NumVotes, "; + $q.= "PackageBases.OutOfDateTS, PackageBases.SubmittedTS, "; + $q.= "PackageBases.ModifiedTS, PackageBases.SubmitterUID, "; + $q.= "PackageBases.MaintainerUID, PackageBases.PackagerUID, "; + $q.= "(SELECT COUNT(*) FROM PackageRequests "; + $q.= " WHERE PackageRequests.PackageBaseID = PackageBases.ID "; + $q.= " AND PackageRequests.Status = 0) AS RequestCount "; + $q.= "FROM PackageBases "; + $q.= "WHERE PackageBases.ID = " . intval($base_id); + $result = $dbh->query($q); + + $row = array(); + + if (!$result) { + $row['error'] = __("Error retrieving package details."); + } + else { + $row = $result->fetch(PDO::FETCH_ASSOC); + if (empty($row)) { + $row['error'] = __("Package details could not be found."); + } + } + + return $row; +} + +/** + * Display the package base details page + * + * @param string $id The package base ID to get details page for + * @param array $row Package base details retrieved by pkgbase_get_details() + * @param string $SID The session ID of the visitor + * + * @return void + */ +function pkgbase_display_details($base_id, $row, $SID="") { + $dbh = DB::connect(); + + if (isset($row['error'])) { + print "

    " . $row['error'] . "

    \n"; + } + else { + $pkgbase_name = pkgbase_name_from_id($base_id); + + include('pkgbase_details.php'); + + if ($SID) { + include('pkg_comment_form.php'); + } + + $limit = isset($_GET['comments']) ? 0 : 10; + $include_deleted = has_credential(CRED_COMMENT_VIEW_DELETED); + $comments = pkgbase_comments($base_id, $limit, $include_deleted); + if (!empty($comments)) { + include('pkg_comments.php'); + } + } +} + +/** + * Convert a list of package IDs into a list of corresponding package bases. + * + * @param array|int $ids Array of package IDs to convert + * + * @return array|int List of package base IDs + */ +function pkgbase_from_pkgid($ids) { + $dbh = DB::connect(); + + if (is_array($ids)) { + $q = "SELECT PackageBaseID FROM Packages "; + $q.= "WHERE ID IN (" . implode(",", $ids) . ")"; + $result = $dbh->query($q); + return $result->fetchAll(PDO::FETCH_COLUMN, 0); + } else { + $q = "SELECT PackageBaseID FROM Packages "; + $q.= "WHERE ID = " . $ids; + $result = $dbh->query($q); + return $result->fetch(PDO::FETCH_COLUMN, 0); + } +} + +/** + * Retrieve ID of a package base by name + * + * @param string $name The package base name to retrieve the ID for + * + * @return int The ID of the package base + */ +function pkgbase_from_name($name) { + $dbh = DB::connect(); + $q = "SELECT ID FROM PackageBases WHERE Name = " . $dbh->quote($name); + $result = $dbh->query($q); + return $result->fetch(PDO::FETCH_COLUMN, 0); +} + +/** + * Retrieve the name of a package base given its ID + * + * @param int $base_id The ID of the package base to query + * + * @return string The name of the package base + */ +function pkgbase_name_from_id($base_id) { + $dbh = DB::connect(); + $q = "SELECT Name FROM PackageBases WHERE ID = " . intval($base_id); + $result = $dbh->query($q); + return $result->fetch(PDO::FETCH_COLUMN, 0); +} + +/** + * Get the names of all packages belonging to a package base + * + * @param int $base_id The ID of the package base + * + * @return array The names of all packages belonging to the package base + */ +function pkgbase_get_pkgnames($base_id) { + $dbh = DB::connect(); + $q = "SELECT Name FROM Packages WHERE PackageBaseID = " . intval($base_id); + $result = $dbh->query($q); + return $result->fetchAll(PDO::FETCH_COLUMN, 0); +} + +/** + * Delete all packages belonging to a package base + * + * @param int $base_id The ID of the package base + * + * @return void + */ +function pkgbase_delete_packages($base_id) { + $dbh = DB::connect(); + $q = "DELETE FROM Packages WHERE PackageBaseID = " . intval($base_id); + $dbh->exec($q); +} + +/** + * Retrieve the maintainer of a package base given its ID + * + * @param int $base_id The ID of the package base to query + * + * @return int The user ID of the current package maintainer + */ +function pkgbase_maintainer_uid($base_id) { + $dbh = DB::connect(); + $q = "SELECT MaintainerUID FROM PackageBases WHERE ID = " . intval($base_id); + $result = $dbh->query($q); + return $result->fetch(PDO::FETCH_COLUMN, 0); +} + +/** + * Retrieve the maintainers of an array of package bases given by their ID + * + * @param int $base_ids The array of IDs of the package bases to query + * + * @return int The user ID of the current package maintainer + */ +function pkgbase_maintainer_uids($base_ids) { + $dbh = DB::connect(); + $q = "SELECT MaintainerUID FROM PackageBases WHERE ID IN (" . implode(",", $base_ids) . ")"; + $result = $dbh->query($q); + return $result->fetchAll(PDO::FETCH_COLUMN, 0); +} + +/** + * Flag package(s) as out-of-date + * + * @param array $base_ids Array of package base IDs to flag/unflag + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgbase_flag($base_ids) { + if (!has_credential(CRED_PKGBASE_FLAG)) { + return array(false, __("You must be logged in before you can flag packages.")); + } + + $base_ids = sanitize_ids($base_ids); + if (empty($base_ids)) { + return array(false, __("You did not select any packages to flag.")); + } + + $dbh = DB::connect(); + + $q = "UPDATE PackageBases SET"; + $q.= " OutOfDateTS = UNIX_TIMESTAMP()"; + $q.= " WHERE ID IN (" . implode(",", $base_ids) . ")"; + $q.= " AND OutOfDateTS IS NULL"; + + $affected_pkgs = $dbh->exec($q); + + if ($affected_pkgs > 0) { + /* Notify of flagging by e-mail. */ + $f_name = username_from_sid($_COOKIE['AURSID']); + $f_email = email_from_sid($_COOKIE['AURSID']); + $f_uid = uid_from_sid($_COOKIE['AURSID']); + $q = "SELECT PackageBases.Name, Users.Email "; + $q.= "FROM PackageBases, Users "; + $q.= "WHERE PackageBases.ID IN (" . implode(",", $base_ids) .") "; + $q.= "AND Users.ID = PackageBases.MaintainerUID "; + $q.= "AND Users.ID != " . $f_uid; + $result = $dbh->query($q); + if ($result) { + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $body = "Your package " . $row['Name'] . " has been flagged out of date by " . $f_name . " [1]. You may view your package at:\n" . get_pkgbase_uri($row['Name'], true) . "\n\n[1] - " . get_user_uri($f_name, true); + $body = wordwrap($body, 70); + $headers = "MIME-Version: 1.0\r\n" . + "Content-type: text/plain; charset=UTF-8\r\n" . + "Reply-to: noreply@aur.archlinux.org\r\n" . + "From: notify@aur.archlinux.org\r\n" . + "X-Mailer: PHP\r\n" . + "X-MimeOLE: Produced By AUR"; + @mail($row['Email'], "AUR Out-of-date Notification for ".$row['Name'], $body, $headers); + } + } + } + + return array(true, __("The selected packages have been flagged out-of-date.")); +} + +/** + * Unflag package(s) as out-of-date + * + * @param array $base_ids Array of package base IDs to flag/unflag + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgbase_unflag($base_ids) { + $uid = uid_from_sid($_COOKIE["AURSID"]); + if (!$uid) { + return array(false, __("You must be logged in before you can unflag packages.")); + } + + $base_ids = sanitize_ids($base_ids); + if (empty($base_ids)) { + return array(false, __("You did not select any packages to unflag.")); + } + + $dbh = DB::connect(); + + $q = "UPDATE PackageBases SET "; + $q.= "OutOfDateTS = NULL "; + $q.= "WHERE ID IN (" . implode(",", $base_ids) . ") "; + + $maintainers = array_merge(pkgbase_maintainer_uids($base_ids), pkgbase_get_comaintainer_uids($base_ids)); + if (!has_credential(CRED_PKGBASE_UNFLAG, $maintainers)) { + $q.= "AND MaintainerUID = " . $uid; + } + + $result = $dbh->exec($q); + + if ($result) { + return array(true, __("The selected packages have been unflagged.")); + } +} + +/** + * Delete package bases + * + * @param array $base_ids Array of package base IDs to delete + * @param int $merge_base_id Package base to merge the deleted ones into + * @param int $via Package request to close upon deletion + * @param bool $grant Allow anyone to delete the package base + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgbase_delete ($base_ids, $merge_base_id, $via, $grant=false) { + if (!$grant && !has_credential(CRED_PKGBASE_DELETE)) { + return array(false, __("You do not have permission to delete packages.")); + } + + $base_ids = sanitize_ids($base_ids); + if (empty($base_ids)) { + return array(false, __("You did not select any packages to delete.")); + } + + $dbh = DB::connect(); + + if ($merge_base_id) { + $merge_base_name = pkgbase_name_from_id($merge_base_id); + } + + /* Send e-mail notifications. */ + foreach ($base_ids as $base_id) { + $q = "SELECT CommentNotify.*, Users.Email "; + $q.= "FROM CommentNotify, Users "; + $q.= "WHERE Users.ID = CommentNotify.UserID "; + $q.= "AND CommentNotify.UserID != " . uid_from_sid($_COOKIE['AURSID']) . " "; + $q.= "AND CommentNotify.PackageBaseID = " . $base_id; + $result = $dbh->query($q); + $bcc = array(); + + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + array_push($bcc, $row['Email']); + } + if (!empty($bcc)) { + $pkgbase_name = pkgbase_name_from_id($base_id); + + /* + * TODO: Add native language emails for users, based on + * their preferences. Simply making these strings + * translatable won't work, users would be getting + * emails in the language that the user who posted the + * comment was in. + */ + $body = ""; + if ($merge_base_id) { + $body .= username_from_sid($_COOKIE['AURSID']) . " merged \"".$pkgbase_name."\" into \"$merge_base_name\".\n\n"; + $body .= "You will no longer receive notifications about this package, please go to https://aur.archlinux.org" . get_pkgbase_uri($merge_base_name) . " and click the Notify button if you wish to recieve them again."; + } else { + $body .= username_from_sid($_COOKIE['AURSID']) . " deleted \"".$pkgbase_name."\".\n\n"; + $body .= "You will no longer receive notifications about this package."; + } + $body = wordwrap($body, 70); + $bcc = implode(', ', $bcc); + $headers = "MIME-Version: 1.0\r\n" . + "Content-type: text/plain; charset=UTF-8\r\n" . + "Bcc: $bcc\r\n" . + "Reply-to: noreply@aur.archlinux.org\r\n" . + "From: notify@aur.archlinux.org\r\n" . + "X-Mailer: AUR"; + @mail('undisclosed-recipients: ;', "AUR Package deleted: " . $pkgbase_name, $body, $headers); + } + } + + /* + * Close package request if the deletion was initiated through the + * request interface. NOTE: This needs to happen *before* the actual + * deletion. Otherwise, the former maintainer will not be included in + * the Cc list of the request notification email. + */ + if ($via) { + pkgreq_close(intval($via), 'accepted', ''); + } + + /* Scan through pending deletion requests and close them. */ + if (!$action) { + $username = username_from_sid($_COOKIE['AURSID']); + foreach ($base_ids as $base_id) { + $pkgreq_ids = array_merge(pkgreq_by_pkgbase($base_id)); + foreach ($pkgreq_ids as $pkgreq_id) { + pkgreq_close(intval($pkgreq_id), 'accepted', + 'The user ' . $username . + ' deleted the package.', true); + } + } + } + + if ($merge_base_id) { + /* Merge comments */ + $q = "UPDATE PackageComments "; + $q.= "SET PackageBaseID = " . intval($merge_base_id) . " "; + $q.= "WHERE PackageBaseID IN (" . implode(",", $base_ids) . ")"; + $dbh->exec($q); + + /* Merge votes */ + foreach ($base_ids as $base_id) { + $q = "UPDATE PackageVotes "; + $q.= "SET PackageBaseID = " . intval($merge_base_id) . " "; + $q.= "WHERE PackageBaseID = " . $base_id . " "; + $q.= "AND UsersID NOT IN ("; + $q.= "SELECT * FROM (SELECT UsersID "; + $q.= "FROM PackageVotes "; + $q.= "WHERE PackageBaseID = " . intval($merge_base_id); + $q.= ") temp)"; + $dbh->exec($q); + } + + $q = "UPDATE PackageBases "; + $q.= "SET NumVotes = (SELECT COUNT(*) FROM PackageVotes "; + $q.= "WHERE PackageBaseID = " . intval($merge_base_id) . ") "; + $q.= "WHERE ID = " . intval($merge_base_id); + $dbh->exec($q); + } + + $q = "DELETE FROM Packages WHERE PackageBaseID IN (" . implode(",", $base_ids) . ")"; + $dbh->exec($q); + + $q = "DELETE FROM PackageBases WHERE ID IN (" . implode(",", $base_ids) . ")"; + $dbh->exec($q); + + return array(true, __("The selected packages have been deleted.")); +} + +/** + * Adopt or disown packages + * + * @param array $base_ids Array of package base IDs to adopt/disown + * @param bool $action Adopts if true, disowns if false. Adopts by default + * @param int $via Package request to close upon adoption + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgbase_adopt ($base_ids, $action=true, $via) { + $dbh = DB::connect(); + + $uid = uid_from_sid($_COOKIE["AURSID"]); + if (!$uid) { + if ($action) { + return array(false, __("You must be logged in before you can adopt packages.")); + } else { + return array(false, __("You must be logged in before you can disown packages.")); + } + } + + /* Verify package ownership. */ + $base_ids = sanitize_ids($base_ids); + + $q = "SELECT ID FROM PackageBases "; + $q.= "WHERE ID IN (" . implode(",", $base_ids) . ") "; + + if ($action && !has_credential(CRED_PKGBASE_ADOPT)) { + /* Regular users may only adopt orphan packages. */ + $q.= "AND MaintainerUID IS NULL"; + } + if (!$action && !has_credential(CRED_PKGBASE_DISOWN)) { + /* Regular users may only disown their own packages. */ + $q.= "AND MaintainerUID = " . $uid; + } + + $result = $dbh->query($q); + $base_ids = $result->fetchAll(PDO::FETCH_COLUMN, 0); + + /* Error out if the list of remaining packages is empty. */ + if (empty($base_ids)) { + if ($action) { + return array(false, __("You did not select any packages to adopt.")); + } else { + return array(false, __("You did not select any packages to disown.")); + } + } + + /* + * Close package request if the disownment was initiated through the + * request interface. NOTE: This needs to happen *before* the actual + * disown operation. Otherwise, the former maintainer will not be + * included in the Cc list of the request notification email. + */ + if ($via) { + pkgreq_close(intval($via), 'accepted', ''); + } + + /* Scan through pending orphan requests and close them. */ + if (!$action) { + $username = username_from_sid($_COOKIE['AURSID']); + foreach ($base_ids as $base_id) { + $pkgreq_ids = pkgreq_by_pkgbase($base_id, 'orphan'); + foreach ($pkgreq_ids as $pkgreq_id) { + pkgreq_close(intval($pkgreq_id), 'accepted', + 'The user ' . $username . + ' disowned the package.', true); + } + } + } + + /* Adopt or disown the package. */ + if ($action) { + $q = "UPDATE PackageBases "; + $q.= "SET MaintainerUID = $uid "; + $q.= "WHERE ID IN (" . implode(",", $base_ids) . ") "; + $dbh->exec($q); + } else { + /* Update the co-maintainer list when disowning a package. */ + if (has_credential(CRED_PKGBASE_DISOWN)) { + foreach ($base_ids as $base_id) { + pkgbase_set_comaintainers($base_id, array()); + } + + $q = "UPDATE PackageBases "; + $q.= "SET MaintainerUID = NULL "; + $q.= "WHERE ID IN (" . implode(",", $base_ids) . ") "; + $dbh->exec($q); + } else { + foreach ($base_ids as $base_id) { + $comaintainers = pkgbase_get_comaintainers($base_id); + + if (count($comaintainers) > 0) { + $uid = uid_from_username($comaintainers[0]); + $comaintainers = array_diff($comaintainers, array($comaintainers[0])); + pkgbase_set_comaintainers($base_id, $comaintainers); + } else { + $uid = "NULL"; + } + + $q = "UPDATE PackageBases "; + $q.= "SET MaintainerUID = " . $uid . " "; + $q.= "WHERE ID = " . $base_id; + $dbh->exec($q); + } + } + } + + if ($action) { + pkgbase_notify($base_ids); + return array(true, __("The selected packages have been adopted.")); + } else { + return array(true, __("The selected packages have been disowned.")); + } +} + +/** + * Vote and un-vote for packages + * + * @param array $base_ids Array of package base IDs to vote/un-vote + * @param bool $action Votes if true, un-votes if false. Votes by default + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgbase_vote ($base_ids, $action=true) { + if (!has_credential(CRED_PKGBASE_VOTE)) { + if ($action) { + return array(false, __("You must be logged in before you can vote for packages.")); + } else { + return array(false, __("You must be logged in before you can un-vote for packages.")); + } + } + + $base_ids = sanitize_ids($base_ids); + if (empty($base_ids)) { + if ($action) { + return array(false, __("You did not select any packages to vote for.")); + } else { + return array(false, __("Your votes have been removed from the selected packages.")); + } + } + + $dbh = DB::connect(); + $my_votes = pkgbase_votes_from_sid($_COOKIE["AURSID"]); + $uid = uid_from_sid($_COOKIE["AURSID"]); + + $first = 1; + foreach ($base_ids as $pid) { + if ($action) { + $check = !isset($my_votes[$pid]); + } else { + $check = isset($my_votes[$pid]); + } + + if ($check) { + if ($first) { + $first = 0; + $vote_ids = $pid; + if ($action) { + $vote_clauses = "($uid, $pid, UNIX_TIMESTAMP())"; + } + } else { + $vote_ids .= ", $pid"; + if ($action) { + $vote_clauses .= ", ($uid, $pid, UNIX_TIMESTAMP())"; + } + } + } + } + + /* Only add votes for packages the user hasn't already voted for. */ + $op = $action ? "+" : "-"; + $q = "UPDATE PackageBases SET NumVotes = NumVotes $op 1 "; + $q.= "WHERE ID IN ($vote_ids)"; + + $dbh->exec($q); + + if ($action) { + $q = "INSERT INTO PackageVotes (UsersID, PackageBaseID, VoteTS) VALUES "; + $q.= $vote_clauses; + } else { + $q = "DELETE FROM PackageVotes WHERE UsersID = $uid "; + $q.= "AND PackageBaseID IN ($vote_ids)"; + } + + $dbh->exec($q); + + if ($action) { + return array(true, __("Your votes have been cast for the selected packages.")); + } else { + return array(true, __("Your votes have been removed from the selected packages.")); + } +} + +/** + * Get all usernames and IDs that voted for a specific package base + * + * @param string $pkgbase_name The package base to retrieve votes for + * + * @return array User IDs and usernames that voted for a specific package base + */ +function pkgbase_votes_from_name($pkgbase_name) { + $dbh = DB::connect(); + + $q = "SELECT UsersID, Username, Name, VoteTS FROM PackageVotes "; + $q.= "LEFT JOIN Users ON UsersID = Users.ID "; + $q.= "LEFT JOIN PackageBases "; + $q.= "ON PackageVotes.PackageBaseID = PackageBases.ID "; + $q.= "WHERE PackageBases.Name = ". $dbh->quote($pkgbase_name) . " "; + $q.= "ORDER BY Username"; + $result = $dbh->query($q); + + if (!$result) { + return; + } + + $votes = array(); + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $votes[] = $row; + } + + return $votes; +} + +/** + * Determine if a user has already voted for a specific package base + * + * @param string $uid The user ID to check for an existing vote + * @param string $base_id The package base ID to check for an existing vote + * + * @return bool True if the user has already voted, otherwise false + */ +function pkgbase_user_voted($uid, $base_id) { + $dbh = DB::connect(); + $q = "SELECT COUNT(*) FROM PackageVotes WHERE "; + $q.= "UsersID = ". $dbh->quote($uid) . " AND "; + $q.= "PackageBaseID = " . $dbh->quote($base_id); + $result = $dbh->query($q); + if (!$result) { + return null; + } + + return ($result->fetch(PDO::FETCH_COLUMN, 0) > 0); +} + +/** + * Determine if a user wants notifications for a specific package base + * + * @param string $uid User ID to check in the database + * @param string $base_id Package base ID to check notifications for + * + * @return bool True if the user wants notifications, otherwise false + */ +function pkgbase_user_notify($uid, $base_id) { + $dbh = DB::connect(); + + $q = "SELECT * FROM CommentNotify WHERE UserID = " . $dbh->quote($uid); + $q.= " AND PackageBaseID = " . $dbh->quote($base_id); + $result = $dbh->query($q); + + if ($result->fetch(PDO::FETCH_NUM)) { + return true; + } + else { + return false; + } +} + +/** + * Toggle notification of packages + * + * @param array $base_ids Array of package base IDs to toggle + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgbase_notify ($base_ids, $action=true) { + if (!has_credential(CRED_PKGBASE_NOTIFY)) { + return; + } + + $base_ids = sanitize_ids($base_ids); + if (empty($base_ids)) { + return array(false, __("Couldn't add to notification list.")); + } + + $dbh = DB::connect(); + $uid = uid_from_sid($_COOKIE["AURSID"]); + + $output = ""; + + $first = true; + + /* + * There currently shouldn't be multiple requests here, but the format + * in which it's sent requires this. + */ + foreach ($base_ids as $bid) { + $q = "SELECT Name FROM PackageBases WHERE ID = $bid"; + $result = $dbh->query($q); + if ($result) { + $row = $result->fetch(PDO::FETCH_NUM); + $basename = $row[0]; + } + else { + $basename = ''; + } + + if ($first) + $first = false; + else + $output .= ", "; + + + if ($action) { + $q = "SELECT COUNT(*) FROM CommentNotify WHERE "; + $q .= "UserID = $uid AND PackageBaseID = $bid"; + + /* Notification already added. Don't add again. */ + $result = $dbh->query($q); + if ($result->fetchColumn() == 0) { + $q = "INSERT INTO CommentNotify (PackageBaseID, UserID) VALUES ($bid, $uid)"; + $dbh->exec($q); + } + + $output .= $basename; + } + else { + $q = "DELETE FROM CommentNotify WHERE PackageBaseID = $bid "; + $q .= "AND UserID = $uid"; + $dbh->exec($q); + + $output .= $basename; + } + } + + if ($action) { + $output = __("You have been added to the comment notification list for %s.", $output); + } + else { + $output = __("You have been removed from the comment notification list for %s.", $output); + } + + return array(true, $output); +} + +/** + * Delete a package comment + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgbase_delete_comment() { + $uid = uid_from_sid($_COOKIE["AURSID"]); + if (!$uid) { + return array(false, __("You must be logged in before you can edit package information.")); + } + + if (isset($_POST["comment_id"])) { + $comment_id = $_POST["comment_id"]; + } else { + return array(false, __("Missing comment ID.")); + } + + $dbh = DB::connect(); + if (can_delete_comment($comment_id)) { + $q = "UPDATE PackageComments "; + $q.= "SET DelUsersID = ".$uid." "; + $q.= "WHERE ID = ".intval($comment_id); + $dbh->exec($q); + return array(true, __("Comment has been deleted.")); + } else { + return array(false, __("You are not allowed to delete this comment.")); + } +} + +/** + * Get a list of package base keywords + * + * @param int $base_id The package base ID to retrieve the keywords for + * + * @return array An array of keywords + */ +function pkgbase_get_keywords($base_id) { + $dbh = DB::connect(); + $q = "SELECT Keyword FROM PackageKeywords "; + $q .= "WHERE PackageBaseID = " . intval($base_id) . " "; + $q .= "ORDER BY Keyword ASC"; + $result = $dbh->query($q); + + if ($result) { + return $result->fetchAll(PDO::FETCH_COLUMN, 0); + } else { + return array(); + } +} + +/** + * Update the list of keywords of a package base + * + * @param int $base_id The package base ID to update the keywords of + * @param array $users Array of keywords + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgbase_set_keywords($base_id, $keywords) { + $base_id = intval($base_id); + + $maintainers = array_merge(array(pkgbase_maintainer_uid($base_id)), pkgbase_get_comaintainer_uids(array($base_id))); + if (!has_credential(CRED_PKGBASE_SET_KEYWORDS, $maintainers)) { + return array(false, __("You are not allowed to edit the keywords of this package base.")); + } + + /* Remove empty and duplicate user names. */ + $keywords = array_unique(array_filter(array_map('trim', $keywords))); + + $dbh = DB::connect(); + + $q = sprintf("DELETE FROM PackageKeywords WHERE PackageBaseID = %d", $base_id); + $dbh->exec($q); + + $i = 0; + foreach ($keywords as $keyword) { + $q = sprintf("INSERT INTO PackageKeywords (PackageBaseID, Keyword) VALUES (%d, %s)", $base_id, $dbh->quote($keyword)); + var_dump($q); + $dbh->exec($q); + + $i++; + if ($i >= 20) { + break; + } + } + + return array(true, __("The package base keywords have been updated.")); +} + +/** + * Get a list of package base co-maintainers + * + * @param int $base_id The package base ID to retrieve the co-maintainers for + * + * @return array An array of co-maintainer user names + */ +function pkgbase_get_comaintainers($base_id) { + $dbh = DB::connect(); + $q = "SELECT UserName FROM PackageComaintainers "; + $q .= "INNER JOIN Users ON Users.ID = PackageComaintainers.UsersID "; + $q .= "WHERE PackageComaintainers.PackageBaseID = " . intval($base_id) . " "; + $q .= "ORDER BY Priority ASC"; + $result = $dbh->query($q); + + if ($result) { + return $result->fetchAll(PDO::FETCH_COLUMN, 0); + } else { + return array(); + } +} + +/** + * Get a list of package base co-maintainer IDs + * + * @param int $base_id The package base ID to retrieve the co-maintainers for + * + * @return array An array of co-maintainer user UDs + */ +function pkgbase_get_comaintainer_uids($base_ids) { + $dbh = DB::connect(); + $q = "SELECT UsersID FROM PackageComaintainers "; + $q .= "INNER JOIN Users ON Users.ID = PackageComaintainers.UsersID "; + $q .= "WHERE PackageComaintainers.PackageBaseID IN (" . implode(",", $base_ids) . ") "; + $q .= "ORDER BY Priority ASC"; + $result = $dbh->query($q); + + if ($result) { + return $result->fetchAll(PDO::FETCH_COLUMN, 0); + } else { + return array(); + } +} + +/** + * Update the list of co-maintainers of a package base + * + * @param int $base_id The package base ID to update the co-maintainers of + * @param array $users Array of co-maintainer user names + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgbase_set_comaintainers($base_id, $users) { + if (!has_credential(CRED_PKGBASE_EDIT_COMAINTAINERS, array(pkgbase_maintainer_uid($base_id)))) { + return array(false, __("You are not allowed to manage co-maintainers of this package base.")); + } + + /* Remove empty and duplicate user names. */ + $users = array_unique(array_filter(array_map('trim', $users))); + + $dbh = DB::connect(); + + $uids = array(); + foreach($users as $user) { + $q = "SELECT ID FROM Users "; + $q .= "WHERE UserName = " . $dbh->quote($user); + $result = $dbh->query($q); + $uid = $result->fetchColumn(0); + + if (!$uid) { + return array(false, __("Invalid user name: %s", $user)); + } + + $uids[] = $uid; + } + + $q = sprintf("DELETE FROM PackageComaintainers WHERE PackageBaseID = %d", $base_id); + $dbh->exec($q); + + $i = 1; + foreach ($uids as $uid) { + $q = sprintf("INSERT INTO PackageComaintainers (PackageBaseID, UsersID, Priority) VALUES (%d, %d, %d)", $base_id, $uid, $i); + $dbh->exec($q); + $i++; + } + + return array(true, __("The package base co-maintainers have been updated.")); +} diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php new file mode 100644 index 00000000..110290ba --- /dev/null +++ b/web/lib/pkgfuncs.inc.php @@ -0,0 +1,960 @@ +query($q); + + if (!$result) { + return false; + } + + $uid = $result->fetch(PDO::FETCH_COLUMN, 0); + + return has_credential(CRED_COMMENT_DELETE, array($uid)); +} + +/** + * Determine if the user can delete a specific package comment using an array + * + * Only the comment submitter, Trusted Users, and Developers can delete + * comments. This function is used for the frontend side of comment deletion. + * + * @param array $comment All database information relating a specific comment + * + * @return bool True if the user can delete the comment, otherwise false + */ +function can_delete_comment_array($comment) { + return has_credential(CRED_COMMENT_DELETE, array($comment['UsersID'])); +} + +/** + * Check to see if the package name already exists in the database + * + * @param string $name The package name to check + * + * @return string|void Package name if it already exists + */ +function pkg_from_name($name="") { + if (!$name) {return NULL;} + $dbh = DB::connect(); + $q = "SELECT ID FROM Packages "; + $q.= "WHERE Name = " . $dbh->quote($name); + $result = $dbh->query($q); + if (!$result) { + return; + } + $row = $result->fetch(PDO::FETCH_NUM); + return $row[0]; +} + +/** + * Get licenses for a specific package + * + * @param int $pkgid The package to get licenses for + * + * @return array All licenses for the package + */ +function pkg_licenses($pkgid) { + $lics = array(); + $pkgid = intval($pkgid); + if ($pkgid > 0) { + $dbh = DB::connect(); + $q = "SELECT l.Name FROM Licenses l "; + $q.= "INNER JOIN PackageLicenses pl ON pl.LicenseID = l.ID "; + $q.= "WHERE pl.PackageID = ". $pkgid; + $result = $dbh->query($q); + if (!$result) { + return array(); + } + while ($row = $result->fetch(PDO::FETCH_COLUMN, 0)) { + $lics[] = $row; + } + } + return $lics; +} + +/** + * Get package groups for a specific package + * + * @param int $pkgid The package to get groups for + * + * @return array All package groups for the package + */ +function pkg_groups($pkgid) { + $grps = array(); + $pkgid = intval($pkgid); + if ($pkgid > 0) { + $dbh = DB::connect(); + $q = "SELECT g.Name FROM Groups g "; + $q.= "INNER JOIN PackageGroups pg ON pg.GroupID = g.ID "; + $q.= "WHERE pg.PackageID = ". $pkgid; + $result = $dbh->query($q); + if (!$result) { + return array(); + } + while ($row = $result->fetch(PDO::FETCH_COLUMN, 0)) { + $grps[] = $row; + } + } + return $grps; +} + +/** + * Get package dependencies for a specific package + * + * @param int $pkgid The package to get dependencies for + * + * @return array All package dependencies for the package + */ +function pkg_dependencies($pkgid) { + $deps = array(); + $pkgid = intval($pkgid); + if ($pkgid > 0) { + $dbh = DB::connect(); + $q = "SELECT pd.DepName, dt.Name, pd.DepCondition, pd.DepArch, p.ID FROM PackageDepends pd "; + $q.= "LEFT JOIN Packages p ON pd.DepName = p.Name "; + $q.= "OR SUBSTRING(pd.DepName FROM 1 FOR POSITION(': ' IN pd.DepName) - 1) = p.Name "; + $q.= "LEFT JOIN DependencyTypes dt ON dt.ID = pd.DepTypeID "; + $q.= "WHERE pd.PackageID = ". $pkgid . " "; + $q.= "ORDER BY pd.DepName"; + $result = $dbh->query($q); + if (!$result) { + return array(); + } + while ($row = $result->fetch(PDO::FETCH_NUM)) { + $deps[] = $row; + } + } + return $deps; +} + +/** + * Get package relations for a specific package + * + * @param int $pkgid The package to get relations for + * + * @return array All package relations for the package + */ +function pkg_relations($pkgid) { + $rels = array(); + $pkgid = intval($pkgid); + if ($pkgid > 0) { + $dbh = DB::connect(); + $q = "SELECT pr.RelName, rt.Name, pr.RelCondition, pr.RelArch, p.ID FROM PackageRelations pr "; + $q.= "LEFT JOIN Packages p ON pr.RelName = p.Name "; + $q.= "LEFT JOIN RelationTypes rt ON rt.ID = pr.RelTypeID "; + $q.= "WHERE pr.PackageID = ". $pkgid . " "; + $q.= "ORDER BY pr.RelName"; + $result = $dbh->query($q); + if (!$result) { + return array(); + } + while ($row = $result->fetch(PDO::FETCH_NUM)) { + $rels[] = $row; + } + } + return $rels; +} + +/** + * Get the HTML code to display a package dependency link + * + * @param string $name The name of the dependency + * @param string $type The name of the dependency type + * @param string $cond The package dependency condition string + * @param string $arch The package dependency architecture + * @param int $pkg_id The package of the package to display the dependency for + * @param bool $show_desc Whether the description of optdepends is shown + * + * @return string The HTML code of the label to display + */ +function pkg_depend_link($name, $type, $cond, $arch, $pkg_id, $show_desc=true) { + if ($type == 'optdepends' && strpos($name, ':') !== false) { + $tokens = explode(':', $name, 2); + $name = $tokens[0]; + $desc = $tokens[1]; + } else { + $desc = '(unknown)'; + } + + $link = ''; + $link .= htmlspecialchars($name) . ''; + $link .= htmlspecialchars($cond); + + if ($type != 'depends' || $arch) { + $link .= ' ('; + + if ($type == 'makedepends') { + $link .= 'make'; + } elseif ($type == 'checkdepends') { + $link .= 'check'; + } elseif ($type == 'optdepends') { + $link .= 'optional'; + } + + if ($type != 'depends' && $arch) { + $link .= ', '; + } + + if ($arch) { + $link .= htmlspecialchars($arch); + } + + $link .= ')'; + if ($show_desc && $type == 'optdepends') { + $link .= ' – ' . htmlspecialchars($desc) . ' '; + } + $link .= ''; + } + + return $link; +} + +/** + * Get the HTML code to display a package relation + * + * @param string $name The name of the relation + * @param string $cond The package relation condition string + * @param string $arch The package relation architecture + * + * @return string The HTML code of the label to display + */ +function pkg_rel_html($name, $cond, $arch) { + $html = htmlspecialchars($name) . htmlspecialchars($cond); + + if ($arch) { + $html .= ' (' . htmlspecialchars($arch) . ')'; + } + + return $html; +} + +/** + * Get the HTML code to display a source link + * + * @param string $url The URL of the source + * @param string $arch The source architecture + * + * @return string The HTML code of the label to display + */ +function pkg_source_link($url, $arch) { + $url = explode('::', $url); + $parsed_url = parse_url($url[0]); + + if (isset($parsed_url['scheme']) || isset($url[1])) { + $link = '' . htmlspecialchars($url[0]) . ''; + } else { + $link = htmlspecialchars($url[0]); + } + + if ($arch) { + $link .= ' (' . htmlspecialchars($arch) . ')'; + } + + return $link; +} + +/** + * Determine packages that depend on a package + * + * @param string $name The package name for the dependency search + * + * @return array All packages that depend on the specified package name + */ +function pkg_required($name="") { + $deps = array(); + if ($name != "") { + $dbh = DB::connect(); + $q = "SELECT p.Name, dt.Name, '' AS DepCondition, pd.DepArch, p.ID FROM PackageDepends pd "; + $q.= "LEFT JOIN Packages p ON p.ID = pd.PackageID "; + $q.= "LEFT JOIN DependencyTypes dt ON dt.ID = pd.DepTypeID "; + $q.= "WHERE pd.DepName = " . $dbh->quote($name) . " "; + $q.= "OR SUBSTRING(pd.DepName FROM 1 FOR POSITION(': ' IN pd.DepName) - 1) = " . $dbh->quote($name) . " "; + $q.= "ORDER BY p.Name"; + $result = $dbh->query($q); + if (!$result) {return array();} + while ($row = $result->fetch(PDO::FETCH_NUM)) { + $deps[] = $row; + } + } + return $deps; +} + +/** + * Get all package sources for a specific package + * + * @param string $pkgid The package ID to get the sources for + * + * @return array All sources associated with a specific package + */ +function pkg_sources($pkgid) { + $sources = array(); + $pkgid = intval($pkgid); + if ($pkgid > 0) { + $dbh = DB::connect(); + $q = "SELECT Source, SourceArch FROM PackageSources "; + $q.= "WHERE PackageID = " . $pkgid; + $q.= " ORDER BY Source"; + $result = $dbh->query($q); + if (!$result) { + return array(); + } + while ($row = $result->fetch(PDO::FETCH_NUM)) { + $sources[] = $row; + } + } + return $sources; +} + +/** + * Determine package names from package IDs + * + * @param string|array $pkgids The package IDs to get names for + * + * @return array|string All names if multiple package IDs, otherwise package name + */ +function pkg_name_from_id($pkgids) { + if (is_array($pkgids)) { + $pkgids = sanitize_ids($pkgids); + $names = array(); + $dbh = DB::connect(); + $q = "SELECT Name FROM Packages WHERE ID IN ("; + $q.= implode(",", $pkgids) . ")"; + $result = $dbh->query($q); + if ($result) { + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $names[] = $row['Name']; + } + } + return $names; + } + elseif ($pkgids > 0) { + $dbh = DB::connect(); + $q = "SELECT Name FROM Packages WHERE ID = " . $pkgids; + $result = $dbh->query($q); + if ($result) { + $name = $result->fetch(PDO::FETCH_NUM); + } + return $name[0]; + } + else { + return NULL; + } +} + +/** + * Determine if a package name is on the database blacklist + * + * @param string $name The package name to check + * + * @return bool True if the name is blacklisted, otherwise false + */ +function pkg_name_is_blacklisted($name) { + $dbh = DB::connect(); + $q = "SELECT COUNT(*) FROM PackageBlacklist "; + $q.= "WHERE Name = " . $dbh->quote($name); + $result = $dbh->query($q); + + if (!$result) return false; + return ($result->fetchColumn() > 0); +} + +/** + * Get the package details + * + * @param string $id The package ID to get description for + * + * @return array The package's details OR error message + **/ +function pkg_get_details($id=0) { + $dbh = DB::connect(); + + $q = "SELECT Packages.*, PackageBases.ID AS BaseID, "; + $q.= "PackageBases.Name AS BaseName, "; + $q.= "PackageBases.NumVotes, PackageBases.OutOfDateTS, "; + $q.= "PackageBases.SubmittedTS, PackageBases.ModifiedTS, "; + $q.= "PackageBases.SubmitterUID, PackageBases.MaintainerUID, "; + $q.= "PackageBases.PackagerUID, "; + $q.= "(SELECT COUNT(*) FROM PackageRequests "; + $q.= " WHERE PackageRequests.PackageBaseID = Packages.PackageBaseID "; + $q.= " AND PackageRequests.Status = 0) AS RequestCount "; + $q.= "FROM Packages, PackageBases "; + $q.= "WHERE PackageBases.ID = Packages.PackageBaseID "; + $q.= "AND Packages.ID = " . intval($id); + $result = $dbh->query($q); + + $row = array(); + + if (!$result) { + $row['error'] = __("Error retrieving package details."); + } + else { + $row = $result->fetch(PDO::FETCH_ASSOC); + if (empty($row)) { + $row['error'] = __("Package details could not be found."); + } + } + + return $row; +} + +/** + * Display the package details page + * + * @param string $id The package ID to get details page for + * @param array $row Package details retrieved by pkg_get_details() + * @param string $SID The session ID of the visitor + * + * @return void + */ +function pkg_display_details($id=0, $row, $SID="") { + $dbh = DB::connect(); + + if (isset($row['error'])) { + print "

    " . $row['error'] . "

    \n"; + } + else { + $base_id = pkgbase_from_pkgid($id); + $pkgbase_name = pkgbase_name_from_id($base_id); + + include('pkg_details.php'); + + if ($SID) { + include('pkg_comment_form.php'); + } + + $limit = isset($_GET['comments']) ? 0 : 10; + $include_deleted = has_credential(CRED_COMMENT_VIEW_DELETED); + $comments = pkgbase_comments($base_id, $limit, $include_deleted); + if (!empty($comments)) { + include('pkg_comments.php'); + } + } +} + +/* pkg_search_page(SID) + * outputs the body of search/search results page + * + * parameters: + * SID - current Session ID + * preconditions: + * package search page has been accessed + * request variables have not been sanitized + * + * request vars: + * O - starting result number + * PP - number of search hits per page + * K - package search string + * SO - search hit sort order: + * values: a - ascending + * d - descending + * SB - sort search hits by: + * values: n - package name + * v - number of votes + * m - maintainer username + * SeB- property that search string (K) represents + * values: n - package name + * nd - package name & description + * x - package name (exact match) + * m - package maintainer's username + * s - package submitter's username + * do_Orphans - boolean. whether to search packages + * without a maintainer + * + * + * These two are actually handled in packages.php. + * + * IDs- integer array of ticked packages' IDs + * action - action to be taken on ticked packages + * values: do_Flag - Flag out-of-date + * do_UnFlag - Remove out-of-date flag + * do_Adopt - Adopt + * do_Disown - Disown + * do_Delete - Delete + * do_Notify - Enable notification + * do_UnNotify - Disable notification + */ +function pkg_search_page($SID="") { + $dbh = DB::connect(); + + /* + * Get commonly used variables. + * TODO: Reduce the number of database queries! + */ + if ($SID) + $myuid = uid_from_sid($SID); + + /* Sanitize paging variables. */ + if (isset($_GET['O'])) { + $_GET['O'] = max(intval($_GET['O']), 0); + } else { + $_GET['O'] = 0; + } + + if (isset($_GET["PP"])) { + $_GET["PP"] = bound(intval($_GET["PP"]), 50, 250); + } else { + $_GET["PP"] = 50; + } + + /* + * FIXME: Pull out DB-related code. All of it! This one's worth a + * choco-chip cookie, one of those nice big soft ones. + */ + + /* Build the package search query. */ + $q_select = "SELECT "; + if ($SID) { + $q_select .= "CommentNotify.UserID AS Notify, + PackageVotes.UsersID AS Voted, "; + } + $q_select .= "Users.Username AS Maintainer, + Packages.Name, Packages.Version, Packages.Description, + PackageBases.NumVotes, PackageBases.Popularity, Packages.ID, + Packages.PackageBaseID, PackageBases.OutOfDateTS "; + + $q_from = "FROM Packages + LEFT JOIN PackageBases ON (PackageBases.ID = Packages.PackageBaseID) + LEFT JOIN Users ON (PackageBases.MaintainerUID = Users.ID) "; + if ($SID) { + /* This is not needed for the total row count query. */ + $q_from_extra = "LEFT JOIN PackageVotes + ON (PackageBases.ID = PackageVotes.PackageBaseID AND PackageVotes.UsersID = $myuid) + LEFT JOIN CommentNotify + ON (PackageBases.ID = CommentNotify.PackageBaseID AND CommentNotify.UserID = $myuid) "; + } else { + $q_from_extra = ""; + } + + $q_where = 'WHERE PackageBases.PackagerUID IS NOT NULL '; + + if (isset($_GET['K'])) { + if (isset($_GET["SeB"]) && $_GET["SeB"] == "m") { + /* Search by maintainer. */ + $q_where .= "AND Users.Username = " . $dbh->quote($_GET['K']) . " "; + } + elseif (isset($_GET["SeB"]) && $_GET["SeB"] == "s") { + /* Search by submitter. */ + $q_where .= "AND SubmitterUID = " . intval(uid_from_username($_GET['K'])) . " "; + } + elseif (isset($_GET["SeB"]) && $_GET["SeB"] == "n") { + /* Search by name. */ + $K = "%" . addcslashes($_GET['K'], '%_') . "%"; + $q_where .= "AND (Packages.Name LIKE " . $dbh->quote($K) . ") "; + } + elseif (isset($_GET["SeB"]) && $_GET["SeB"] == "b") { + /* Search by package base name. */ + $K = "%" . addcslashes($_GET['K'], '%_') . "%"; + $q_where .= "AND (PackageBases.Name LIKE " . $dbh->quote($K) . ") "; + } + elseif (isset($_GET["SeB"]) && $_GET["SeB"] == "N") { + /* Search by name (exact match). */ + $q_where .= "AND (Packages.Name = " . $dbh->quote($_GET['K']) . ") "; + } + elseif (isset($_GET["SeB"]) && $_GET["SeB"] == "B") { + /* Search by package base name (exact match). */ + $q_where .= "AND (PackageBases.Name = " . $dbh->quote($_GET['K']) . ") "; + } + else { + /* Keyword search (default). */ + $count = 0; + $q_keywords = ""; + $op = ""; + + foreach (str_getcsv($_GET['K'], ' ') as $term) { + if ($term == "") { + continue; + } + if ($count > 0 && strtolower($term) == "and") { + $op = "AND "; + continue; + } + if ($count > 0 && strtolower($term) == "or") { + $op = "OR "; + continue; + } + if ($count > 0 && strtolower($term) == "not") { + $op .= "NOT "; + continue; + } + + $term = "%" . addcslashes($term, '%_') . "%"; + $q_keywords .= $op . " (Packages.Name LIKE " . $dbh->quote($term) . " OR "; + $q_keywords .= "Description LIKE " . $dbh->quote($term) . " OR "; + $q_keywords .= "EXISTS (SELECT * FROM PackageKeywords WHERE "; + $q_keywords .= "PackageKeywords.PackageBaseID = Packages.PackageBaseID AND "; + $q_keywords .= "PackageKeywords.Keyword LIKE " . $dbh->quote($term) . ")) "; + + $count++; + if ($count >= 20) { + break; + } + $op = "AND "; + } + + if (!empty($q_keywords)) { + $q_where .= "AND (" . $q_keywords . ") "; + } + } + } + + if (isset($_GET["do_Orphans"])) { + $q_where .= "AND MaintainerUID IS NULL "; + } + + if (isset($_GET['outdated'])) { + if ($_GET['outdated'] == 'on') { + $q_where .= "AND OutOfDateTS IS NOT NULL "; + } + elseif ($_GET['outdated'] == 'off') { + $q_where .= "AND OutOfDateTS IS NULL "; + } + } + + $order = (isset($_GET["SO"]) && $_GET["SO"] == 'd') ? 'DESC' : 'ASC'; + + $q_sort = "ORDER BY "; + $sort_by = isset($_GET["SB"]) ? $_GET["SB"] : ''; + switch ($sort_by) { + case 'v': + $q_sort .= "NumVotes " . $order . ", "; + break; + case 'p': + $q_sort .= "Popularity " . $order . ", "; + break; + case 'w': + if ($SID) { + $q_sort .= "Voted " . $order . ", "; + } + break; + case 'o': + if ($SID) { + $q_sort .= "Notify " . $order . ", "; + } + break; + case 'm': + $q_sort .= "Maintainer " . $order . ", "; + break; + case 'a': + $q_sort .= "-ModifiedTS " . $order . ", "; + break; + default: + break; + } + $q_sort .= " Packages.Name " . $order . " "; + + $q_limit = "LIMIT ".$_GET["PP"]." OFFSET ".$_GET["O"]; + + $q = $q_select . $q_from . $q_from_extra . $q_where . $q_sort . $q_limit; + $q_total = "SELECT COUNT(*) " . $q_from . $q_where; + + $result = $dbh->query($q); + $result_t = $dbh->query($q_total); + if ($result_t) { + $row = $result_t->fetch(PDO::FETCH_NUM); + $total = $row[0]; + } + else { + $total = 0; + } + + if ($result && $total > 0) { + if (isset($_GET["SO"]) && $_GET["SO"] == "d"){ + $SO_next = "a"; + } + else { + $SO_next = "d"; + } + } + + /* Calculate the results to use. */ + $first = $_GET['O'] + 1; + + /* Calculation of pagination links. */ + $per_page = ($_GET['PP'] > 0) ? $_GET['PP'] : 50; + $current = ceil($first / $per_page); + $pages = ceil($total / $per_page); + $templ_pages = array(); + + if ($current > 1) { + $templ_pages['« ' . __('First')] = 0; + $templ_pages['‹ ' . __('Previous')] = ($current - 2) * $per_page; + } + + if ($current - 5 > 1) + $templ_pages["..."] = false; + + for ($i = max($current - 5, 1); $i <= min($pages, $current + 5); $i++) { + $templ_pages[$i] = ($i - 1) * $per_page; + } + + if ($current + 5 < $pages) + $templ_pages["... "] = false; + + if ($current < $pages) { + $templ_pages[__('Next') . ' ›'] = $current * $per_page; + $templ_pages[__('Last') . ' »'] = ($pages - 1) * $per_page; + } + + include('pkg_search_form.php'); + + if ($result) { + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $searchresults[] = $row; + } + } + + include('pkg_search_results.php'); + + return; +} + +/** + * Determine if a POST string has been sent by a visitor + * + * @param string $action String to check has been sent via POST + * + * @return bool True if the POST string was used, otherwise false + */ +function current_action($action) { + return (isset($_POST['action']) && $_POST['action'] == $action) || + isset($_POST[$action]); +} + +/** + * Determine if sent IDs are valid integers + * + * @param array $ids IDs to validate + * + * @return array All sent IDs that are valid integers + */ +function sanitize_ids($ids) { + $new_ids = array(); + foreach ($ids as $id) { + $id = intval($id); + if ($id > 0) { + $new_ids[] = $id; + } + } + return $new_ids; +} + +/** + * Add package information to the database for a specific package + * + * @param int $base_id ID of the package base + * @param string $pkgname Name of the new package + * @param string $pkgver Version of the new package + * @param string $pkgdesc Description of the new package + * @param string $pkgurl Upstream URL for the new package + * + * @return int ID of the new package + */ +function pkg_create($base_id, $pkgname, $pkgver, $pkgdesc, $pkgurl) { + $dbh = DB::connect(); + $q = sprintf("INSERT INTO Packages (PackageBaseID, Name, Version, " . + "Description, URL) VALUES (%d, %s, %s, %s, %s)", + $base_id, $dbh->quote($pkgname), $dbh->quote($pkgver), + $dbh->quote($pkgdesc), $dbh->quote($pkgurl)); + $dbh->exec($q); + return $dbh->lastInsertId(); +} + +/** + * Add a dependency for a specific package to the database + * + * @param int $pkgid The package ID to add the dependency for + * @param string $type The type of dependency to add + * @param string $depname The name of the dependency to add + * @param string $depcondition The type of dependency for the package + * @param string $deparch The architecture of the dependency to add + * + * @return void + */ +function pkg_add_dep($pkgid, $type, $depname, $depcondition, $deparch) { + $dbh = DB::connect(); + $q = sprintf("INSERT INTO PackageDepends (PackageID, DepTypeID, DepName, DepCondition, DepArch) VALUES (%d, %d, %s, %s, %s)", + $pkgid, + pkg_dependency_type_id_from_name($type), + $dbh->quote($depname), + $dbh->quote($depcondition), + $deparch ? $dbh->quote($deparch) : 'NULL' + ); + $dbh->exec($q); +} + +/** + * Add a relation for a specific package to the database + * + * @param int $pkgid The package ID to add the relation for + * @param string $type The type of relation to add + * @param string $relname The name of the relation to add + * @param string $relcondition The version requirement of the relation + * @param string $relarch The architecture of the relation to add + * + * @return void + */ +function pkg_add_rel($pkgid, $type, $relname, $relcondition, $relarch) { + $dbh = DB::connect(); + $q = sprintf("INSERT INTO PackageRelations (PackageID, RelTypeID, RelName, RelCondition, RelArch) VALUES (%d, %d, %s, %s, %s)", + $pkgid, + pkg_relation_type_id_from_name($type), + $dbh->quote($relname), + $dbh->quote($relcondition), + $relarch ? $dbh->quote($relarch) : 'NULL' + ); + $dbh->exec($q); +} + +/** + * Add a source for a specific package to the database + * + * @param int $pkgid The package ID to add the source for + * @param string $pkgsrc The package source to add to the database + * @param string $srcarch The architecture of the source to add + * + * @return void + */ +function pkg_add_src($pkgid, $pkgsrc, $srcarch) { + $dbh = DB::connect(); + $q = sprintf("INSERT INTO PackageSources (PackageID, Source, SourceArch) VALUES (%d, %s, %s)", + $pkgid, + $dbh->quote($pkgsrc), + $srcarch ? $dbh->quote($srcarch) : 'NULL' + ); + $dbh->exec($q); +} + +/** + * Creates a new group and returns its ID + * + * If the groups already exists, the ID of the already existing group is + * returned. + * + * @param string $name The name of the group to create + * + * @return int The ID of the group + */ +function pkg_create_group($name) { + $dbh = DB::connect(); + $q = sprintf("SELECT ID FROM Groups WHERE Name = %s", $dbh->quote($name)); + $result = $dbh->query($q); + if ($result) { + $grpid = $result->fetch(PDO::FETCH_COLUMN, 0); + if ($grpid > 0) { + return $grpid; + } + } + + $q = sprintf("INSERT INTO Groups (Name) VALUES (%s)", $dbh->quote($name)); + $dbh->exec($q); + return $dbh->lastInsertId(); +} + +/** + * Add a package to a group + * + * @param int $pkgid The package ID of the package to add + * @param int $grpid The group ID of the group to add the package to + * + * @return void + */ +function pkg_add_grp($pkgid, $grpid) { + $dbh = DB::connect(); + $q = sprintf("INSERT INTO PackageGroups (PackageID, GroupID) VALUES (%d, %d)", + $pkgid, + $grpid + ); + $dbh->exec($q); +} + +/** + * Creates a new license and returns its ID + * + * If the license already exists, the ID of the already existing license is + * returned. + * + * @param string $name The name of the license to create + * + * @return int The ID of the license + */ +function pkg_create_license($name) { + $dbh = DB::connect(); + $q = sprintf("SELECT ID FROM Licenses WHERE Name = %s", $dbh->quote($name)); + $result = $dbh->query($q); + if ($result) { + $licid = $result->fetch(PDO::FETCH_COLUMN, 0); + if ($licid > 0) { + return $licid; + } + } + + $q = sprintf("INSERT INTO Licenses (Name) VALUES (%s)", $dbh->quote($name)); + $dbh->exec($q); + return $dbh->lastInsertId(); +} + +/** + * Add a license to a package + * + * @param int $pkgid The package ID of the package + * @param int $grpid The ID of the license to add + * + * @return void + */ +function pkg_add_lic($pkgid, $licid) { + $dbh = DB::connect(); + $q = sprintf("INSERT INTO PackageLicenses (PackageID, LicenseID) VALUES (%d, %d)", + $pkgid, + $licid + ); + $dbh->exec($q); +} + +/** + * Determine package information for latest package + * + * @param int $numpkgs Number of packages to get information on + * + * @return array $packages Package info for the specified number of recent packages + */ +function latest_pkgs($numpkgs) { + $dbh = DB::connect(); + + $q = "SELECT Packages.*, MaintainerUID, SubmittedTS "; + $q.= "FROM Packages LEFT JOIN PackageBases ON "; + $q.= "PackageBases.ID = Packages.PackageBaseID "; + $q.= "ORDER BY SubmittedTS DESC "; + $q.= "LIMIT " . intval($numpkgs); + $result = $dbh->query($q); + + $packages = array(); + if ($result) { + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $packages[] = $row; + } + } + + return $packages; +} diff --git a/web/lib/pkgreqfuncs.inc.php b/web/lib/pkgreqfuncs.inc.php new file mode 100644 index 00000000..c056d681 --- /dev/null +++ b/web/lib/pkgreqfuncs.inc.php @@ -0,0 +1,337 @@ +query($q)->fetchColumn(); +} + +/** + * Get a list of all package requests + * + * @param int $offset The index of the first request to return + * @param int $limit The maximum number of requests to return + * + * @return array List of pacakge requests with details + */ +function pkgreq_list($offset, $limit) { + $dbh = DB::connect(); + + $q = "SELECT PackageRequests.ID, "; + $q.= "PackageRequests.PackageBaseID AS BaseID, "; + $q.= "PackageRequests.PackageBaseName AS Name, "; + $q.= "PackageRequests.MergeBaseName AS MergeInto, "; + $q.= "RequestTypes.Name AS Type, PackageRequests.Comments, "; + $q.= "Users.Username AS User, PackageRequests.RequestTS, "; + $q.= "PackageRequests.Status, PackageRequests.Status = 0 AS Open "; + $q.= "FROM PackageRequests INNER JOIN RequestTypes ON "; + $q.= "RequestTypes.ID = PackageRequests.ReqTypeID "; + $q.= "INNER JOIN Users ON Users.ID = PackageRequests.UsersID "; + $q.= "ORDER BY Open DESC, RequestTS DESC "; + $q.= "LIMIT " . $limit . " OFFSET " . $offset; + + return $dbh->query($q)->fetchAll(); +} + +/** + * Get a list of all open package requests belonging to a certain package base + * + * @param int $baseid The package base ID to retrieve requests for + * @param int $type The type of requests to obtain + * + * @return array List of package request IDs + */ +function pkgreq_by_pkgbase($baseid, $type=false) { + $dbh = DB::connect(); + + $q = "SELECT PackageRequests.ID "; + $q.= "FROM PackageRequests INNER JOIN RequestTypes ON "; + $q.= "RequestTypes.ID = PackageRequests.ReqTypeID "; + $q.= "WHERE PackageRequests.Status = 0 "; + $q.= "AND PackageRequests.PackageBaseID = " . intval($baseid); + + if ($type) { + $q .= " AND RequestTypes.Name = " . $dbh->quote($type); + } + + return $dbh->query($q)->fetchAll(PDO::FETCH_COLUMN, 0); +} + +/** + * Obtain the package base that belongs to a package request. + * + * @param int $id Package request ID to retrieve the package base for + * + * @return int The name of the corresponding package base + */ +function pkgreq_get_pkgbase_name($id) { + $dbh = DB::connect(); + + $q = "SELECT PackageBaseName FROM PackageRequests "; + $q.= "WHERE ID = " . intval($id); + $result = $dbh->query($q); + return $result->fetch(PDO::FETCH_COLUMN, 0); +} + +/** + * Obtain the email address of the creator of a package request + * + * @param int $id Package request ID to retrieve the creator for + * + * @return int The email address of the creator + */ +function pkgreq_get_creator_email($id) { + $dbh = DB::connect(); + + $q = "SELECT Email FROM Users INNER JOIN PackageRequests "; + $q.= "ON Users.ID = PackageRequests.UsersID "; + $q.= "WHERE PackageRequests.ID = " . intval($id); + $result = $dbh->query($q); + return $result->fetch(PDO::FETCH_COLUMN, 0); +} + +/** + * File a deletion/orphan request against a package base + * + * @param string $ids The package base IDs to file the request against + * @param string $type The type of the request + * @param string $merge_into The target of a merge operation + * @param string $comments The comments to be added to the request + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgreq_file($ids, $type, $merge_into, $comments) { + if (!has_credential(CRED_PKGREQ_FILE)) { + return array(false, __("You must be logged in to file package requests.")); + } + + if (!empty($merge_into) && !preg_match("/^[a-z0-9][a-z0-9\.+_-]*$/D", $merge_into)) { + return array(false, __("Invalid name: only lowercase letters are allowed.")); + } + + if (!empty($merge_into) && !pkgbase_from_name($merge_into)) { + return array(false, __("Cannot find package to merge votes and comments into.")); + } + + if (empty($comments)) { + return array(false, __("The comment field must not be empty.")); + } + + $dbh = DB::connect(); + $uid = uid_from_sid($_COOKIE["AURSID"]); + + /* TODO: Allow for filing multiple requests at once. */ + $base_id = intval($ids[0]); + $pkgbase_name = pkgbase_name_from_id($base_id); + + if ($merge_into == $pkgbase_name) { + return array(false, __("Cannot merge a package base with itself.")); + } + + $q = "SELECT ID FROM RequestTypes WHERE Name = " . $dbh->quote($type); + $result = $dbh->query($q); + if ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $type_id = $row['ID']; + } else { + return array(false, __("Invalid request type.")); + } + + $q = "INSERT INTO PackageRequests "; + $q.= "(ReqTypeID, PackageBaseID, PackageBaseName, MergeBaseName, "; + $q.= "UsersID, Comments, RequestTS) VALUES (" . $type_id . ", "; + $q.= $base_id . ", " . $dbh->quote($pkgbase_name) . ", "; + $q.= $dbh->quote($merge_into) . ", " . $uid . ", "; + $q.= $dbh->quote($comments) . ", UNIX_TIMESTAMP())"; + $dbh->exec($q); + $request_id = $dbh->lastInsertId(); + + /* + * Send e-mail notifications. + * TODO: Move notification logic to separate function where it belongs. + */ + $cc = array(pkgreq_get_creator_email($request_id)); + + $q = "SELECT Users.Email "; + $q.= "FROM Users INNER JOIN PackageBases "; + $q.= "ON PackageBases.MaintainerUID = Users.ID "; + $q.= "WHERE PackageBases.ID = " . $base_id; + $result = $dbh->query($q); + if ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $cc[] = $row['Email']; + } + + $q = "SELECT Name FROM PackageBases WHERE ID = " . $base_id; + $result = $dbh->query($q); + $row = $result->fetch(PDO::FETCH_ASSOC); + + /* + * TODO: Add native language emails for users, based on their + * preferences. Simply making these strings translatable won't + * work, users would be getting emails in the language that the + * user who posted the comment was in. + */ + $username = username_from_sid($_COOKIE['AURSID']); + if ($type == 'merge') { + $body = + $username . " [1] filed a request to merge " . + $row['Name'] . " [2] into " . $merge_into . + " [3]:\n\n" . $comments . "\n\n" . + "[1] " . get_user_uri($username, true) . "\n" . + "[2] " . get_pkgbase_uri($row['Name'], true) . "\n" . + "[3] " . get_pkgbase_uri($merge_into, true) . "\n"; + } else { + $body = + $username . " [1] filed a " . $type . " request for " . + $row['Name'] . " [2]:\n\n" . $comments . "\n\n" . + "[1] " . get_user_uri($username, true) . "\n" . + "[2] " . get_pkgbase_uri($row['Name'], true) . "\n"; + } + $body = wordwrap($body, 70); + $cc = array_unique($cc); + $headers = "MIME-Version: 1.0\r\n" . + "Content-type: text/plain; charset=UTF-8\r\n" . + "Cc: " . implode(', ', $cc) . "\r\n"; + $thread_id = ""; + $headers .= "From: notify@aur.archlinux.org\r\n" . + "Message-ID: $thread_id\r\n" . + "X-Mailer: AUR"; + $ml = config_get('options', 'aur_request_ml'); + @mail($ml, "[PRQ#" . $request_id . "] " . ucfirst($type) . + " Request for " . $row['Name'], $body, $headers); + + $auto_orphan_age = config_get('options', 'auto_orphan_age'); + $auto_delete_age = config_get('options', 'auto_delete_age'); + $details = pkgbase_get_details($base_id); + if ($type == 'orphan' && $details['OutOfDateTS'] > 0 && + time() - $details['OutOfDateTS'] >= $auto_orphan_age && + $auto_orphan_age > 0) { + /* + * Close package request. NOTE: This needs to happen *before* + * the actual disown operation. Otherwise, the former + * maintainer will not be included in the Cc list of the + * request notification email. + */ + $out_of_date_time = gmdate("Y-m-d", intval($details["OutOfDateTS"])); + pkgreq_close($request_id, "accepted", + "The package base has been flagged out-of-date " . + "since " . $out_of_date_time . ".", true); + $q = "UPDATE PackageBases SET MaintainerUID = NULL "; + $q.= "WHERE ID = " . $base_id; + $dbh->exec($q); + } else if ($type == 'deletion' && $details['MaintainerUID'] == $uid && + $details['SubmittedTS'] > 0 && $auto_delete_age > 0 && + time() - $details['SubmittedTS'] <= $auto_delete_age) { + /* + * Close package request. NOTE: This needs to happen *before* + * the actual deletion operation. Otherwise, the former + * maintainer will not be included in the Cc list of the + * request notification email. + */ + pkgreq_close($request_id, "accepted", + "Deletion of a fresh package requested by its " . + "current maintainer.", true); + pkgbase_delete(array($base_id), NULL, NULL, true); + } + + return array(true, __("Added request successfully.")); +} + +/** + * Close a deletion/orphan request + * + * @param int $id The package request to close + * @param string $reason Whether the request was accepted or rejected + * @param string $comments Comments to be added to the notification email + * @param boolean $auto_close (optional) Whether the request is auto-closed + * + * @return array Tuple of success/failure indicator and error message + */ +function pkgreq_close($id, $reason, $comments, $auto_close=false) { + switch ($reason) { + case 'accepted': + $status = 2; + break; + case 'rejected': + $status = 3; + break; + default: + return array(false, __("Invalid reason.")); + } + + $dbh = DB::connect(); + $id = intval($id); + + if (!$auto_close && !has_credential(CRED_PKGREQ_CLOSE)) { + return array(false, __("Only TUs and developers can close requests.")); + } + + $q = "UPDATE PackageRequests SET Status = " . intval($status) . " "; + $q.= "WHERE ID = " . intval($id); + $dbh->exec($q); + + /* + * Send e-mail notifications. + * TODO: Move notification logic to separate function where it belongs. + */ + $cc = array(pkgreq_get_creator_email($id)); + + $q = "SELECT Users.Email "; + $q.= "FROM Users INNER JOIN PackageBases "; + $q.= "ON PackageBases.MaintainerUID = Users.ID "; + $q.= "INNER JOIN PackageRequests "; + $q.= "ON PackageRequests.PackageBaseID = PackageBases.ID "; + $q.= "WHERE PackageRequests.ID = " . $id; + $result = $dbh->query($q); + if ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $cc[] = $row['Email']; + } + + /* + * TODO: Add native language emails for users, based on their + * preferences. Simply making these strings translatable won't + * work, users would be getting emails in the language that the + * user who posted the comment was in. + */ + if ($auto_close) { + $body = "Request #" . intval($id) . " has been " . $reason . + " automatically by the Arch User Repository package " . + "request system"; + } else { + $username = username_from_sid($_COOKIE['AURSID']); + $body = "Request #" . intval($id) . " has been " . $reason . + " by " . $username . " [1]"; + } + if (!empty(trim($comments))) { + $body .= ":\n\n" . $comments . "\n"; + } else { + $body .= ".\n"; + } + if (!$auto_close) { + $body .= "\n"; + $body .= "[1] " . get_user_uri($username, true); + $body .= "\n"; + } + $body = wordwrap($body, 70); + $cc = array_unique($cc); + $headers = "MIME-Version: 1.0\r\n" . + "Content-type: text/plain; charset=UTF-8\r\n" . + "Cc: " . implode(', ', $cc) . "\r\n"; + $thread_id = ""; + $headers .= "From: notify@aur.archlinux.org\r\n" . + "In-Reply-To: $thread_id\r\n" . + "References: $thread_id\r\n" . + "X-Mailer: AUR"; + $ml = config_get('options', 'aur_request_ml'); + @mail($ml, "[PRQ#" . $id . "] Request " . ucfirst($reason), + $body, $headers); + + return array(true, __("Request closed successfully.")); +} diff --git a/web/lib/routing.inc.php b/web/lib/routing.inc.php new file mode 100644 index 00000000..8c45c626 --- /dev/null +++ b/web/lib/routing.inc.php @@ -0,0 +1,83 @@ + 'home.php', + '/index.php' => 'home.php', + '/packages' => 'packages.php', + '/pkgbase' => 'pkgbase.php', + '/requests' => 'pkgreq.php', + '/register' => 'register.php', + '/account' => 'account.php', + '/accounts' => 'account.php', + '/login' => 'login.php', + '/logout' => 'logout.php', + '/passreset' => 'passreset.php', + '/rpc' => 'rpc.php', + '/rss' => 'rss.php', + '/tu' => 'tu.php', + '/addvote' => 'addvote.php', +); + +$PKG_PATH = '/packages'; +$PKGBASE_PATH = '/pkgbase'; +$PKGREQ_PATH = '/requests'; +$USER_PATH = '/account'; + +function get_route($path) { + global $ROUTES; + + $path = rtrim($path, '/'); + if (isset($ROUTES[$path])) { + return $ROUTES[$path]; + } else { + return NULL; + } +} + +function get_uri($path, $absolute=false) { + if ($absolute) { + return rtrim(aur_location(), '/') . $path; + } else { + return $path; + } +} + +function get_pkg_route() { + global $PKG_PATH; + return $PKG_PATH; +} + +function get_pkgbase_route() { + global $PKGBASE_PATH; + return $PKGBASE_PATH; +} + +function get_pkgreq_route() { + global $PKGREQ_PATH; + return $PKGREQ_PATH; +} + +function get_pkg_uri($pkgname, $absolute=false) { + global $PKG_PATH; + $path = $PKG_PATH . '/' . urlencode($pkgname) . '/'; + return get_uri($path, $absolute); +} + +function get_pkgbase_uri($pkgbase_name, $absolute=false) { + global $PKGBASE_PATH; + $path = $PKGBASE_PATH . '/' . urlencode($pkgbase_name) . '/'; + return get_uri($path, $absolute); +} + +function get_user_route() { + global $USER_PATH; + return $USER_PATH; +} + +function get_user_uri($username, $absolute=false) { + global $USER_PATH; + $path = $USER_PATH . '/' . urlencode($username) . '/'; + return get_uri($path, $absolute); +} diff --git a/web/lib/stats.inc.php b/web/lib/stats.inc.php new file mode 100644 index 00000000..52637be5 --- /dev/null +++ b/web/lib/stats.inc.php @@ -0,0 +1,103 @@ +query($q); + + $newest_packages = new ArrayObject(); + while ($row = $result->fetch(PDO::FETCH_ASSOC)) { + $newest_packages->append($row); + } + set_cache_value($key, $newest_packages); + } + include('stats/updates_table.php'); +} + +/** + * Display a user's statistics table + * + * @param string $userid The user ID of the person to get package statistics for + * + * @return void + */ +function user_table($userid) { + $base_q = "SELECT COUNT(*) FROM PackageBases "; + $base_q.= "WHERE MaintainerUID = " . $userid . " "; + $base_q.= "AND PackagerUID IS NOT NULL"; + + $maintainer_unsupported_count = db_cache_value($base_q, + 'user_unsupported_count:' . $userid); + + $q = "SELECT COUNT(*) FROM PackageBases "; + $q.= "WHERE OutOfDateTS IS NOT NULL "; + $q.= "AND MaintainerUID = " . $userid . " "; + $q.= "AND PackagerUID IS NOT NULL"; + + $flagged_outdated = db_cache_value($q, 'user_flagged_outdated:' . $userid); + + include('stats/user_table.php'); +} + +/** + * Display the general package statistics table + * + * @return void + */ +function general_stats_table() { + # AUR statistics + $q = "SELECT COUNT(*) FROM PackageBases WHERE PackagerUID IS NOT NULL"; + $unsupported_count = db_cache_value($q, 'unsupported_count'); + + $q = "SELECT COUNT(*) FROM PackageBases "; + $q.= "WHERE MaintainerUID IS NULL "; + $q.= "AND PackagerUID IS NOT NULL"; + $orphan_count = db_cache_value($q, 'orphan_count'); + + $q = "SELECT count(*) FROM Users"; + $user_count = db_cache_value($q, 'user_count'); + + $q = "SELECT count(*) FROM Users,AccountTypes WHERE Users.AccountTypeID = AccountTypes.ID AND (AccountTypes.AccountType = 'Trusted User' OR AccountTypes.AccountType = 'Trusted User & Developer')"; + $tu_count = db_cache_value($q, 'tu_count'); + + $targstamp = intval(strtotime("-7 days")); + $yearstamp = intval(strtotime("-1 year")); + + $q = "SELECT COUNT(*) FROM PackageBases "; + $q.= "WHERE ModifiedTS >= $targstamp "; + $q.= "AND ModifiedTS = SubmittedTS "; + $q.= "AND PackagerUID IS NOT NULL"; + $add_count = db_cache_value($q, 'add_count'); + + $q = "SELECT COUNT(*) FROM PackageBases "; + $q.= "WHERE ModifiedTS >= $targstamp "; + $q.= "AND ModifiedTS != SubmittedTS "; + $q.= "AND PackagerUID IS NOT NULL"; + $update_count = db_cache_value($q, 'update_count'); + + $q = "SELECT COUNT(*) FROM PackageBases "; + $q.= "WHERE ModifiedTS >= $yearstamp "; + $q.= "AND ModifiedTS != SubmittedTS "; + $q.= "AND PackagerUID IS NOT NULL"; + $update_year_count = db_cache_value($q, 'update_year_count'); + + $q = "SELECT COUNT(*) FROM PackageBases "; + $q.= "WHERE ModifiedTS = SubmittedTS "; + $q.= "AND PackagerUID IS NOT NULL"; + $never_update_count = db_cache_value($q, 'never_update_count'); + + include('stats/general_stats_table.php'); +} diff --git a/web/lib/streams.php b/web/lib/streams.php new file mode 100644 index 00000000..3cdc1584 --- /dev/null +++ b/web/lib/streams.php @@ -0,0 +1,167 @@ +. + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + + + // Simple class to wrap file streams, string streams, etc. + // seek is essential, and it should be byte stream +class StreamReader { + // should return a string [FIXME: perhaps return array of bytes?] + function read($bytes) { + return false; + } + + // should return new position + function seekto($position) { + return false; + } + + // returns current position + function currentpos() { + return false; + } + + // returns length of entire stream (limit for seekto()s) + function length() { + return false; + } +}; + +class StringReader { + var $_pos; + var $_str; + + function StringReader($str='') { + $this->_str = $str; + $this->_pos = 0; + } + + function read($bytes) { + $data = substr($this->_str, $this->_pos, $bytes); + $this->_pos += $bytes; + if (strlen($this->_str)<$this->_pos) + $this->_pos = strlen($this->_str); + + return $data; + } + + function seekto($pos) { + $this->_pos = $pos; + if (strlen($this->_str)<$this->_pos) + $this->_pos = strlen($this->_str); + return $this->_pos; + } + + function currentpos() { + return $this->_pos; + } + + function length() { + return strlen($this->_str); + } + +}; + + +class FileReader { + var $_pos; + var $_fd; + var $_length; + + function FileReader($filename) { + if (file_exists($filename)) { + + $this->_length=filesize($filename); + $this->_pos = 0; + $this->_fd = fopen($filename,'rb'); + if (!$this->_fd) { + $this->error = 3; // Cannot read file, probably permissions + return false; + } + } else { + $this->error = 2; // File doesn't exist + return false; + } + } + + function read($bytes) { + if ($bytes) { + fseek($this->_fd, $this->_pos); + + // PHP 5.1.1 does not read more than 8192 bytes in one fread() + // the discussions at PHP Bugs suggest it's the intended behaviour + $data = ''; + while ($bytes > 0) { + $chunk = fread($this->_fd, $bytes); + $data .= $chunk; + $bytes -= strlen($chunk); + } + $this->_pos = ftell($this->_fd); + + return $data; + } else return ''; + } + + function seekto($pos) { + fseek($this->_fd, $pos); + $this->_pos = ftell($this->_fd); + return $this->_pos; + } + + function currentpos() { + return $this->_pos; + } + + function length() { + return $this->_length; + } + + function close() { + fclose($this->_fd); + } + +}; + +// Preloads entire file in memory first, then creates a StringReader +// over it (it assumes knowledge of StringReader internals) +class CachedFileReader extends StringReader { + function CachedFileReader($filename) { + if (file_exists($filename)) { + + $length=filesize($filename); + $fd = fopen($filename,'rb'); + + if (!$fd) { + $this->error = 3; // Cannot read file, probably permissions + return false; + } + $this->_str = fread($fd, $length); + fclose($fd); + + } else { + $this->error = 2; // File doesn't exist + return false; + } + } +}; + + +?> diff --git a/web/lib/translator.inc.php b/web/lib/translator.inc.php new file mode 100644 index 00000000..d53bd530 --- /dev/null +++ b/web/lib/translator.inc.php @@ -0,0 +1,137 @@ +", ""); + +include_once("confparser.inc.php"); +include_once('DB.class.php'); +include_once('gettext.php'); +include_once('streams.php'); + +global $streamer, $l10n; + +# Languages we have translations for +$SUPPORTED_LANGS = array( + "ar" => "العربية", + "ast" => "Asturianu", + "ca" => "Català", + "cs" => "Český", + "da" => "Dansk", + "de" => "Deutsch", + "en" => "English", + "el" => "Ελληνικά", + "es" => "Español", + "es_419" => "Español (Latinoamérica)", + "fi" => "Finnish", + "fr" => "Français", + "he" => "עברית", + "hr" => "Hrvatski", + "hu" => "Magyar", + "it" => "Italiano", + "ja" => "日本語", + "nb" => "Norsk", + "nl" => "Nederlands", + "pl" => "Polski", + "pt_BR" => "Português (Brasil)", + "pt_PT" => "Português (Portugal)", + "ro" => "Română", + "ru" => "Русский", + "sk" => "Slovenčina", + "sr" => "Srpski", + "tr" => "Türkçe", + "uk" => "Українська", + "zh_CN" => "简体中文", + "zh_TW" => "正體中文" +); + +function __() { + global $LANG; + global $l10n; + + # Create the translation. + $args = func_get_args(); + + # First argument is always string to be translated + $tag = array_shift($args); + + # Translate using gettext_reader initialized before. + $translated = $l10n->translate($tag); + $translated = htmlspecialchars($translated, ENT_QUOTES); + + # Subsequent arguments are strings to be formatted + if (count($args) > 0) { + $translated = vsprintf($translated, $args); + } + + return $translated; +} + +function _n($msgid1, $msgid2, $n) { + global $l10n; + + $translated = sprintf($l10n->ngettext($msgid1, $msgid2, $n), $n); + return htmlspecialchars($translated, ENT_QUOTES); +} + +# set up the visitor's language +# +function set_lang() { + global $LANG; + global $SUPPORTED_LANGS; + global $streamer, $l10n; + + $update_cookie = 0; + if (isset($_POST['setlang'])) { + # visitor is requesting a language change + # + $LANG = $_POST['setlang']; + $update_cookie = 1; + + } elseif (isset($_COOKIE['AURLANG'])) { + # If a cookie is set, use that + # + $LANG = $_COOKIE['AURLANG']; + + } elseif (isset($_COOKIE["AURSID"])) { + # No language but a session; use default lang preference + # + $dbh = DB::connect(); + $q = "SELECT LangPreference FROM Users, Sessions "; + $q.= "WHERE Users.ID = Sessions.UsersID "; + $q.= "AND Sessions.SessionID = '"; + $q.= $dbh->quote($_COOKIE["AURSID"]); + $result = $dbh->query($q); + + if ($result) { + $row = $result->fetchAll(); + $LANG = $row[0]; + } + $update_cookie = 1; + } + + # Set $LANG to default if nothing is valid. + if (!array_key_exists($LANG, $SUPPORTED_LANGS)) { + $LANG = config_get('options', 'default_lang'); + } + + if ($update_cookie) { + $timeout = intval(config_get('options', 'persistent_cookie_timeout')); + $cookie_time = time() + $timeout; + setcookie("AURLANG", $LANG, $cookie_time, "/"); + } + + $streamer = new FileReader('../locale/' . $LANG . + '/LC_MESSAGES/aur.mo'); + $l10n = new gettext_reader($streamer, true); + + return; +} + diff --git a/web/lib/version.inc.php b/web/lib/version.inc.php new file mode 100644 index 00000000..f2588bb8 --- /dev/null +++ b/web/lib/version.inc.php @@ -0,0 +1,3 @@ + + ' . htmlspecialchars($username) . '') ?> +

    +

    + ', '') ?> +

    + +
    +
    + + + +
    +
    +

    + +

    + " /> +

    +
    +
    diff --git a/web/template/account_details.php b/web/template/account_details.php new file mode 100644 index 00000000..9282b2c2 --- /dev/null +++ b/web/template/account_details.php @@ -0,0 +1,68 @@ + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    ">
    + +
    + +
    Links:
      +
    • + +
    • + +
    +
    diff --git a/web/template/account_edit_form.php b/web/template/account_edit_form.php new file mode 100644 index 00000000..56bdd454 --- /dev/null +++ b/web/template/account_edit_form.php @@ -0,0 +1,138 @@ + +

    + ', '') ?> +

    + +
    + + + +
    + + + + + +
    +
    +

    + + () +

    + +

    + + +

    + +

    + + + + + + +

    + + + +

    + + /> +

    + + +

    + + () +

    + + +

    + + +

    + +

    + + +

    + + +

    + + +

    + +

    + + +

    + +

    + + +

    + +

    + + +

    +
    + +
    + +

    + + +

    +
    + +
    +

    + + + " />   + + " />   + + " /> +

    +
    +
    diff --git a/web/template/account_search_results.php b/web/template/account_search_results.php new file mode 100644 index 00000000..43f2d1d6 --- /dev/null +++ b/web/template/account_search_results.php @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
    "> + + + + "> + +   + +
    + + + + + + +
    +
    +
    + + + + + + " /> +
    +
    +
    +
    +
    + + + + + + -->" /> +
    +
    +
    + +

    + +

    + + diff --git a/web/template/cgit/footer.html b/web/template/cgit/footer.html new file mode 100644 index 00000000..80481d92 --- /dev/null +++ b/web/template/cgit/footer.html @@ -0,0 +1,6 @@ + diff --git a/static/html/cgit/header.html b/web/template/cgit/header.html similarity index 80% rename from static/html/cgit/header.html rename to web/template/cgit/header.html index c5ef0f6b..0217f2fd 100644 --- a/static/html/cgit/header.html +++ b/web/template/cgit/header.html @@ -6,8 +6,7 @@
  • Packages
  • Forums
  • Wiki
  • -
  • GitLab
  • -
  • Security
  • +
  • Bugs
  • AUR
  • Download
  • diff --git a/web/template/comaintainers_form.php b/web/template/comaintainers_form.php new file mode 100644 index 00000000..050f2550 --- /dev/null +++ b/web/template/comaintainers_form.php @@ -0,0 +1,20 @@ +
    +

    +

    + ', htmlspecialchars($pkgbase_name), ''); ?> +

    +
    +
    + +

    + + +

    +

    + " /> +

    +
    +
    +
    + diff --git a/web/template/footer.php b/web/template/footer.php new file mode 100644 index 00000000..068cc060 --- /dev/null +++ b/web/template/footer.php @@ -0,0 +1,13 @@ + + + + + + + diff --git a/web/template/header.php b/web/template/header.php new file mode 100644 index 00000000..874109a5 --- /dev/null +++ b/web/template/header.php @@ -0,0 +1,80 @@ +'; ?> + + + + AUR (<?= htmlspecialchars($LANG); ?>)<?php if ($title != "") { print " - " . htmlspecialchars($title); } ?> + + + + ' /> + + + + + + + + +
    +
    +
    "> +
    +
    + + +
    +
    +
    +
    +
    +
      +
    • AUR
    • +
    • + +
    • ">
    • + +
    • + + +
    • + +
    • +
    • +
    • + +
    • + +
    • + +
    • + + +
    +
    + + diff --git a/web/template/pkg_comment_form.php b/web/template/pkg_comment_form.php new file mode 100644 index 00000000..8a74dc13 --- /dev/null +++ b/web/template/pkg_comment_form.php @@ -0,0 +1,23 @@ +
    +

    +
    +
    +' . __('Comment has been added.') . '

    '; +} +?> +
    + + +
    +

    + +

    +

    + " /> +

    +
    +
    +
    + diff --git a/web/template/pkg_comments.php b/web/template/pkg_comments.php new file mode 100644 index 00000000..3e99d9b3 --- /dev/null +++ b/web/template/pkg_comments.php @@ -0,0 +1,63 @@ + +
    +

    + + +

    + + + {$row['UserName']}"; + endif; ?> + class="comment-deleted"> + +
    +
    + + + + +
    + + + + + +
    + + + + + + + + () + + + +

    +
    +

    + +

    +
    + +
    + + 10 && !isset($_GET['comments'])): ?> +
    +

    + +

    +
    + diff --git a/web/template/pkg_details.php b/web/template/pkg_details.php new file mode 100644 index 00000000..ae8d0848 --- /dev/null +++ b/web/template/pkg_details.php @@ -0,0 +1,300 @@ + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0): +?> + + + + + + 0): ?> + + + + + + 0): ?> + + + + + + 0): ?> + + + + + + 0): ?> + + + + + + 0): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + () + +
    + +
    + +
    +
    + + + + + "/> + +
    +
    +' . htmlspecialchars($kw) . "\n"; + } +endif; +?> +
    + + + + , + + + + + +
    + + + + , + + + + + +
    + + + + , + + + + + +
    + + + + , + + + + + +
    + + + + , + + + + + +
    + +
    +
    +

    + 0): ?> +
      + +
    • + +
    + +
    +
    +

    + 0): ?> +
      + +
    • + +
    + +
    +
    +

    +
    + 0): ?> +
    +
      + +
    • + +
    +
    + +
    +
    diff --git a/web/template/pkg_search_form.php b/web/template/pkg_search_form.php new file mode 100644 index 00000000..2d03cfa5 --- /dev/null +++ b/web/template/pkg_search_form.php @@ -0,0 +1,117 @@ + __('Name, Description'), + 'n' => __('Name Only'), + 'b' => __('Package Base'), + 'N' => __('Exact Name'), + 'B' => __('Exact Package Base'), + 'm' => __('Maintainer'), + 's' => __('Submitter') +); + +$outdated_flags = array( + '' => __('All'), + 'on' => __('Flagged'), + 'off' => __('Not Flagged') +); + +$sortby = array( + 'n' => __('Name'), + 'v' => __('Votes'), + 'p' => __('Popularity'), + 'w' => __('Voted'), + 'o' => __('Notify'), + 'm' => __('Maintainer'), + 'a' => __('Age') +); + +$orderby = array( + 'a' => __('Ascending'), + 'd' => __('Descending') +); + +$per_page = array(50, 100, 250); +?> + + diff --git a/web/template/pkg_search_results.php b/web/template/pkg_search_results.php new file mode 100644 index 00000000..cce533c3 --- /dev/null +++ b/web/template/pkg_search_results.php @@ -0,0 +1,133 @@ + +

    + +

    + +
    +
    +

    + + +

    + 1): ?> +

    + $pagestart): ?> + + + + + + + + +

    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + class="flagged"> + + + + + + + + + + + + +
     ?
    ]" value="1" />"> + + + + + + + + + + + + + + + + + +
    + +
    +

    + + +

    + 1): ?> +

    + $pagestart): ?> + + + + + + + + +

    + +
    + + +

    + + + + + + + + " /> +

    + +
    +
    + diff --git a/web/template/pkgbase_actions.php b/web/template/pkgbase_actions.php new file mode 100644 index 00000000..61ad18f5 --- /dev/null +++ b/web/template/pkgbase_actions.php @@ -0,0 +1,49 @@ + diff --git a/web/template/pkgbase_details.php b/web/template/pkgbase_details.php new file mode 100644 index 00000000..667b3f77 --- /dev/null +++ b/web/template/pkgbase_details.php @@ -0,0 +1,131 @@ + +
    +

    + + + + + + + + + 0): +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + () + +
    + +
    + +
    +
    + + + + + "/> + +
    +
    +' . htmlspecialchars($kw) . "\n"; + } +endif; +?> +
    + +
    +
    +

    + 0): ?> +
      + +
    • + +
    + +
    +
    +
    diff --git a/web/template/pkgreq_close_form.php b/web/template/pkgreq_close_form.php new file mode 100644 index 00000000..00efafef --- /dev/null +++ b/web/template/pkgreq_close_form.php @@ -0,0 +1,32 @@ +
    +

    +

    + ', htmlspecialchars($pkgbase_name), ''); ?> +

    +

    + : + +

    +
    +
    + + +

    + + +

    +

    + + +

    +

    + " /> +

    +
    +
    +
    + diff --git a/web/template/pkgreq_form.php b/web/template/pkgreq_form.php new file mode 100644 index 00000000..623c2472 --- /dev/null +++ b/web/template/pkgreq_form.php @@ -0,0 +1,65 @@ +
    +

    +

    + ', htmlspecialchars($pkgbase_name), ''); ?> +

    +
      + +
    • + +
    +
    +
    + + + +

    + + +

    + + + +

    + + +

    +

    + + +

    +

    + " /> +

    +
    +
    +
    diff --git a/web/template/pkgreq_results.php b/web/template/pkgreq_results.php new file mode 100644 index 00000000..24ee877a --- /dev/null +++ b/web/template/pkgreq_results.php @@ -0,0 +1,129 @@ +
    +
    +

    + + +

    + 1): ?> +

    + $pagestart): ?> + + + + + + + + +

    + +
    + + + + + + + + + + + + + + + + $idle_time); + if (!$due) { + $time_left = $idle_time - (time() - intval($row['RequestTS'])); + if ($time_left > 48 * 3600) { + $time_left_fmt = __("~%d days left", round($time_left / (24 * 3600))); + } elseif ($time_left > 3600) { + $time_left_fmt = _n("~%d hour left", "~%d hours left", round($time_left / 3600)); + } else { + $time_left_fmt = __("<1 hour left"); + } + } + ?> + + + + + + + + + + + + + + class="flagged"> + + + + + + + + + + + + + + + + + +
    "> + + + () + + + + + + + +
    + + +
    + +
    + + + +
    + + () +
    + + + +
    + +
    +

    + + +

    + 1): ?> +

    + $pagestart): ?> + + + + + + + + +

    + +
    +
    diff --git a/web/template/search_accounts_form.php b/web/template/search_accounts_form.php new file mode 100644 index 00000000..f7824a94 --- /dev/null +++ b/web/template/search_accounts_form.php @@ -0,0 +1,52 @@ +
    +
    +
    + +
    +
    +

    + + +

    +

    + + +

    +

    + + +

    +

    + + +

    +

    + + +

    +

    + + +

    +

    + + +

    +

    + + " />   + " /> +

    +
    +
    diff --git a/web/template/stats/general_stats_table.php b/web/template/stats/general_stats_table.php new file mode 100644 index 00000000..5b598321 --- /dev/null +++ b/web/template/stats/general_stats_table.php @@ -0,0 +1,36 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/web/template/stats/updates_table.php b/web/template/stats/updates_table.php new file mode 100644 index 00000000..a4b31c51 --- /dev/null +++ b/web/template/stats/updates_table.php @@ -0,0 +1,23 @@ +

    + +RSS Feed + + + + getIterator() as $row): ?> + + + + + + + +
    + " title=""> + + + New! + + + +
    diff --git a/web/template/stats/user_table.php b/web/template/stats/user_table.php new file mode 100644 index 00000000..284d5b9e --- /dev/null +++ b/web/template/stats/user_table.php @@ -0,0 +1,21 @@ + + +

    + + + + + + + + + + +
    + + +
    + +
    diff --git a/web/template/template.phps b/web/template/template.phps new file mode 100644 index 00000000..4f8117c8 --- /dev/null +++ b/web/template/template.phps @@ -0,0 +1,20 @@ +\n"; + + +html_footer(AURWEB_VERSION); + diff --git a/web/template/tu_details.php b/web/template/tu_details.php new file mode 100644 index 00000000..38f6c0d0 --- /dev/null +++ b/web/template/tu_details.php @@ -0,0 +1,123 @@ + 0) { + $participation = $total / $active_tus; +} else { + $participation = 0; +} + +if ($yes > $active_tus / 2) { + $vote_accepted = true; +} elseif ($participation > $quorum && $yes > $no) { + $vote_accepted = true; +} else { + $vote_accepted = false; +} +?> +
    +

    + + +

    + +

    + + +

    + : + + + + + N/A + + +
    + +
    + : + + +
    + : + + + + + + + + +

    + +

    + \n", htmlspecialchars($row['Agenda'])) ?> +

    + + + + + + + + + + + + + + + + + + + + + 0): ?> + + + + + +
    + + + + + + %
    +
    + + +
    +

    +
      + +
    • + +
    +
    + + +
    + + +
    +
    + " /> + " /> + " /> + + +
    +
    + + +
    diff --git a/web/template/tu_last_votes_list.php b/web/template/tu_last_votes_list.php new file mode 100644 index 00000000..5cff248c --- /dev/null +++ b/web/template/tu_last_votes_list.php @@ -0,0 +1,36 @@ +
    +

    + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    diff --git a/web/template/tu_list.php b/web/template/tu_list.php new file mode 100644 index 00000000..b3e1073a --- /dev/null +++ b/web/template/tu_list.php @@ -0,0 +1,82 @@ +
    +

    + + +
      +
    • +
    + + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    + +
    +

    + + 0 && $off != 0): + $back = (($off - $limit) <= 0) ? 0 : $off - $limit; ?> + ?off=&by='>‹ + + + + + +

    + +