Compare commits
1 commit
develop
...
feature/sl
Author | SHA1 | Date | |
---|---|---|---|
![]() |
8b79aa375a |
5
.clabot
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"contributors": "https://api.github.com/repos/photoprism/photoprism/contributors",
|
||||
"message": "Thank you very much for your contribution! As with many open-source projects, we ask that you sign our contributor license agreement so your pull request can be safely merged.",
|
||||
"label": "cla-signed"
|
||||
}
|
|
@ -1,22 +1,18 @@
|
|||
/photos/*
|
||||
/assets/photos/*
|
||||
/assets/cache/*
|
||||
/frontend/node_modules/*
|
||||
/node_modules
|
||||
/assets/static/build/*
|
||||
/assets/facenet
|
||||
/assets/nasnet
|
||||
/assets/nsfw
|
||||
/storage
|
||||
/build
|
||||
/assets/resources/database/*
|
||||
/assets/resources/static/build/*
|
||||
/assets/resources/nasnet
|
||||
/assets/resources/nsfw
|
||||
/assets/testdata
|
||||
/assets/backups
|
||||
Dockerfile
|
||||
/photoprism
|
||||
/photoprism-*
|
||||
docker-compose*
|
||||
/coverage.*
|
||||
/frontend/tests/acceptance/screenshots
|
||||
/tmp/
|
||||
.dockerignore
|
||||
.idea
|
||||
.DS_Store
|
||||
.env
|
||||
*.db
|
||||
*.db-journal
|
||||
Dockerfile
|
||||
docker-compose*
|
||||
/frontend/tests/acceptance/screenshots
|
||||
|
|
182
.drone.yml
|
@ -1,182 +0,0 @@
|
|||
---
|
||||
kind: pipeline
|
||||
type: exec
|
||||
name: linux-amd64
|
||||
|
||||
platform:
|
||||
arch: amd64
|
||||
os: linux
|
||||
|
||||
trigger:
|
||||
event:
|
||||
exclude:
|
||||
- pull_request
|
||||
- tag
|
||||
|
||||
steps:
|
||||
- name: up
|
||||
environment:
|
||||
DOCKER_USERNAME:
|
||||
from_secret: docker_username
|
||||
DOCKER_PASSWORD:
|
||||
from_secret: docker_password
|
||||
CODECOV_TOKEN:
|
||||
from_secret: codecov_token
|
||||
commands:
|
||||
- scripts/login.sh
|
||||
- docker compose -f docker-compose.ci.yml pull
|
||||
- docker compose -f docker-compose.ci.yml stop
|
||||
- docker compose -f docker-compose.ci.yml up -d --build --force-recreate
|
||||
|
||||
- name: test-develop
|
||||
environment:
|
||||
CODECOV_TOKEN:
|
||||
from_secret: codecov_token
|
||||
commands:
|
||||
- docker compose -f docker-compose.ci.yml exec -e CODECOV_TOKEN=$${CODECOV_TOKEN} -T photoprism make all test-js test-codecov install migrate
|
||||
when:
|
||||
branch:
|
||||
- develop
|
||||
|
||||
- name: test
|
||||
commands:
|
||||
- docker compose -f docker-compose.ci.yml exec -T photoprism make all test install migrate
|
||||
when:
|
||||
branch:
|
||||
- preview
|
||||
- release
|
||||
|
||||
- name: down
|
||||
commands:
|
||||
- docker compose -f docker-compose.ci.yml down
|
||||
when:
|
||||
status:
|
||||
- failure
|
||||
- success
|
||||
|
||||
- name: deploy-preview
|
||||
environment:
|
||||
DOCKER_USERNAME:
|
||||
from_secret: docker_username
|
||||
DOCKER_PASSWORD:
|
||||
from_secret: docker_password
|
||||
commands:
|
||||
- scripts/login.sh
|
||||
- scripts/install-qemu.sh
|
||||
- make docker-preview
|
||||
when:
|
||||
status:
|
||||
- success
|
||||
branch:
|
||||
- preview
|
||||
|
||||
- name: deploy-demo
|
||||
environment:
|
||||
DOCKER_USERNAME:
|
||||
from_secret: docker_username
|
||||
DOCKER_PASSWORD:
|
||||
from_secret: docker_password
|
||||
commands:
|
||||
- scripts/login.sh
|
||||
- docker pull photoprism/photoprism:preview
|
||||
- make docker-demo
|
||||
when:
|
||||
status:
|
||||
- success
|
||||
branch:
|
||||
- preview
|
||||
|
||||
- name: deploy-release
|
||||
environment:
|
||||
DOCKER_USERNAME:
|
||||
from_secret: docker_username
|
||||
DOCKER_PASSWORD:
|
||||
from_secret: docker_password
|
||||
commands:
|
||||
- scripts/login.sh
|
||||
- scripts/install-qemu.sh
|
||||
- make docker-release
|
||||
when:
|
||||
status:
|
||||
- success
|
||||
branch:
|
||||
- release
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: exec
|
||||
name: pull-request
|
||||
|
||||
platform:
|
||||
arch: amd64
|
||||
os: linux
|
||||
|
||||
trigger:
|
||||
event:
|
||||
include:
|
||||
- pull_request
|
||||
|
||||
steps:
|
||||
- name: up
|
||||
commands:
|
||||
- docker-compose -f docker-compose.ci.yml up -d --build --force-recreate
|
||||
|
||||
- name: test
|
||||
commands:
|
||||
- docker-compose -f docker-compose.ci.yml exec -T photoprism make all test install migrate
|
||||
|
||||
- name: down
|
||||
commands:
|
||||
- docker-compose -f docker-compose.ci.yml down
|
||||
when:
|
||||
status:
|
||||
- failure
|
||||
- success
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: exec
|
||||
name: linux-arm64
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- preview
|
||||
event:
|
||||
exclude:
|
||||
- pull_request
|
||||
- tag
|
||||
|
||||
platform:
|
||||
arch: arm64
|
||||
os: linux
|
||||
|
||||
steps:
|
||||
- name: up
|
||||
environment:
|
||||
DOCKER_USERNAME:
|
||||
from_secret: docker_username
|
||||
DOCKER_PASSWORD:
|
||||
from_secret: docker_password
|
||||
commands:
|
||||
- scripts/login.sh
|
||||
- docker-compose -f docker-compose.ci.yml stop
|
||||
- docker-compose -f docker-compose.ci.yml up -d --build --force-recreate
|
||||
|
||||
- name: test
|
||||
commands:
|
||||
- docker-compose -f docker-compose.ci.yml exec -T photoprism make all test-go install migrate
|
||||
|
||||
- name: down
|
||||
commands:
|
||||
- docker-compose -f docker-compose.ci.yml down
|
||||
- docker system prune -f
|
||||
when:
|
||||
status:
|
||||
- failure
|
||||
- success
|
||||
|
||||
---
|
||||
kind: signature
|
||||
hmac: 61a27b3c3142a9a1d1972f0fe00a8aa19d99623e6fea6e1d5ad44b6b20cd5cd1
|
||||
|
||||
...
|
40
.fossa.yml
Normal file → Executable file
|
@ -1,24 +1,18 @@
|
|||
version: 3
|
||||
# Generated by FOSSA CLI (https://github.com/fossas/fossa-cli)
|
||||
# Visit https://fossa.com to learn more
|
||||
|
||||
project:
|
||||
name: "PhotoPrism"
|
||||
id: "github.com/photoprism/photoprism"
|
||||
url: "https://github.com/photoprism/photoprism"
|
||||
link: "https://www.photoprism.app/"
|
||||
|
||||
revision:
|
||||
branch: "develop"
|
||||
|
||||
paths:
|
||||
exclude:
|
||||
- ./.github
|
||||
- ./assets
|
||||
- ./build
|
||||
- ./docker
|
||||
- ./frontend/tests
|
||||
- ./storage
|
||||
- ./scripts
|
||||
- ./test
|
||||
|
||||
telemetry:
|
||||
scope: "off"
|
||||
version: 2
|
||||
cli:
|
||||
server: https://app.fossa.com
|
||||
fetcher: custom
|
||||
project: git@github.com:photoprism/photoprism.git
|
||||
analyze:
|
||||
modules:
|
||||
- name: github.com/photoprism/photoprism/cmd/photoprism
|
||||
type: go
|
||||
target: github.com/photoprism/photoprism/cmd/photoprism
|
||||
path: cmd/photoprism
|
||||
- name: frontend
|
||||
type: npm
|
||||
target: frontend
|
||||
path: frontend
|
||||
|
|
81
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -1,81 +0,0 @@
|
|||
---
|
||||
name: Bug Report
|
||||
about: Report a new and clearly identified bug that must be fixed directly in the application
|
||||
title: 'SHORT DESCRIPTION OF THE PROBLEM YOU ARE REPORTING'
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
PLEASE PROCEED ONLY IF YOU ARE ABSOLUTELY SURE THAT THIS IS NOT A TECHNICAL SUPPORT INCIDENT AND/OR POSSIBLY A PROBLEM WITH SOME OTHER SOFTWARE YOU ARE USING. VISIT <https://www.photoprism.app/kb/getting-support> TO LEARN MORE ABOUT OUR SUPPORT OPTIONS. THANK YOU FOR YOUR CAREFUL CONSIDERATION!
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
#### 1. What is not working as documented?
|
||||
|
||||
Please be as specific as possible and explain what part of the software is not [working as documented](https://docs.photoprism.app/). "No photos found" would not be detailed enough. Also, never report [known issues](https://docs.photoprism.app/known-issues/) or [features not yet implemented](https://github.com/photoprism/photoprism/issues) as bugs. Thank you!
|
||||
|
||||
#### 2. How can we reproduce it?
|
||||
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
When reporting an import, indexing, or performance issue, please include the number and type of pictures in your library, as well as any configuration options you have changed, such as for thumbnail quality.
|
||||
|
||||
#### 3. What behavior do you expect?
|
||||
|
||||
Give us a clear and concise description of what you expect.
|
||||
|
||||
#### 4. What could be the cause of your problem?
|
||||
|
||||
Always try to determine the cause of your problem using the checklists at <https://docs.photoprism.app/getting-started/troubleshooting/> before submitting a bug report.
|
||||
|
||||
#### 5. Can you provide us with example files for testing, error logs, or screenshots?
|
||||
|
||||
Please include sample files or screenshots that help to reproduce your problem. You can also email files or share a download link, see <https://www.photoprism.app/contact> for details.
|
||||
|
||||
Visit <https://docs.photoprism.app/getting-started/troubleshooting/browsers/> to learn how to diagnose frontend issues.
|
||||
|
||||
**Important: If it is an import, indexing or metadata issue, we require sample files and logs from you.** Otherwise, we will not be able to process your report. If it is an import problem specifically, please always provide us with an archive of the files before you imported them so we can reproduce the behavior.
|
||||
|
||||
#### 6. Which software versions do you use?
|
||||
|
||||
(a) PhotoPrism Architecture & Build Number: AMD64, ARM64, ARMv7,...
|
||||
|
||||
(b) Database Type & Version: MariaDB, MySQL, SQLite,...
|
||||
|
||||
(c) Operating System Types & Versions: Linux, Windows, Android,...
|
||||
|
||||
(d) Browser Types & Versions: Firefox, Chrome, Safari on iPhone,...
|
||||
|
||||
(e) Ad Blockers, Browser Plugins, and/or Firewall Software?
|
||||
|
||||
You can find the version/build number of the app in *Settings* by scrolling to the bottom. Note that MySQL 8 support has been discontinued, see system requirements at <https://docs.photoprism.app/getting-started/#system-requirements>.
|
||||
|
||||
*Always provide database and operating system details if it is a backend, import, or indexing issue. Should it be a frontend issue, at a minimum we require you to provide web browser and operating system details. When reporting a performance problem, we ask that you provide us with complete information about your environment, as there may be more than one cause.*
|
||||
|
||||
#### 7. On what kind of device is PhotoPrism installed?
|
||||
|
||||
This is especially important if you are reporting a performance, import, or indexing issue. You can skip this if you're reporting a problem you found in our public demo, or if it's a completely unrelated issue, such as incorrect page layout.
|
||||
|
||||
(a) Device / Processor Type: Raspberry Pi 4, Intel Core i7-3770, AMD Ryzen 7 3800X,...
|
||||
|
||||
(b) Physical Memory & Swap Space in GB
|
||||
|
||||
(c) Storage Type: HDD, SSD, RAID, USB, Network Storage,...
|
||||
|
||||
(d) Anything else that might be helpful to know?
|
||||
|
||||
*Always provide device, memory, and storage details if you have a backend, performance, import, or indexing issue.*
|
||||
|
||||
#### 8. Do you use a Reverse Proxy, Firewall, VPN, or CDN?
|
||||
|
||||
If yes, please specify type and version. You can skip this if you are reporting a completely unrelated issue.
|
||||
|
||||
*Always provide this information when you have a reliability, performance, or frontend problem, such as failed uploads, connection errors, broken thumbnails, or video playback issues.*
|
||||
|
||||
**Using NGINX?** Please also provide the configuration and/or consider asking the NGINX community for advice as we do not specialize in supporting their product. Docs can be found at <https://docs.photoprism.app/getting-started/proxies/nginx/>.
|
33
.github/ISSUE_TEMPLATE/feature-request.md
vendored
|
@ -1,33 +0,0 @@
|
|||
---
|
||||
name: Feature Request
|
||||
about: Suggest a new feature or enhancement
|
||||
title: 'Category: Short Description (PLEASE CHANGE)'
|
||||
labels: idea
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
PLEASE ONLY PROCEED IF YOU ARE ABSOLUTELY SURE THAT THIS IS NOT A TECHNICAL SUPPORT INCIDENT AND/OR A PROBLEM WITH OTHER SOFTWARE YOU ARE USING. PLEASE ALSO CHECK OUR PUBLIC ROADMAP AND TRY TO FIND EXISTING FEATURE REQUESTS FIRST:
|
||||
|
||||
- <https://link.photoprism.app/roadmap>
|
||||
- <https://github.com/photoprism/photoprism/issues>
|
||||
|
||||
VISIT <https://www.photoprism.app/kb/getting-support> TO LEARN MORE ABOUT OUR SUPPORT OPTIONS. THANK YOU FOR YOUR CAREFUL CONSIDERATION!
|
||||
|
||||
===============================================================================
|
||||
|
||||
**Describe what problem this solves and why this would be valuable to many users**
|
||||
|
||||
A clear and concise description of what the problem is and why it is important to solve it.
|
||||
|
||||
**Describe the solution you'd like**
|
||||
|
||||
A clear and concise description of what you suggest to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
|
||||
Add any other context or screenshots about the feature request here.
|
18
.github/ISSUE_TEMPLATE/question.md
vendored
|
@ -1,18 +0,0 @@
|
|||
---
|
||||
name: Question
|
||||
about: You have a general question or need assistance
|
||||
title: 'STOP! DO NOT PROCEED, USE GITHUB DISCUSSIONS INSTEAD - THANK YOU'
|
||||
labels: technical-support
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
FOR GENERAL QUESTIONS, TECHNICAL SUPPORT, AND TO GET TO KNOW OTHER COMMUNITY MEMBERS:
|
||||
|
||||
<https://github.com/photoprism/photoprism/discussions>
|
||||
|
||||
OUR TROUBLESHOOTING CHECKLISTS HELP YOU QUICKLY DIAGNOSE AND FIX COMMON PROBLEMS:
|
||||
|
||||
<https://docs.photoprism.app/getting-started/troubleshooting/>
|
||||
|
||||
DO NOT PROCEED, THANK YOU!
|
33
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
@ -1,33 +0,0 @@
|
|||
<!--
|
||||
|
||||
Thank you for your interest in contributing!
|
||||
|
||||
Because we want to create the best possible product for our users, we have a set of criteria to ensure that all submissions are acceptable, see https://docs.photoprism.app/developer-guide/pull-requests/ for details.
|
||||
|
||||
(1) Please provide a concise description of your pull request.
|
||||
|
||||
- What does it implement / fix / improve? Why?
|
||||
- Are the changes related to an existing issue?
|
||||
|
||||
(2) After you submit your first pull request, you will be asked to accept our CLA, see https://www.photoprism.app/cla.
|
||||
|
||||
(3) Finally, please confirm that the following criteria are met by replacing "[ ]" with "[x]" (also possible at a later time).
|
||||
|
||||
-->
|
||||
|
||||
Acceptance Criteria:
|
||||
|
||||
- [ ] Features and enhancements must be fully implemented so that they can be released at any time without additional work
|
||||
- [ ] Automated unit and/or acceptance tests are mandatory to ensure the changes work as expected and to reduce repetitive manual work
|
||||
- [ ] Frontend components must be responsive to work and look properly on phones, tablets, and desktop computers; you must have tested them on all major browsers and different devices
|
||||
- [ ] Documentation and translation updates should be provided if needed
|
||||
- [ ] In case you submit database-related changes, they must be tested and compatible with SQLite 3 and MariaDB 10.5.12+
|
||||
|
||||
<!--
|
||||
|
||||
Since reviewing, testing and finally merging pull requests requires significant resources on our side, this can take several months if it's not just a small fix, especially if extensive testing is required to prevent bugs from getting into our stable version.
|
||||
|
||||
We thank you for your patience! :)
|
||||
|
||||
-->
|
||||
|
31
.github/workflows/codeql-analysis.yml
vendored
|
@ -1,31 +0,0 @@
|
|||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ develop, release, master ]
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'go', 'javascript' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
|
||||
- name: CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
29
.gitignore
vendored
|
@ -1,32 +1,22 @@
|
|||
# Application files and directories
|
||||
/photoprism
|
||||
/photoprism-*
|
||||
/photos/originals/*
|
||||
/photos/import/*
|
||||
/storage/*
|
||||
/build/*
|
||||
/assets/photos/originals/*
|
||||
/assets/photos/import/*
|
||||
/assets/photos/export/*
|
||||
/assets/resources/database/*
|
||||
!/assets/resources/database/.gitignore
|
||||
/node_modules
|
||||
/pro
|
||||
/plus
|
||||
/frontend/.eslintcache
|
||||
/frontend/node_modules/*
|
||||
/frontend/tests/*.html
|
||||
/frontend/tests/*.log
|
||||
/frontend/tests/screenshots
|
||||
/frontend/src/locales/*.mo
|
||||
/assets/facenet
|
||||
/assets/nasnet
|
||||
/assets/nsfw
|
||||
/assets/static/build/
|
||||
/assets/testdata
|
||||
/assets/backups
|
||||
/assets/resources/nasnet
|
||||
/assets/resources/nsfw
|
||||
/package-lock.json
|
||||
/frontend/tests_output
|
||||
/tmp/
|
||||
*.log
|
||||
*.pid
|
||||
*.db
|
||||
*.db-journal
|
||||
docker-compose.override.yml
|
||||
docker-compose.tmp.yml
|
||||
|
||||
# Binaries for programs and plugins
|
||||
*.exe
|
||||
|
@ -60,7 +50,6 @@ Thumbs.db
|
|||
.settings
|
||||
.swp
|
||||
.tmp
|
||||
.env
|
||||
|
||||
#Karma Coverage Report
|
||||
frontend/coverage/
|
||||
|
|
169
.ldap.cfg
|
@ -1,169 +0,0 @@
|
|||
debug = true
|
||||
[behaviors]
|
||||
# Ignore all capabilities restrictions, for instance allowing every user to perform a search
|
||||
IgnoreCapabilities = true
|
||||
[ldap]
|
||||
enabled = true
|
||||
listen = "0.0.0.0:389"
|
||||
[ldaps]
|
||||
enabled = false
|
||||
listen = "0.0.0.0:636"
|
||||
[api]
|
||||
enabled = true
|
||||
internals = true
|
||||
tls = false
|
||||
listen = "0.0.0.0:5555"
|
||||
[backend]
|
||||
datastore = "config"
|
||||
baseDN = "dc=localssl,dc=dev"
|
||||
|
||||
[[users]]
|
||||
name = "user"
|
||||
givenname = "John"
|
||||
objectClass = "user"
|
||||
displayName = "John Doe"
|
||||
sn = "Doe"
|
||||
uidnumber = 5003
|
||||
primarygroup = 5501
|
||||
loginShell = "/bin/sh"
|
||||
otherGroups = [5505,5506,5507,5508]
|
||||
userPrincipalName = "jdoe@example.com"
|
||||
mail = "jdoe@example.com"
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismRole = ["user"]
|
||||
photoprismNoLogin = ["false"]
|
||||
photoprismWebdav = ["true"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "bob"
|
||||
givenname = "Bob"
|
||||
objectClass = "user"
|
||||
displayName = "Robert Jones"
|
||||
sn = "Jones"
|
||||
userPrincipalName = "bob@example.com"
|
||||
mail = "bob@example.com"
|
||||
uidnumber = 5005
|
||||
primarygroup = 5502
|
||||
loginShell = "/bin/bash"
|
||||
otherGroups = [5505,5506]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismRoleUser = ["true"]
|
||||
photoprismNoLogin = ["false"]
|
||||
photoprismWebdav = ["true"]
|
||||
photoprismUploadPath = ["bob"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "guest"
|
||||
objectClass = "user"
|
||||
givenname = "Guest"
|
||||
displayName = "Guest User"
|
||||
userPrincipalName = "guest@example.com"
|
||||
mail = "guest@example.com"
|
||||
uidnumber = 5006
|
||||
primarygroup = 5503
|
||||
loginShell = "/bin/sh"
|
||||
otherGroups = [5505,5507]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismRole = ["guest"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "uploader"
|
||||
givenname = "Uploader"
|
||||
objectClass = "user"
|
||||
displayName = "Uploader"
|
||||
sn = "Uploader"
|
||||
userPrincipalName = "uploader@example.com"
|
||||
mail = "uploader@example.com"
|
||||
uidnumber = 5007
|
||||
primarygroup = 5504
|
||||
loginShell = "/bin/bash"
|
||||
otherGroups = [5508]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismUploadPath = ["bob"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "contributor"
|
||||
givenname = "Contributor"
|
||||
objectClass = "user"
|
||||
displayName = "Contributor"
|
||||
sn = "Contributor"
|
||||
userPrincipalName = "contributor@example.com"
|
||||
mail = "contributor@example.com"
|
||||
uidnumber = 5009
|
||||
primarygroup = 5509
|
||||
loginShell = "/bin/bash"
|
||||
otherGroups = [5508]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismUploadPath = ["contrib"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "mail"
|
||||
objectClass = "user"
|
||||
givenname = "Mail"
|
||||
displayName = "Mail User"
|
||||
userPrincipalName = "mail@example.com"
|
||||
mail = "mail@example.com"
|
||||
uidnumber = 5507
|
||||
primarygroup = 5506
|
||||
loginShell = "/bin/nologin"
|
||||
otherGroups = [5505]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-admin"
|
||||
gidnumber = 5501
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-user"
|
||||
gidnumber = 5502
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-guest"
|
||||
gidnumber = 5503
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-uploader"
|
||||
gidnumber = 5504
|
||||
|
||||
[[groups]]
|
||||
name = "gmail"
|
||||
gidnumber = 5505
|
||||
|
||||
[[groups]]
|
||||
name = "email"
|
||||
gidnumber = 5506
|
||||
|
||||
[[groups]]
|
||||
name = "ssh"
|
||||
gidnumber = 5507
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-webdav"
|
||||
gidnumber = 5508
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-contributor"
|
||||
gidnumber = 5509
|
5
.my.cnf
|
@ -1,5 +0,0 @@
|
|||
[client]
|
||||
user=root
|
||||
password=photoprism
|
||||
host=mariadb
|
||||
port=4001
|
32
.travis.yml
Normal file
|
@ -0,0 +1,32 @@
|
|||
sudo: required
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- docker-ce
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.cache
|
||||
|
||||
before_cache:
|
||||
- sudo chown -R travis:travis $HOME/.cache
|
||||
|
||||
services:
|
||||
- docker
|
||||
|
||||
before_script:
|
||||
- docker-compose -f docker-compose.travis.yml up -d --build
|
||||
|
||||
script:
|
||||
- scripts/travis.sh
|
||||
|
||||
after_script:
|
||||
- docker-compose -f docker-compose.travis.yml down
|
||||
|
||||
deploy:
|
||||
provider: script
|
||||
script: make docker-photoprism docker-demo
|
||||
skip_cleanup: true
|
||||
on:
|
||||
branch: master
|
|
@ -1,45 +0,0 @@
|
|||
# PhotoPrism® Code of Conduct
|
||||
|
||||
**By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms), including our [Privacy Policy](https://www.photoprism.app/privacy) and the following Code of Conduct. It explains the "dos and don’ts" when interacting with our team and other community members.**
|
||||
|
||||
*Last Updated: July 5, 2023*
|
||||
|
||||
## Rules
|
||||
|
||||
Because we want our Code of Conduct to be easy to understand and implement, we have only three basic rules, numbered in order of importance:
|
||||
|
||||
(1) Be respectful, be responsible, be kind.
|
||||
|
||||
(2) Don’t panic.
|
||||
|
||||
(3) Don’t feed the trolls.
|
||||
|
||||
## Guidelines
|
||||
|
||||
Not everyone has experience with Open Source communities and intuitively knows what is acceptable. In that case, the following guidelines and examples are meant to provide a quick overview and help you avoid the most common pitfalls:
|
||||
|
||||
(a) Do not [feel entitled](https://www.reddit.com/r/photoprism/comments/13emwf0/did_you_guys_really_nerf_hardware_transcoding/) to free software, support, or advice, especially if you are not a contributor, [member](https://link.photoprism.app/membership), or business customer. Don't expect contributors to [give status reports](https://docs.photoprism.app/developer-guide/code-quality/#go-slow-before-you-go-fast) as if they work for you or owe you something, even if you have donated a small amount. We also ask that you do not use GitHub Issues or other development tools to start general discussions, get technical support, or express personal opinions.
|
||||
|
||||
(b) Honor **Rule #2**, [read the docs](https://docs.photoprism.app) and [determine the cause of your problem](https://docs.photoprism.app/getting-started/troubleshooting/) before opening invalid bug reports, starting a public "shitstorm", or insulting other community members in our chat rooms. Aside from being annoying for everyone, it also keeps our team from working on features and enhancements that users like you are waiting for.
|
||||
|
||||
(c) Reckless, [surprisingly harsh](https://github.com/photoprism/photoprism/issues/281#issuecomment-1207233135) or ignorant communication that disregards **Rule #1** is unacceptable, whether public or private. If you are having a bad day and want to offend someone, please go somewhere else.
|
||||
|
||||
We have found that many of the issues that new users get upset about when they read about them in community forums or old issue comments have been resolved in the meantime. If not, you can be sure that we are working to improve our software and services to the best of our ability.
|
||||
|
||||
*Thanks to our amazing community, problems are rare in practice. Common sense and staying away from the computer when you are tired or hungry should usually be enough to get along with others.*
|
||||
|
||||
## Reporting
|
||||
|
||||
We encourage all community members to resolve problems on their own whenever possible. Serious and persistent violations, such as disrespectful, abusive, harassing, or otherwise unacceptable behavior, [may be reported](https://www.photoprism.app/contact) to us.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Our community standards will be enforced as necessary to protect everyone's well-being and to ensure that our discussion forums, chat rooms, and other infrastructure can be used as intended.
|
||||
|
||||
Initial warnings may be issued in the form of a [snarky comment](https://www.urbandictionary.com/define.php?term=snarky), especially if your tone is harsh to begin with. In serious cases, we will provide a link to this Code of Conduct to avoid misunderstandings. We also reserve the right to delete rants, personal attacks, spam, and unsolicited advertising from our community forums.
|
||||
|
||||
Getting a simple **\*plonk\***[^1] in response finally signals that we have lost hope and you're being ignored according to **Rule #3**. This old tradition from Usenet days is as time-saving as it is clear. It is not meant in a disrespectful way.
|
||||
|
||||
In addition, we may use technical measures to temporarily or permanently restrict your access to our infrastructure, including forums and chats.
|
||||
|
||||
[^1]: \*plonk\* including variants such as "Plonk." stands for the metaphorical sound of a user hitting the bottom of the kill file. It was first used in [Usenet forums](https://en.everybodywiki.com/Plonk_(Usenet)), a worldwide distributed discussion system and precursor to the Web.
|
|
@ -1,78 +1,46 @@
|
|||
# Every Contribution Makes a Difference
|
||||
# Every contribution makes a difference
|
||||
|
||||
We welcome contributions of any kind, including blog posts, tutorials, testing, writing documentation, and pull requests. Our [Developer Guide](https://docs.photoprism.app/developer-guide/) contains all the information necessary for you to get started.
|
||||
Think of open-source development as free training with a visible outcome.
|
||||
Exploring new technologies is easier than in commercial environments,
|
||||
where development effort is more focused on immediate results.
|
||||
|
||||
## Join the Community ##
|
||||
We welcome contributions of any kind including pull requests, ideas, bug reports,
|
||||
testing, writing documentation, tutorials and blog posts. If you help with development,
|
||||
you have the opportunity to learn Docker, Go, TensorFlow and much more.
|
||||
|
||||
Follow us on [Twitter](https://link.photoprism.app/twitter) and join the [Community Chat](https://link.photoprism.app/chat)
|
||||
to get regular updates, connect with other contributors, and discuss your ideas. Our [Code of Conduct](https://www.photoprism.app/code-of-conduct) explains the "dos and don’ts" when interacting with other community members.
|
||||
## Questions? ##
|
||||
|
||||
Feel free to [contact us](https://www.photoprism.app/contact) with anything that is on your mind. We appreciate your feedback! Due to the high volume of emails we receive, our team may be unable to get back to you immediately. We do our best to respond within five business days or less.
|
||||
Follow us on [Twitter][twitter] and join our [developers mailing list](https://groups.google.com/a/photoprism.org/forum/#!forum/developers)
|
||||
to receive regular project updates, get in contact with other contributors and discuss your ideas. Don't be afraid to ask stupid questions.
|
||||
|
||||
## Not a Developer? No Problem ##
|
||||
Of all the tools we tested, Twitter works best to get and give continuous feedback. Especially polls are amazing for product development.
|
||||
|
||||
You can also contribute by…
|
||||
## Pull requests ##
|
||||
|
||||
* answering questions in the [Community Chat](https://link.photoprism.app/chat), on [Reddit](https://link.photoprism.app/reddit) and in [GitHub Discussions](https://link.photoprism.app/discussions)
|
||||
* helping us [translate](https://docs.photoprism.app/developer-guide/translations-weblate/) the Web UI on [Weblate](https://translate.photoprism.app/)
|
||||
* [conducting research](https://github.com/photoprism/photoprism/issues?q=is%3Aopen+is%3Aissue+label%3Aresearch) and [improving the documentation](https://github.com/photoprism/photoprism/issues?q=is%3Aopen+is%3Aissue+label%3Adocs)
|
||||
* publishing tutorials, blog posts, and podcasts
|
||||
* voting for us on pages like:
|
||||
* https://alternativeto.net/software/photoprism/about/
|
||||
* https://www.saashub.com/google-photos-alternatives
|
||||
* recommending PhotoPrism to your friends
|
||||
Issues labeled [help wanted](https://github.com/photoprism/photoprism/labels/help%20wanted) /
|
||||
[easy](https://github.com/photoprism/photoprism/labels/easy) can be good (first) contributions.
|
||||
Our [Developer Guide](https://docs.photoprism.org/en/latest/developer-guide/) contains all information necessary to get you started.
|
||||
|
||||
## Creating Bug Reports ##
|
||||
Our [step-by-step guide](https://github.com/photoprism/photoprism/wiki/Pull-Requests) explains how to submit new features, bugfixes and documentation.
|
||||
|
||||
Before reporting a bug, please use our [Troubleshooting Checklists](https://docs.photoprism.app/getting-started/troubleshooting/)
|
||||
to determine the cause of your problem. If you have a general question, need help, or an issue has not
|
||||
(yet) been clearly identified:
|
||||
## Feature requests ##
|
||||
|
||||
- You are welcome to ask in our [Community Chat](https://link.photoprism.app/chat)
|
||||
- or post your question in [GitHub Discussions](https://link.photoprism.app/discussions)
|
||||
You are welcome to add specific feature requests directly to our [GitHub issue tracker](https://github.com/photoprism/photoprism/issues)
|
||||
if no similar [idea](https://github.com/photoprism/photoprism/labels/idea)
|
||||
or [todo](https://github.com/photoprism/photoprism/labels/todo) already exists.
|
||||
Please don't use the issue tracker to ask general questions.
|
||||
|
||||
### GitHub Issues ###
|
||||
We also maintain a couple of pages in our [Wiki](https://github.com/photoprism/photoprism/wiki)
|
||||
for collecting interesting ideas and feedback, e.g.
|
||||
[Related](https://github.com/photoprism/photoprism/wiki/Related),
|
||||
[Love](https://github.com/photoprism/photoprism/wiki/Love),
|
||||
[Concerns](https://github.com/photoprism/photoprism/wiki/Concerns) and
|
||||
[Research](https://github.com/photoprism/photoprism/wiki/Research).
|
||||
|
||||
We kindly ask you not to report bugs via GitHub Issues **unless you are certain to have found a fully reproducible and previously unreported issue** that must be fixed directly in [our source code](https://github.com/photoprism/photoprism). Thank you for your careful consideration!
|
||||
## Reporting bugs ##
|
||||
|
||||
- When reporting a problem, always include the software versions you are using and other information about your environment such as [browser, browser plugins](https://docs.photoprism.app/getting-started/troubleshooting/browsers/), operating system, [storage type](https://docs.photoprism.app/getting-started/troubleshooting/performance/#storage), [memory size](https://docs.photoprism.app/getting-started/troubleshooting/performance/#memory), and [processor](https://docs.photoprism.app/getting-started/troubleshooting/performance/#server-cpu)
|
||||
- Note that all issue **subscribers receive an email notification** from GitHub whenever a new comment is added, so these should only be used for sharing important information and not for discussions, questions or expressing personal opinions
|
||||
- [Contact us](https://www.photoprism.app/contact) or [a community member](https://link.photoprism.app/discussions) if you need help, it could be a local configuration problem, or a misunderstanding in how the software works
|
||||
- This gives our team the opportunity to [improve the docs](https://docs.photoprism.app/getting-started/troubleshooting/) and provide best-in-class support to you, instead of handling unclear/duplicate bug reports or triggering a flood of notifications by responding to comments
|
||||
Please use the [GitHub issue tracker](https://github.com/photoprism/photoprism/issues) to report clearly identified bugs and impediments to us.
|
||||
If you're not sure, start by asking in our [help forum](https://groups.google.com/a/photoprism.org/forum/#!forum/help) or [contact us via email](mailto:help@photoprism.org).
|
||||
When reporting an issue, please provide the version in use and information about your environment like browser, operating system, installed memory, and processor type.
|
||||
|
||||
## Submitting Pull Requests ##
|
||||
|
||||
Follow our [step-by-step guide](https://docs.photoprism.app/developer-guide/pull-requests) to learn how to submit new features, bug fixes, and documentation enhancements.
|
||||
|
||||
Pull requests solving ["help wanted"](https://github.com/photoprism/photoprism/labels/help%20wanted) issues are the easiest to merge and the most helpful to us, as they allow us to spend more time on core functionality and other issues that are difficult for external contributors to work on. If you are new to this project, anything labeled ["easy"](https://github.com/photoprism/photoprism/labels/easy) may be a good first contribution.
|
||||
|
||||
**Be aware that reviewing, testing and finally merging pull requests requires significant resources on our side. It can therefore take several months if it is not just a small fix, especially if extensive testing is needed to prevent bugs from getting into our stable version.**
|
||||
|
||||
## Contributor License Agreement (CLA) ##
|
||||
|
||||
After you submit your first pull request, you will be asked to accept our Contributor License Agreement (CLA). Visit [photoprism.app/cla](https://www.photoprism.app/cla) and [photoprism.app/oss/faq](https://www.photoprism.app/oss/faq#cla) to learn more.
|
||||
|
||||
## Thank You to All Current and Past Sponsors 💎 ##
|
||||
|
||||
[A big thank you to all of our sponsors](SPONSORS.md), whose generous support has been and continues to be essential to the success of the project! 💜
|
||||
|
||||
Our project infrastructure is provided by the following companies:
|
||||
|
||||
- [**GitHub**](https://github.com/) hosts our [code repositories](https://github.com/photoprism/photoprism) and also provides many other important services
|
||||
- [**Docker**](https://www.docker.com/) approved us for their [Open Source Program](https://www.docker.com/community/open-source/application/) and hosts all of our app images
|
||||
- [**Element**](https://element.io/) develops and [operates the infrastructure](https://matrix.org/) that our [community chat](https://link.photoprism.app/chat) is based on
|
||||
- [**BrowserStack**](https://www.browserstack.com/) provides [free access](https://www.browserstack.com/open-source) to their device and browser testing infrastructure
|
||||
|
||||
[View Sponsors ›](SPONSORS.md) [View Credits ›](https://docs.photoprism.app/credits/)
|
||||
|
||||
## Privacy Notice ##
|
||||
|
||||
We operate a number of web services that help us develop and maintain our software in collaboration with the open source community, for example [translate.photoprism.app](https://translate.photoprism.app/).
|
||||
|
||||
Because many of these apps and tools were originally developed for internal use without a high level of privacy in mind, we ask that you do not enter personal information such as your real name or personal email address if you want it to remain private.
|
||||
|
||||
**Personal details may otherwise show up in logs, source code, translation files, commit messages, and pull request comments.**
|
||||
|
||||
----
|
||||
|
||||
*PhotoPrism® is a [registered trademark](https://www.photoprism.app/trademark). By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms), [Privacy Policy](https://www.photoprism.app/privacy), and [Code of Conduct](https://www.photoprism.app/code-of-conduct). Docs are [available](https://link.photoprism.app/github-docs) under the [CC BY-NC-SA 4.0 License](https://creativecommons.org/licenses/by-nc-sa/4.0/); [additional terms](https://github.com/photoprism/photoprism/blob/develop/assets/README.md) may apply.*
|
||||
[twitter]: https://twitter.com/browseyourlife
|
||||
|
|
17
Dockerfile
|
@ -1,18 +1,5 @@
|
|||
# Ubuntu 23.10 (Mantic Minotaur)
|
||||
FROM photoprism/develop:231206-mantic
|
||||
FROM photoprism/development:20200519
|
||||
|
||||
## Alternative Environments:
|
||||
# FROM photoprism/develop:armv7 # ARMv7 (32bit)
|
||||
# FROM photoprism/develop:lunar # Ubuntu 23.04 (Lunar Lobster)
|
||||
# FROM photoprism/develop:jammy # Ubuntu 22.04 LTS (Jammy Jellyfish)
|
||||
# FROM photoprism/develop:impish # Ubuntu 21.10 (Impish Indri)
|
||||
# FROM photoprism/develop:bookworm # Debian 12 (Bookworm)
|
||||
# FROM photoprism/develop:bullseye # Debian 11 (Bullseye)
|
||||
# FROM photoprism/develop:buster # Debian 10 (Buster)
|
||||
|
||||
# Set default working directory.
|
||||
# Set up project directory
|
||||
WORKDIR "/go/src/github.com/photoprism/photoprism"
|
||||
|
||||
# Copy source to image.
|
||||
COPY . .
|
||||
COPY --chown=root:root /scripts/dist/ /scripts/
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
custom: "https://www.photoprism.app/editions#compare"
|
||||
github: photoprism
|
||||
patreon: photoprism
|
||||
github: lastzero
|
||||
patreon: photoprism
|
||||
custom: "https://www.paypal.me/photoprism"
|
||||
|
|
188
LICENSE
|
@ -1,5 +1,5 @@
|
|||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
|
@ -7,15 +7,17 @@
|
|||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
|
@ -24,34 +26,44 @@ them if you wish), that you receive source code or can get it if you
|
|||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
@ -60,7 +72,7 @@ modification follow.
|
|||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
@ -537,45 +549,35 @@ to collect a royalty for further conveying from those to whom you convey
|
|||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
|
@ -616,31 +618,57 @@ an absolute waiver of all civil liability in connection with the
|
|||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
ADDITIONAL TERMS
|
||||
|
||||
18. PhotoPrism® Trademark and Brand Assets
|
||||
|
||||
(a) PhotoPrism’s Brand Assets — including trademarks, logos, icons, fonts,
|
||||
corporate design, product and service names, and any other brand features
|
||||
and elements, whether registered or unregistered („Brand Assets“) — are
|
||||
proprietary assets owned exclusively by PhotoPrism UG („PhotoPrism“). We
|
||||
reserve the right to object to any use or misuse in any jurisdiction
|
||||
worldwide. Visit <https://www.photoprism.app/trademark> to learn more.
|
||||
|
||||
(b) Contributors, licensees, business partners, and other third parties
|
||||
may never claim ownership of PhotoPrism's Brand Assets or brands confusingly
|
||||
similar to PhotoPrism's Brand Assets in any way, including, without
|
||||
limitation, as a trademark, service mark, company name or designation,
|
||||
domain name, social media profile/handle, or in any other manner.
|
||||
|
||||
(c) You may not include the PhotoPrism trademark in the name of your app,
|
||||
product, or service, whether commercial or non-commercial in nature. This
|
||||
includes online services such as e-commerce, community, blog, information,
|
||||
advertising, and personal home pages, as well as apps, app stores, client
|
||||
apps, or third-party apps that interact with PhotoPrism.
|
||||
|
||||
(d) In the event that any provision is found to be unenforceable by a court
|
||||
or other competent jurisdiction, the remaining portions hereof shall remain
|
||||
in full force and effect.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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 3 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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
655
Makefile
|
@ -1,226 +1,75 @@
|
|||
# Copyright © 2018 - 2023 PhotoPrism UG. All rights reserved.
|
||||
#
|
||||
# Questions? Email us at hello@photoprism.app or visit our website to learn
|
||||
# more about our team, products and services: https://www.photoprism.app/
|
||||
|
||||
export GO111MODULE=on
|
||||
|
||||
-include .env
|
||||
export
|
||||
|
||||
# Binary file names.
|
||||
BINARY_NAME=photoprism
|
||||
GOIMPORTS=goimports
|
||||
BINARY_NAME=photoprism
|
||||
DOCKER_TAG=`date -u +%Y%m%d`
|
||||
|
||||
# Build parameters.
|
||||
BUILD_PATH ?= $(shell realpath "./build")
|
||||
BUILD_DATE ?= $(shell date -u +%y%m%d)
|
||||
BUILD_VERSION ?= $(shell git describe --always)
|
||||
BUILD_TAG ?= $(BUILD_DATE)-$(BUILD_VERSION)
|
||||
BUILD_OS ?= $(shell uname -s)
|
||||
BUILD_ARCH ?= $(shell scripts/dist/arch.sh)
|
||||
JS_BUILD_PATH ?= $(shell realpath "./assets/static/build")
|
||||
|
||||
# Install parameters.
|
||||
INSTALL_PATH ?= $(BUILD_PATH)/photoprism-ce_$(BUILD_TAG)-$(shell echo $(BUILD_OS) | tr '[:upper:]' '[:lower:]')-$(BUILD_ARCH)
|
||||
DESTDIR ?= $(INSTALL_PATH)
|
||||
DESTUID ?= 1000
|
||||
DESTGID ?= 1000
|
||||
INSTALL_USER ?= $(DESTUID):$(DESTGID)
|
||||
INSTALL_MODE ?= u+rwX,a+rX
|
||||
INSTALL_MODE_BIN ?= 755
|
||||
|
||||
UID := $(shell id -u)
|
||||
GID := $(shell id -g)
|
||||
HASRICHGO := $(shell which richgo)
|
||||
|
||||
ifdef HASRICHGO
|
||||
GOTEST=richgo test
|
||||
else
|
||||
GOTEST=go test
|
||||
endif
|
||||
|
||||
# Ensure compatibility with "docker-compose" (old) and "docker compose" (new).
|
||||
HAS_DOCKER_COMPOSE_WITH_DASH := $(shell which docker-compose)
|
||||
|
||||
ifdef HAS_DOCKER_COMPOSE_WITH_DASH
|
||||
DOCKER_COMPOSE=docker-compose
|
||||
else
|
||||
DOCKER_COMPOSE=docker compose
|
||||
endif
|
||||
|
||||
# Declare "make" targets.
|
||||
all: dep build-js
|
||||
dep: dep-tensorflow dep-js
|
||||
biuld: build
|
||||
build: build-go
|
||||
build-all: build-go build-js
|
||||
pull: docker-pull
|
||||
test: test-js test-go
|
||||
test-go: reset-sqlite run-test-go
|
||||
test-pkg: reset-sqlite run-test-pkg
|
||||
test-api: reset-sqlite run-test-api
|
||||
test-commands: reset-sqlite run-test-commands
|
||||
test-photoprism: reset-sqlite run-test-photoprism
|
||||
test-short: reset-sqlite run-test-short
|
||||
test-mariadb: reset-acceptance run-test-mariadb
|
||||
acceptance-run-chromium: storage/acceptance acceptance-auth-sqlite-restart wait acceptance-auth acceptance-auth-sqlite-stop acceptance-sqlite-restart wait-2 acceptance acceptance-sqlite-stop
|
||||
acceptance-run-chromium-short: storage/acceptance acceptance-auth-sqlite-restart wait acceptance-auth-short acceptance-auth-sqlite-stop acceptance-sqlite-restart wait-2 acceptance-short acceptance-sqlite-stop
|
||||
acceptance-auth-run-chromium: storage/acceptance acceptance-auth-sqlite-restart wait acceptance-auth acceptance-auth-sqlite-stop
|
||||
acceptance-public-run-chromium: storage/acceptance acceptance-sqlite-restart wait acceptance acceptance-sqlite-stop
|
||||
wait:
|
||||
sleep 20
|
||||
wait-2:
|
||||
sleep 20
|
||||
show-build:
|
||||
@echo "$(BUILD_TAG)"
|
||||
test-all: test acceptance-run-chromium
|
||||
all: dep build
|
||||
dep: dep-tensorflow dep-js dep-go
|
||||
build: generate build-js build-go
|
||||
install: install-bin install-assets
|
||||
test: reset-test-db test-js test-go
|
||||
acceptance-all: start acceptance acceptance-firefox stop
|
||||
test-all: test acceptance-all
|
||||
fmt: fmt-js fmt-go
|
||||
clean-local: clean-local-config clean-local-cache
|
||||
upgrade: dep-upgrade-js dep-upgrade
|
||||
devtools: install-go dep-npm
|
||||
.SILENT: help;
|
||||
logs:
|
||||
$(DOCKER_COMPOSE) logs -f
|
||||
help:
|
||||
@echo "For build instructions, visit <https://docs.photoprism.app/developer-guide/>."
|
||||
fix-permissions:
|
||||
$(info Updating filesystem permissions...)
|
||||
@if [ $(UID) != 0 ]; then\
|
||||
echo "Running \"chown --preserve-root -Rcf $(UID):$(GID) /go /photoprism /opt/photoprism /tmp/photoprism\". Please wait."; \
|
||||
sudo chown --preserve-root -Rcf $(UID):$(GID) /go /photoprism /opt/photoprism /tmp/photoprism || true;\
|
||||
echo "Running \"chmod --preserve-root -Rcf u+rwX /go/src/github.com/photoprism/* /photoprism /opt/photoprism /tmp/photoprism\". Please wait.";\
|
||||
sudo chmod --preserve-root -Rcf u+rwX /go/src/github.com/photoprism/photoprism/* /photoprism /opt/photoprism /tmp/photoprism || true;\
|
||||
echo "Done."; \
|
||||
else\
|
||||
echo "Running as root. Nothing to do."; \
|
||||
fi
|
||||
gettext-merge:
|
||||
./scripts/gettext-merge.sh
|
||||
gettext-clear-fuzzy:
|
||||
./scripts/gettext-clear-fuzzy.sh
|
||||
clean:
|
||||
rm -f *.log .test*
|
||||
[ ! -f "$(BINARY_NAME)" ] || rm -f $(BINARY_NAME)
|
||||
[ ! -d "node_modules" ] || rm -rf node_modules
|
||||
[ ! -d "frontend/node_modules" ] || rm -rf frontend/node_modules
|
||||
[ ! -d "$(BUILD_PATH)" ] || rm -rf --preserve-root $(BUILD_PATH)
|
||||
[ ! -d "$(JS_BUILD_PATH)" ] || rm -rf --preserve-root $(JS_BUILD_PATH)
|
||||
tar.gz:
|
||||
$(info Creating tar.gz archives from the directories in "$(BUILD_PATH)"...)
|
||||
find "$(BUILD_PATH)" -maxdepth 1 -mindepth 1 -type d -name "photoprism*" -exec tar --exclude='.[^/]*' -C {} -czf {}.tar.gz . \;
|
||||
pkg: pkg-amd64 pkg-arm64
|
||||
pkg-amd64:
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" --entrypoint "" photoprism/develop:jammy make all install tar.gz
|
||||
pkg-arm64:
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" --entrypoint "" photoprism/develop:jammy make all install tar.gz
|
||||
install:
|
||||
$(info Installing in "$(DESTDIR)"...)
|
||||
@[ ! -d "$(DESTDIR)" ] || (echo "ERROR: Install path '$(DESTDIR)' already exists!"; exit 1)
|
||||
mkdir --mode=$(INSTALL_MODE) -p $(DESTDIR)
|
||||
env TMPDIR="$(BUILD_PATH)" ./scripts/dist/install-tensorflow.sh $(DESTDIR)
|
||||
rm -rf --preserve-root $(DESTDIR)/include
|
||||
(cd $(DESTDIR) && mkdir -p bin lib assets)
|
||||
./scripts/build.sh prod "$(DESTDIR)/bin/$(BINARY_NAME)"
|
||||
rsync -r -l --safe-links --exclude-from=assets/.buildignore --chmod=a+r,u+rw ./assets/ $(DESTDIR)/assets
|
||||
wget -O $(DESTDIR)/assets/static/img/wallpaper/welcome.jpg https://cdn.photoprism.app/wallpaper/welcome.jpg
|
||||
wget -O $(DESTDIR)/assets/static/img/preview.jpg https://cdn.photoprism.app/img/preview.jpg
|
||||
chown -R $(INSTALL_USER) $(DESTDIR)
|
||||
chmod -R $(INSTALL_MODE) $(DESTDIR)
|
||||
chmod -R $(INSTALL_MODE_BIN) $(DESTDIR)/bin $(DESTDIR)/lib
|
||||
@echo "PhotoPrism $(BUILD_TAG) has been successfully installed in \"$(DESTDIR)\".\nEnjoy!"
|
||||
install-go:
|
||||
sudo scripts/dist/install-go.sh
|
||||
go build -v ./...
|
||||
install-tensorflow:
|
||||
sudo scripts/dist/install-tensorflow.sh
|
||||
install-darktable:
|
||||
sudo scripts/dist/install-darktable.sh
|
||||
acceptance-sqlite-restart:
|
||||
cp -f storage/acceptance/backup.db storage/acceptance/index.db
|
||||
cp -f storage/acceptance/config-sqlite/settingsBackup.yml storage/acceptance/config-sqlite/settings.yml
|
||||
rm -rf storage/acceptance/sidecar/2020
|
||||
rm -rf storage/acceptance/sidecar/2011
|
||||
rm -rf storage/acceptance/originals/2010
|
||||
rm -rf storage/acceptance/originals/2020
|
||||
rm -rf storage/acceptance/originals/2011
|
||||
rm -rf storage/acceptance/originals/2013
|
||||
rm -rf storage/acceptance/originals/2017
|
||||
./photoprism --auth-mode="public" -c "./storage/acceptance/config-sqlite" --test start -d
|
||||
acceptance-sqlite-stop:
|
||||
./photoprism --auth-mode="public" -c "./storage/acceptance/config-sqlite" --test stop
|
||||
acceptance-auth-sqlite-restart:
|
||||
cp -f storage/acceptance/backup.db storage/acceptance/index.db
|
||||
cp -f storage/acceptance/config-sqlite/settingsBackup.yml storage/acceptance/config-sqlite/settings.yml
|
||||
./photoprism --auth-mode="password" -c "./storage/acceptance/config-sqlite" --test start -d
|
||||
acceptance-auth-sqlite-stop:
|
||||
./photoprism --auth-mode="password" -c "./storage/acceptance/config-sqlite" --test stop
|
||||
clean-local: clean-local-config clean-local-share clean-local-cache
|
||||
clean-install: clean-local dep build-js install-bin install-assets
|
||||
start:
|
||||
./photoprism start -d
|
||||
go run cmd/photoprism/photoprism.go start -d
|
||||
stop:
|
||||
./photoprism stop
|
||||
go run cmd/photoprism/photoprism.go stop
|
||||
terminal:
|
||||
$(DOCKER_COMPOSE) exec -u $(UID) photoprism bash
|
||||
rootshell: root-terminal
|
||||
root-terminal:
|
||||
$(DOCKER_COMPOSE) exec -u root photoprism bash
|
||||
docker-compose exec photoprism bash
|
||||
migrate:
|
||||
go run cmd/photoprism/photoprism.go migrations run
|
||||
go run cmd/photoprism/photoprism.go migrate
|
||||
generate:
|
||||
POT_SIZE_BEFORE=$(shell stat -L -c %s assets/locales/messages.pot)
|
||||
go generate ./pkg/... ./internal/...
|
||||
go fmt ./pkg/... ./internal/...
|
||||
POT_SIZE_AFTER=$(shell stat -L -c %s assets/locales/messages.pot)
|
||||
@if [ $(POT_SIZE_BEFORE) == $(POT_SIZE_AFTER) ]; then\
|
||||
git checkout -- assets/locales/messages.pot;\
|
||||
echo "Reverted unnecessary change in assets/locales/messages.pot.";\
|
||||
fi
|
||||
go-generate:
|
||||
go generate ./pkg/... ./internal/...
|
||||
go fmt ./pkg/... ./internal/...
|
||||
clean-local-assets:
|
||||
rm -rf $(BUILD_PATH)/assets/*
|
||||
install-bin:
|
||||
scripts/build.sh prod ~/.local/bin/$(BINARY_NAME)
|
||||
install-assets:
|
||||
$(info Installing assets)
|
||||
mkdir -p ~/.config/photoprism
|
||||
mkdir -p ~/.cache/photoprism
|
||||
mkdir -p ~/Pictures/Originals
|
||||
mkdir -p ~/Pictures/Import
|
||||
mkdir -p ~/.local/share/photoprism/resources/database
|
||||
cp -r assets/resources/static assets/resources/templates assets/resources/nasnet assets/resources/nsfw ~/.local/share/photoprism/resources
|
||||
rsync -a -v --ignore-existing assets/config/*.yml ~/.config/photoprism
|
||||
find ~/.local/share/photoprism -name '.*' -type f -delete
|
||||
clean-local-share:
|
||||
rm -rf ~/.local/share/photoprism
|
||||
clean-local-cache:
|
||||
rm -rf $(BUILD_PATH)/storage/cache/*
|
||||
rm -rf ~/.cache/photoprism
|
||||
clean-local-config:
|
||||
rm -f $(BUILD_PATH)/config/*
|
||||
dep-list:
|
||||
go list -u -m -json all | go-mod-outdated -direct
|
||||
dep-npm:
|
||||
sudo npm install -g npm
|
||||
rm -f ~/.config/photoprism/*
|
||||
dep-js:
|
||||
(cd frontend && npm ci --no-update-notifier --no-audit)
|
||||
(cd frontend && npm install --silent)
|
||||
dep-go:
|
||||
go build -v ./...
|
||||
dep-upgrade:
|
||||
go get -u -t ./...
|
||||
dep-upgrade-js:
|
||||
(cd frontend && npm --depth 3 update --legacy-peer-deps)
|
||||
(cd frontend && npm --depth 3 update)
|
||||
dep-tensorflow:
|
||||
scripts/download-facenet.sh
|
||||
scripts/download-nasnet.sh
|
||||
scripts/download-nsfw.sh
|
||||
dep-acceptance: storage/acceptance
|
||||
storage/acceptance:
|
||||
[ -f "./storage/acceptance/index.db" ] || (cd storage && rm -rf acceptance && wget -c https://dl.photoprism.app/qa/acceptance.tar.gz -O - | tar -xz)
|
||||
zip-facenet:
|
||||
(cd assets && zip -r facenet.zip facenet -x "*/.*" -x "*/version.txt")
|
||||
zip-nasnet:
|
||||
(cd assets && zip -r nasnet.zip nasnet -x "*/.*" -x "*/version.txt")
|
||||
(cd assets/resources && zip -r nasnet.zip nasnet -x "*/.*" -x "*/version.txt")
|
||||
zip-nsfw:
|
||||
(cd assets && zip -r nsfw.zip nsfw -x "*/.*" -x "*/version.txt")
|
||||
(cd assets/resources && zip -r nsfw.zip nsfw -x "*/.*" -x "*/version.txt")
|
||||
build-js:
|
||||
(cd frontend && env NODE_ENV=production npm run build)
|
||||
build-go: build-debug
|
||||
build-debug:
|
||||
build-go:
|
||||
rm -f $(BINARY_NAME)
|
||||
scripts/build.sh debug $(BINARY_NAME)
|
||||
build-prod:
|
||||
rm -f $(BINARY_NAME)
|
||||
scripts/build.sh prod $(BINARY_NAME)
|
||||
build-race:
|
||||
rm -f $(BINARY_NAME)
|
||||
scripts/build.sh race $(BINARY_NAME)
|
||||
build-static:
|
||||
rm -f $(BINARY_NAME)
|
||||
scripts/build.sh static $(BINARY_NAME)
|
||||
|
@ -234,413 +83,67 @@ watch-js:
|
|||
(cd frontend && env NODE_ENV=development npm run watch)
|
||||
test-js:
|
||||
$(info Running JS unit tests...)
|
||||
(cd frontend && env TZ=UTC NODE_ENV=development BABEL_ENV=test npm run test)
|
||||
(cd frontend && env NODE_ENV=development BABEL_ENV=test npm run test)
|
||||
acceptance:
|
||||
$(info Running public-mode tests in 'chromium:headless'...)
|
||||
(cd frontend && npm run testcafe -- chrome:headless --test-grep "^(Common|Core)\:*" --test-meta mode=public --config-file ./testcaferc.json "tests/acceptance")
|
||||
acceptance-short:
|
||||
$(info Running JS acceptance tests in Chrome...)
|
||||
(cd frontend && npm run testcafe -- chrome:headless --test-grep "^(Common|Core)\:*" --test-meta mode=public,type=short --config-file ./testcaferc.json "tests/acceptance")
|
||||
(cd frontend && npm run acceptance)
|
||||
acceptance-firefox:
|
||||
$(info Running JS acceptance tests in Firefox...)
|
||||
(cd frontend && npm run testcafe -- firefox:headless --test-grep "^(Common|Core)\:*" --test-meta mode=public --config-file ./testcaferc.json "tests/acceptance")
|
||||
acceptance-auth:
|
||||
$(info Running JS acceptance-auth tests in Chrome...)
|
||||
(cd frontend && npm run testcafe -- chrome:headless --test-grep "^(Common|Core)\:*" --test-meta mode=auth --config-file ./testcaferc.json "tests/acceptance")
|
||||
acceptance-auth-short:
|
||||
$(info Running JS acceptance-auth tests in Chrome...)
|
||||
(cd frontend && npm run testcafe -- chrome:headless --test-grep "^(Common|Core)\:*" --test-meta mode=auth,type=short --config-file ./testcaferc.json "tests/acceptance")
|
||||
acceptance-auth-firefox:
|
||||
$(info Running JS acceptance-auth tests in Firefox...)
|
||||
(cd frontend && npm run testcafe -- firefox:headless --test-grep "^(Common|Core)\:*" --test-meta mode=auth --config-file ./testcaferc.json "tests/acceptance")
|
||||
reset-mariadb:
|
||||
$(info Resetting photoprism database...)
|
||||
mysql < scripts/sql/reset-photoprism.sql
|
||||
reset-mariadb-testdb:
|
||||
$(info Resetting testdb database...)
|
||||
mysql < scripts/sql/reset-testdb.sql
|
||||
reset-mariadb-local:
|
||||
$(info Resetting local database...)
|
||||
mysql < scripts/sql/reset-local.sql
|
||||
reset-mariadb-acceptance:
|
||||
$(info Resetting acceptance database...)
|
||||
mysql < scripts/sql/reset-acceptance.sql
|
||||
reset-mariadb-all: reset-mariadb-testdb reset-mariadb-local reset-mariadb-acceptance reset-mariadb-photoprism
|
||||
reset-testdb: reset-sqlite reset-mariadb-testdb
|
||||
reset-acceptance: reset-mariadb-acceptance
|
||||
reset-sqlite:
|
||||
$(info Removing test database files...)
|
||||
find ./internal -type f -name ".test.*" -delete
|
||||
run-test-short:
|
||||
$(info Running short Go tests in parallel mode...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -short -timeout 5m ./pkg/... ./internal/...
|
||||
run-test-go:
|
||||
$(info Running all Go tests...)
|
||||
(cd frontend && npm run acceptance-firefox)
|
||||
reset-test-db:
|
||||
mysql < scripts/reset-test-db.sql
|
||||
test-go:
|
||||
$(info Running all Go unit tests...)
|
||||
$(GOTEST) -parallel 1 -count 1 -cpu 1 -tags slow -timeout 20m ./pkg/... ./internal/...
|
||||
run-test-mariadb:
|
||||
$(info Running all Go tests on MariaDB...)
|
||||
PHOTOPRISM_TEST_DRIVER="mysql" PHOTOPRISM_TEST_DSN="root:photoprism@tcp(mariadb:4001)/acceptance?charset=utf8mb4,utf8&collation=utf8mb4_unicode_ci&parseTime=true" $(GOTEST) -parallel 1 -count 1 -cpu 1 -tags slow -timeout 20m ./pkg/... ./internal/...
|
||||
run-test-pkg:
|
||||
$(info Running all Go tests in "/pkg"...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./pkg/...
|
||||
run-test-api:
|
||||
$(info Running all API tests...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./internal/api/...
|
||||
run-test-commands:
|
||||
$(info Running all CLI command tests...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./internal/commands/...
|
||||
run-test-photoprism:
|
||||
$(info Running all Go tests in "/internal/photoprism"...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./internal/photoprism/...
|
||||
test-parallel:
|
||||
$(info Running all Go tests in parallel mode...)
|
||||
$(info Running all Go unit tests in parallel mode...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./pkg/... ./internal/...
|
||||
test-verbose:
|
||||
$(info Running all Go tests in verbose mode...)
|
||||
$(info Running all Go unit tests in verbose mode...)
|
||||
$(GOTEST) -parallel 1 -count 1 -cpu 1 -tags slow -timeout 20m -v ./pkg/... ./internal/...
|
||||
test-short:
|
||||
$(info Running short Go unit tests in parallel mode...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -short -timeout 5m ./pkg/... ./internal/...
|
||||
test-race:
|
||||
$(info Running all Go tests with race detection in verbose mode...)
|
||||
$(info Running all Go unit tests with race detection in verbose mode...)
|
||||
$(GOTEST) -tags slow -race -timeout 60m -v ./pkg/... ./internal/...
|
||||
test-codecov:
|
||||
$(info Running all Go unit tests with code coverage report for codecov...)
|
||||
go test -parallel 1 -count 1 -cpu 1 -failfast -tags slow -timeout 30m -coverprofile coverage.txt -covermode atomic ./pkg/... ./internal/...
|
||||
scripts/codecov.sh
|
||||
test-coverage:
|
||||
$(info Running all Go tests with code coverage report...)
|
||||
$(info Running all Go unit tests with code coverage report...)
|
||||
go test -parallel 1 -count 1 -cpu 1 -failfast -tags slow -timeout 30m -coverprofile coverage.txt -covermode atomic ./pkg/... ./internal/...
|
||||
go tool cover -html=coverage.txt -o coverage.html
|
||||
go tool cover -func coverage.txt | grep total:
|
||||
docker-pull:
|
||||
$(DOCKER_COMPOSE) pull --ignore-pull-failures
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml pull --ignore-pull-failures
|
||||
docker-build:
|
||||
$(DOCKER_COMPOSE) pull --ignore-pull-failures
|
||||
$(DOCKER_COMPOSE) build
|
||||
docker-local-up:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.local.yml up --force-recreate
|
||||
docker-local-down:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.local.yml down -V
|
||||
develop: docker-develop
|
||||
docker-develop: docker-develop-latest
|
||||
docker-develop-all: docker-develop-latest docker-develop-other
|
||||
docker-develop-latest: docker-develop-ubuntu
|
||||
docker-develop-debian: docker-develop-bookworm docker-develop-bookworm-slim
|
||||
docker-develop-ubuntu: docker-develop-mantic docker-develop-mantic-slim
|
||||
docker-develop-other: docker-develop-debian docker-develop-bullseye docker-develop-bullseye-slim docker-develop-buster
|
||||
docker-develop-bookworm:
|
||||
docker pull --platform=amd64 debian:bookworm-slim
|
||||
docker pull --platform=arm64 debian:bookworm-slim
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 bookworm /bookworm "-t photoprism/develop:debian"
|
||||
docker-develop-bookworm-slim:
|
||||
docker pull --platform=amd64 debian:bookworm-slim
|
||||
docker pull --platform=arm64 debian:bookworm-slim
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 bookworm-slim /bookworm-slim
|
||||
docker-develop-bullseye:
|
||||
docker pull --platform=amd64 golang:1-bullseye
|
||||
docker pull --platform=arm64 golang:1-bullseye
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 bullseye /bullseye
|
||||
docker-develop-bullseye-slim:
|
||||
docker pull --platform=amd64 debian:bullseye-slim
|
||||
docker pull --platform=arm64 debian:bullseye-slim
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 bullseye-slim /bullseye-slim
|
||||
develop-armv7: docker-develop-armv7
|
||||
docker-develop-armv7:
|
||||
docker pull --platform=arm ubuntu:mantic
|
||||
scripts/docker/buildx.sh develop linux/arm armv7 /armv7
|
||||
docker-develop-buster:
|
||||
docker pull --platform=amd64 golang:1-buster
|
||||
docker pull --platform=arm64 golang:1-buster
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 buster /buster
|
||||
docker-develop-impish:
|
||||
docker pull --platform=amd64 ubuntu:impish
|
||||
docker pull --platform=arm64 ubuntu:impish
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 impish /impish
|
||||
docker-develop-jammy:
|
||||
docker pull --platform=amd64 ubuntu:jammy
|
||||
docker pull --platform=arm64 ubuntu:jammy
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 jammy /jammy
|
||||
docker-develop-jammy-slim:
|
||||
docker pull --platform=amd64 ubuntu:jammy
|
||||
docker pull --platform=arm64 ubuntu:jammy
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 jammy-slim /jammy-slim
|
||||
docker-develop-lunar:
|
||||
docker pull --platform=amd64 ubuntu:lunar
|
||||
docker pull --platform=arm64 ubuntu:lunar
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 lunar /lunar
|
||||
docker-develop-lunar-slim:
|
||||
docker pull --platform=amd64 ubuntu:lunar
|
||||
docker pull --platform=arm64 ubuntu:lunar
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 lunar-slim /lunar-slim
|
||||
docker-develop-mantic:
|
||||
docker pull --platform=amd64 ubuntu:mantic
|
||||
docker pull --platform=arm64 ubuntu:mantic
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 mantic /mantic "-t photoprism/develop:latest -t photoprism/develop:ubuntu"
|
||||
docker-develop-mantic-slim:
|
||||
docker pull --platform=amd64 ubuntu:mantic
|
||||
docker pull --platform=arm64 ubuntu:mantic
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 mantic-slim /mantic-slim
|
||||
unstable: docker-unstable
|
||||
docker-unstable: docker-unstable-mantic
|
||||
docker-unstable-jammy:
|
||||
docker pull --platform=amd64 photoprism/develop:jammy
|
||||
docker pull --platform=amd64 photoprism/develop:jammy-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64 unstable-ce /jammy
|
||||
docker-unstable-lunar:
|
||||
docker pull --platform=amd64 photoprism/develop:lunar
|
||||
docker pull --platform=amd64 photoprism/develop:lunar-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64 unstable-ce /lunar
|
||||
docker-unstable-mantic:
|
||||
docker pull --platform=amd64 photoprism/develop:mantic
|
||||
docker pull --platform=amd64 photoprism/develop:mantic-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64 unstable-ce /mantic
|
||||
preview: docker-preview-ce
|
||||
docker-preview: docker-preview-ce
|
||||
docker-preview-all: docker-preview-latest docker-preview-other
|
||||
docker-preview-ce: docker-preview-mantic
|
||||
docker-preview-latest: docker-preview-ubuntu
|
||||
docker-preview-debian: docker-preview-bookworm
|
||||
docker-preview-ubuntu: docker-preview-mantic
|
||||
docker-preview-other: docker-preview-debian docker-preview-bullseye
|
||||
docker-preview-arm: docker-preview-arm64 docker-preview-armv7
|
||||
docker-preview-bookworm:
|
||||
docker pull --platform=amd64 photoprism/develop:bookworm
|
||||
docker pull --platform=amd64 photoprism/develop:bookworm-slim
|
||||
docker pull --platform=arm64 photoprism/develop:bookworm
|
||||
docker pull --platform=arm64 photoprism/develop:bookworm-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-bookworm /bookworm "-t photoprism/photoprism:preview-ce-debian"
|
||||
docker-preview-armv7:
|
||||
docker pull --platform=arm photoprism/develop:armv7
|
||||
docker pull --platform=arm ubuntu:mantic
|
||||
scripts/docker/buildx.sh photoprism linux/arm preview-armv7 /armv7
|
||||
docker-preview-arm64:
|
||||
docker pull --platform=arm64 photoprism/develop:lunar
|
||||
docker pull --platform=arm64 photoprism/develop:lunar-slim
|
||||
scripts/docker/buildx.sh photoprism linux/arm64 preview-arm64 /lunar
|
||||
docker-preview-bullseye:
|
||||
docker pull --platform=amd64 photoprism/develop:bullseye
|
||||
docker pull --platform=amd64 photoprism/develop:bullseye-slim
|
||||
docker pull --platform=arm64 photoprism/develop:bullseye
|
||||
docker pull --platform=arm64 photoprism/develop:bullseye-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-bullseye /bullseye
|
||||
docker-preview-buster:
|
||||
docker pull --platform=amd64 photoprism/develop:buster
|
||||
docker pull --platform=arm64 photoprism/develop:buster
|
||||
docker pull --platform=amd64 debian:buster-slim
|
||||
docker pull --platform=arm64 debian:buster-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-buster /buster
|
||||
docker-preview-impish:
|
||||
docker pull --platform=amd64 photoprism/develop:impish
|
||||
docker pull --platform=arm64 photoprism/develop:impish
|
||||
docker pull --platform=amd64 ubuntu:impish
|
||||
docker pull --platform=arm64 ubuntu:impish
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-impish /impish
|
||||
docker-preview-jammy:
|
||||
docker pull --platform=amd64 photoprism/develop:jammy
|
||||
docker pull --platform=amd64 photoprism/develop:jammy-slim
|
||||
docker pull --platform=arm64 photoprism/develop:jammy
|
||||
docker pull --platform=arm64 photoprism/develop:jammy-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-ce /jammy
|
||||
docker-preview-lunar:
|
||||
docker pull --platform=amd64 photoprism/develop:lunar
|
||||
docker pull --platform=amd64 photoprism/develop:lunar-slim
|
||||
docker pull --platform=arm64 photoprism/develop:lunar
|
||||
docker pull --platform=arm64 photoprism/develop:lunar-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-ce /lunar
|
||||
docker-preview-mantic:
|
||||
docker pull --platform=amd64 photoprism/develop:mantic
|
||||
docker pull --platform=amd64 photoprism/develop:mantic-slim
|
||||
docker pull --platform=arm64 photoprism/develop:mantic
|
||||
docker pull --platform=arm64 photoprism/develop:mantic-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-ce /mantic
|
||||
release: docker-release
|
||||
docker-release: docker-release-latest
|
||||
docker-release-all: docker-release-latest docker-release-other
|
||||
docker-release-latest: docker-release-ubuntu
|
||||
docker-release-debian: docker-release-bookworm
|
||||
docker-release-ubuntu: docker-release-mantic
|
||||
docker-release-other: docker-release-debian docker-release-bullseye
|
||||
docker-release-arm: docker-release-arm64 docker-release-armv7
|
||||
docker-release-bookworm:
|
||||
docker pull --platform=amd64 photoprism/develop:bookworm
|
||||
docker pull --platform=amd64 photoprism/develop:bookworm-slim
|
||||
docker pull --platform=arm64 photoprism/develop:bookworm
|
||||
docker pull --platform=arm64 photoprism/develop:bookworm-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-bookworm /bookworm "-t photoprism/photoprism:ce-debian"
|
||||
docker-release-armv7:
|
||||
docker pull --platform=arm photoprism/develop:armv7
|
||||
docker pull --platform=arm ubuntu:mantic
|
||||
scripts/docker/buildx.sh photoprism linux/arm armv7 /armv7
|
||||
docker-release-arm64:
|
||||
docker pull --platform=arm64 photoprism/develop:lunar
|
||||
docker pull --platform=arm64 photoprism/develop:lunar-slim
|
||||
scripts/docker/buildx.sh photoprism linux/arm64 ce-arm64 /lunar
|
||||
docker-release-bullseye:
|
||||
docker pull --platform=amd64 photoprism/develop:bullseye
|
||||
docker pull --platform=amd64 photoprism/develop:bullseye-slim
|
||||
docker pull --platform=arm64 photoprism/develop:bullseye
|
||||
docker pull --platform=arm64 photoprism/develop:bullseye-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-bullseye /bullseye
|
||||
docker-release-buster:
|
||||
docker pull --platform=amd64 photoprism/develop:buster
|
||||
docker pull --platform=arm64 photoprism/develop:buster
|
||||
docker pull --platform=amd64 debian:buster-slim
|
||||
docker pull --platform=arm64 debian:buster-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-buster /buster
|
||||
docker-release-impish:
|
||||
docker pull --platform=amd64 photoprism/develop:impish
|
||||
docker pull --platform=arm64 photoprism/develop:impish
|
||||
docker pull --platform=amd64 ubuntu:impish
|
||||
docker pull --platform=arm64 ubuntu:impish
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-impish /impish
|
||||
docker-release-jammy:
|
||||
docker pull --platform=amd64 photoprism/develop:jammy
|
||||
docker pull --platform=amd64 photoprism/develop:jammy-slim
|
||||
docker pull --platform=arm64 photoprism/develop:jammy
|
||||
docker pull --platform=arm64 photoprism/develop:jammy-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-jammy /jammy
|
||||
docker-release-lunar:
|
||||
docker pull --platform=amd64 photoprism/develop:lunar
|
||||
docker pull --platform=amd64 photoprism/develop:lunar-slim
|
||||
docker pull --platform=arm64 photoprism/develop:lunar
|
||||
docker pull --platform=arm64 photoprism/develop:lunar-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce /lunar
|
||||
docker-release-mantic:
|
||||
docker pull --platform=amd64 photoprism/develop:mantic
|
||||
docker pull --platform=amd64 photoprism/develop:mantic-slim
|
||||
docker pull --platform=arm64 photoprism/develop:mantic
|
||||
docker pull --platform=arm64 photoprism/develop:mantic-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce /mantic
|
||||
start-local:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.local.yml up -d --wait
|
||||
stop-local:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.local.yml stop
|
||||
mysql:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml pull mysql
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml stop mysql
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml up -d --wait mysql
|
||||
start-mysql:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml up -d --wait mysql
|
||||
stop-mysql:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml stop mysql
|
||||
logs-mysql:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml logs -f mysql
|
||||
latest:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml pull photoprism-latest
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml stop photoprism-latest
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml up -d --wait photoprism-latest
|
||||
start-latest:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml up photoprism-latest
|
||||
stop-latest:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml stop photoprism-latest
|
||||
terminal-latest:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml exec photoprism-latest bash
|
||||
logs-latest:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml logs -f photoprism-latest
|
||||
docker-local: docker-local-mantic
|
||||
docker-local-all: docker-local-mantic docker-local-lunar docker-local-jammy docker-local-bookworm docker-local-bullseye docker-local-buster
|
||||
docker-local-bookworm:
|
||||
docker pull photoprism/develop:bookworm
|
||||
docker pull photoprism/develop:bookworm-slim
|
||||
scripts/docker/build.sh photoprism ce-bookworm /bookworm "-t photoprism/photoprism:local"
|
||||
docker-local-bullseye:
|
||||
docker pull photoprism/develop:bullseye
|
||||
docker pull photoprism/develop:bullseye-slim
|
||||
scripts/docker/build.sh photoprism ce-bullseye /bullseye "-t photoprism/photoprism:local"
|
||||
docker-local-buster:
|
||||
docker pull photoprism/develop:buster
|
||||
docker pull debian:buster-slim
|
||||
scripts/docker/build.sh photoprism ce-buster /buster "-t photoprism/photoprism:local"
|
||||
docker-local-impish:
|
||||
docker pull photoprism/develop:impish
|
||||
docker pull ubuntu:impish
|
||||
scripts/docker/build.sh photoprism ce-impish /impish "-t photoprism/photoprism:local"
|
||||
docker-local-jammy:
|
||||
docker pull photoprism/develop:jammy
|
||||
docker pull ubuntu:jammy
|
||||
scripts/docker/build.sh photoprism ce-jammy /jammy "-t photoprism/photoprism:local"
|
||||
docker-local-lunar:
|
||||
docker pull photoprism/develop:lunar
|
||||
docker pull ubuntu:lunar
|
||||
scripts/docker/build.sh photoprism ce-lunar /lunar "-t photoprism/photoprism:local"
|
||||
docker-local-mantic:
|
||||
docker pull photoprism/develop:mantic
|
||||
docker pull ubuntu:mantic
|
||||
scripts/docker/build.sh photoprism ce-mantic /mantic "-t photoprism/photoprism:local"
|
||||
docker-local-develop: docker-local-develop-mantic
|
||||
docker-local-develop-all: docker-local-develop-mantic docker-local-develop-lunar docker-local-develop-jammy docker-local-develop-bookworm docker-local-develop-bullseye docker-local-develop-buster docker-local-develop-impish
|
||||
docker-local-develop-bookworm:
|
||||
docker pull debian:bookworm-slim
|
||||
scripts/docker/build.sh develop bookworm /bookworm
|
||||
docker-local-develop-bullseye:
|
||||
docker pull golang:1-bullseye
|
||||
scripts/docker/build.sh develop bullseye /bullseye
|
||||
docker-local-develop-buster:
|
||||
docker pull golang:1-buster
|
||||
scripts/docker/build.sh develop buster /buster
|
||||
docker-local-develop-impish:
|
||||
docker pull ubuntu:impish
|
||||
scripts/docker/build.sh develop impish /impish
|
||||
docker-local-develop-jammy:
|
||||
docker pull ubuntu:jammy
|
||||
scripts/docker/build.sh develop jammy /jammy
|
||||
docker-local-develop-lunar:
|
||||
docker pull ubuntu:lunar
|
||||
scripts/docker/build.sh develop lunar /lunar
|
||||
docker-local-develop-mantic:
|
||||
docker pull ubuntu:mantic
|
||||
scripts/docker/build.sh develop mantic /mantic
|
||||
docker-ddns:
|
||||
docker pull golang:alpine
|
||||
scripts/docker/buildx-multi.sh ddns linux/amd64,linux/arm64 $(BUILD_DATE)
|
||||
docker-goproxy:
|
||||
docker pull golang:alpine
|
||||
scripts/docker/buildx-multi.sh goproxy linux/amd64,linux/arm64 $(BUILD_DATE)
|
||||
demo: docker-demo
|
||||
docker-demo: docker-demo-latest
|
||||
docker-demo-all: docker-demo-latest docker-demo-debian
|
||||
docker-demo-latest:
|
||||
docker pull photoprism/photoprism:preview-ce
|
||||
scripts/docker/build.sh demo ce
|
||||
scripts/docker/push.sh demo ce
|
||||
docker-demo-debian:
|
||||
docker pull photoprism/photoprism:preview-ce-debian
|
||||
scripts/docker/build.sh demo debian /debian
|
||||
scripts/docker/push.sh demo debian
|
||||
docker-demo-ubuntu:
|
||||
docker pull photoprism/photoprism:preview-ce-ubuntu
|
||||
scripts/docker/build.sh demo ubuntu /ubuntu
|
||||
scripts/docker/push.sh demo ubuntu
|
||||
docker-demo-unstable:
|
||||
docker pull photoprism/photoprism:unstable-ce
|
||||
scripts/docker/build.sh demo $(BUILD_DATE) /unstable
|
||||
scripts/docker/push.sh demo $(BUILD_DATE)
|
||||
docker-demo-local:
|
||||
scripts/docker/build.sh photoprism
|
||||
scripts/docker/build.sh demo $(BUILD_DATE) /debian
|
||||
scripts/docker/push.sh demo $(BUILD_DATE)
|
||||
docker-dummy-webdav:
|
||||
docker pull --platform=amd64 golang:1
|
||||
docker pull --platform=arm64 golang:1
|
||||
scripts/docker/buildx-multi.sh dummy-webdav linux/amd64,linux/arm64 $(BUILD_DATE)
|
||||
docker-dummy-oidc:
|
||||
docker pull --platform=amd64 golang:1
|
||||
docker pull --platform=arm64 golang:1
|
||||
scripts/docker/buildx-multi.sh dummy-oidc linux/amd64,linux/arm64 $(BUILD_DATE)
|
||||
packer-digitalocean:
|
||||
$(info Buildinng DigitalOcean marketplace image...)
|
||||
(cd ./setup/docker/cloud && packer build digitalocean.json)
|
||||
drone-sign:
|
||||
drone sign photoprism/photoprism --save
|
||||
clean:
|
||||
rm -f $(BINARY_NAME)
|
||||
rm -f *.log
|
||||
rm -rf node_modules
|
||||
rm -rf assets/testdata
|
||||
rm -rf assets/backups
|
||||
rm -rf frontend/node_modules
|
||||
docker-development:
|
||||
scripts/docker-build.sh development $(DOCKER_TAG)
|
||||
scripts/docker-push.sh development $(DOCKER_TAG)
|
||||
docker-photoprism:
|
||||
scripts/docker-build.sh photoprism $(DOCKER_TAG)
|
||||
scripts/docker-push.sh photoprism $(DOCKER_TAG)
|
||||
docker-photoprism-arm64:
|
||||
scripts/docker-build.sh photoprism-arm64 $(DOCKER_TAG)
|
||||
scripts/docker-push.sh photoprism-arm64 $(DOCKER_TAG)
|
||||
docker-demo:
|
||||
scripts/docker-build.sh demo $(DOCKER_TAG)
|
||||
scripts/docker-push.sh demo $(DOCKER_TAG)
|
||||
docker-webdav:
|
||||
scripts/docker-build.sh webdav $(DOCKER_TAG)
|
||||
scripts/docker-push.sh webdav $(DOCKER_TAG)
|
||||
lint-js:
|
||||
(cd frontend && npm run lint)
|
||||
fmt-js:
|
||||
(cd frontend && npm run fmt)
|
||||
fmt-imports:
|
||||
goimports -w pkg internal cmd
|
||||
fmt-go:
|
||||
go fmt ./pkg/... ./internal/... ./cmd/...
|
||||
gofmt -w -s pkg internal cmd
|
||||
goimports -w pkg internal cmd
|
||||
tidy:
|
||||
go mod tidy -go=1.16 && go mod tidy -go=1.17
|
||||
users:
|
||||
./photoprism users add -p photoprism -r admin -s -a test:true -n "Alice Austen" superadmin
|
||||
./photoprism users ls
|
||||
|
||||
# Declare all targets as "PHONY", see https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html.
|
||||
MAKEFLAGS += --always-make
|
||||
.PHONY: all assets build cmd docker frontend internal pkg scripts storage photoprism install;
|
||||
go mod tidy
|
||||
|
|
35020
NOTICE
177
README.md
|
@ -1,110 +1,141 @@
|
|||
PhotoPrism: Browse Your Life in Pictures
|
||||
PhotoPrism: Browse your life in pictures
|
||||
========================================
|
||||
|
||||
[](https://docs.photoprism.app/license/agpl/)
|
||||
[](https://docs.photoprism.app/)
|
||||
[](https://link.photoprism.app/chat)
|
||||
[](https://link.photoprism.app/discussions)
|
||||
[](https://photoprism.bsky.social/)
|
||||
[](https://floss.social/@photoprism)
|
||||
[][license]
|
||||
[][goreport]
|
||||
[][ci]
|
||||
[][docs]
|
||||
[](https://github.com/photoprism/photoprism/graphs/contributors/)
|
||||
[][chat]
|
||||
[][twitter]
|
||||
|
||||
PhotoPrism® is an AI-Powered Photos App for the [Decentralized Web](https://en.wikipedia.org/wiki/Decentralized_web).
|
||||
It makes use of the latest technologies to tag and find pictures automatically without getting in your way.
|
||||
You can run it at home, on a private server, or in the cloud.
|
||||
PhotoPrism is a server-based application for browsing, organizing and sharing your personal photo collection.
|
||||
It makes use of the latest technologies to automatically tag and find pictures without getting in your way.
|
||||
Say goodbye to solutions that force you to upload your visual memories to the cloud.
|
||||
|
||||

|
||||

|
||||
|
||||
To get a first impression, you are welcome to play with our [public demo](https://try.photoprism.app/). Please be careful not to upload any private, unlawful or offensive pictures.
|
||||
More screenshots: https://github.com/photoprism/photoprism/wiki/Screenshots
|
||||
|
||||
## Feature Overview ##
|
||||
## What to expect ##
|
||||
|
||||
**Our mission is to provide the most user- and privacy-friendly solution to keep your pictures organized and accessible.** That's why PhotoPrism was built from the ground up to run wherever you need it, without compromising freedom, privacy, or functionality:
|
||||
* Clearly structured Web interface for browsing, organizing and sharing your personal photo collection
|
||||
* Import everything without worrying about duplicates or [RAW to JPEG conversion][wiki:raw]
|
||||
* [Geocoding][wiki:geocoding], [XMP support][wiki:xmp] and [automated tagging][wiki:classification]
|
||||
based on Google TensorFlow
|
||||
|
||||
* Browse [all your photos](https://docs.photoprism.app/user-guide/organize/browse/) and [videos](https://try.photoprism.app/library/videos) without worrying about [RAW conversion, duplicates or video formats](https://docs.photoprism.app/user-guide/settings/library/)
|
||||
* Easily find specific pictures using [powerful search filters](https://try.photoprism.app/library/browse?view=cards&q=flower%20color%3Ared)
|
||||
* Recognizes [the faces of your family and friends](https://try.photoprism.app/library/people)
|
||||
* [Automatic classification](https://try.photoprism.app/library/labels) of pictures based on their content and location
|
||||
* [Play Live Photos](https://try.photoprism.app/library/live) by hovering over them in [albums](https://try.photoprism.app/library/albums) and [search results](https://try.photoprism.app/library/browse?view=cards&q=type%3Alive)
|
||||
* Since the [User Interface](https://try.photoprism.app/) is a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps),
|
||||
it provides a native app-like experience, and you can conveniently install it on the home screen of all major operating systems and mobile devices
|
||||
* Includes four high-resolution [World Maps](https://try.photoprism.app/library/places) to bring back the memories of your favorite trips
|
||||
* Metadata is extracted and merged from Exif, XMP, and other sources such as Google Photos
|
||||
* Many more image properties like [Colors](https://try.photoprism.app/library/browse?view=cards&q=color:red), [Chroma](https://try.photoprism.app/library/browse?view=cards&q=mono%3Atrue), and [Quality](https://try.photoprism.app/library/review) can be searched as well
|
||||
* Use [PhotoSync](https://link.photoprism.app/photosync) to securely backup iOS and Android phones in the background
|
||||
* WebDAV clients such as Microsoft's Windows Explorer and Apple's Finder [can connect directly](https://docs.photoprism.app/user-guide/sync/webdav/) to PhotoPrism, allowing you to open, edit, and delete files from your computer as if they were local
|
||||
## For the early birds ##
|
||||
|
||||
Being completely [**self-funded and independent**](https://link.photoprism.app/membership), we can promise you that we will [never sell your data](https://www.photoprism.app/privacy) and that we will [always be transparent](https://www.photoprism.app/terms) about our software and services. Your data will never be shared with Google, Amazon, Microsoft or Apple unless you intentionally upload files to one of their services. 🔒
|
||||
You're welcome to play with our demo at [demo.photoprism.org](https://demo.photoprism.org).
|
||||
Leave your email to get a [release notification](https://goo.gl/forms/KBPVGl9PCsOKrAv33).
|
||||
|
||||
## Getting Started ##
|
||||
<img align="right" width="25%" src="https://www.photoprism.app/user/pages/01.home/03._screenshots/iphone-maps-hybrid-540px.png">
|
||||
Step-by-step [installation instructions](https://docs.photoprism.org/en/latest/getting-started/) can be found
|
||||
in our [User Guide](https://docs.photoprism.org/en/latest/).
|
||||
Developers can skip this and move on to the [Developer Guide](https://docs.photoprism.org/en/latest/developer-guide/).
|
||||
|
||||
Step-by-step [installation instructions](https://docs.photoprism.app/getting-started/) for our self-hosted [community edition](https://link.photoprism.app/personal-editions) can be found on [docs.photoprism.app](https://docs.photoprism.app/getting-started/) - all you need is a Web browser and [Docker](https://docs.docker.com/get-docker/) to run the server. It is available for Mac, Linux, and Windows.
|
||||
All you need is a Web browser and [Docker](https://store.docker.com/search?type=edition&offering=community)
|
||||
to run the server. It is available for Mac, Linux and Windows.
|
||||
|
||||
The [stable releases](https://docs.photoprism.app/release-notes/) and [development preview](https://docs.photoprism.app/getting-started/updates/#development-preview) are available as a [multi-arch image](https://link.photoprism.app/docker-hub) for 64-bit AMD, Intel, and ARM processors.
|
||||
That means, [Raspberry Pi](https://docs.photoprism.app/getting-started/raspberry-pi/) and Apple Silicon users enjoy the exact same functionality and can follow the same [installation steps](https://docs.photoprism.app/getting-started/docker-compose/).
|
||||
There is also a [pre-installed Raspberry Pi image here](https://github.com/guysoft/PhotoPrismPi).
|
||||
|
||||
See our [Getting Started FAQ](https://docs.photoprism.app/getting-started/faq/#how-can-i-install-photoprism-without-docker) for alternative installation methods, for example using the [*tar.gz* packages](https://dl.photoprism.app/pkg/linux/README.html) we provide.
|
||||
Note that this is work in progress. We do our best to provide a complete, stable version.
|
||||
If you have a question, don't hesitate to ask in our [help forum][help]
|
||||
or [contact us via email](mailto:hello@photoprism.org).
|
||||
|
||||
## Support Our Mission 💎 ##
|
||||
## Why this has to be free software ##
|
||||
|
||||
**PhotoPrism is 100% self-funded and independent.** Your [continued support](https://link.photoprism.app/membership) helps us [provide more features to the public](https://www.photoprism.app/oss/faq#what-functionality-is-generally-available), release [regular updates](https://docs.photoprism.app/release-notes/), and remain independent!
|
||||
The development of every commercial product is focused on monetization.
|
||||
We've [built similar apps more than once](https://github.com/photoprism/photoprism/wiki/Mediencenter)
|
||||
and every single time the constraints of working
|
||||
in a profit-oriented corporate environment were an impediment.
|
||||
|
||||
Our members [enjoy additional features](https://www.photoprism.app/kb/personal), including access to [interactive world maps](https://try.photoprism.app/library/places), and can join our private chat room to [connect with our team](https://www.photoprism.app/about/team). We currently have the following membership options:
|
||||
We are sure we can do better with only a fraction of the budget. Simplicity - the art of maximizing the
|
||||
amount of work not done - can be very powerful.
|
||||
Go itself is a [great example](https://talks.golang.org/2015/simplicity-is-complicated.slide).
|
||||
|
||||
- You can [sign up directly on our website](https://link.photoprism.app/membership) and pay with credit card or SEPA through Stripe, so you don't need to [link an external account](https://www.photoprism.app/kb/activation) and can easily upgrade or downgrade at any time
|
||||
- Alternatively, [Patreon](https://link.photoprism.app/patreon) also supports PayPal, additional currencies, and lets you choose between monthly and annual billing for all tiers
|
||||
Our long-term goal is to become an open platform for machine
|
||||
learning [research](https://github.com/photoprism/photoprism/wiki/Research) based on real-world photo collections.
|
||||
We're already in contact with data scientists who like our idea.
|
||||
|
||||
If you currently support us through [GitHub Sponsors](https://link.photoprism.app/sponsor), you can also [register on our website](https://my.photoprism.app/register) and use the *Activate GitHub Sponsors Membership* button to link your account. For details on this and how to [link your Patreon account](https://www.patreon.com/pledges), see our [Activation Guide](https://www.photoprism.app/kb/activation).
|
||||
## How to contribute ##
|
||||
|
||||
You are [welcome to contact us](https://www.photoprism.app/contact) for change requests, membership questions, and business partnerships.
|
||||
We welcome contributions of any kind. If you have a bug or an idea, read our
|
||||
[guide](https://docs.photoprism.org/en/latest/developer-guide/) before opening an issue.
|
||||
Issues labeled [help wanted](https://github.com/photoprism/photoprism/labels/help%20wanted) /
|
||||
[easy](https://github.com/photoprism/photoprism/issues?q=is%3Aissue+is%3Aopen+label%3Aeasy) can be
|
||||
good (first) contributions.
|
||||
|
||||
[View Membership FAQ ›](https://www.photoprism.app/kb/membership) [Sign Up ›](https://link.photoprism.app/membership)
|
||||
Please follow us on [Twitter][twitter] and join our [developers mailing list](https://groups.google.com/a/photoprism.org/forum/#!forum/developers)
|
||||
to receive regular project updates and discuss development related topics. Don't be afraid to ask stupid questions.
|
||||
|
||||
### Why Your Support Matters ###
|
||||
## Free beer ##
|
||||
|
||||
- Your continued support helps us provide regular updates and remain independent, so we can fulfill our mission and protect your privacy
|
||||
- Sustained funding is key to quickly releasing new features requested by you and other community members
|
||||
- Being self-funded and independent, we can personally promise you that we will never sell your data and that we will always be transparent about our software and services
|
||||
This project is about freedom and privacy but not necessarily about free beer. We feel like it
|
||||
would be a mistake to state there will be no costs, because clearly we have huge expenses, your server hardware
|
||||
will have a price tag and then maybe you'd like to have some extra features that need to be developed.
|
||||
|
||||
Please also leave [a star](https://github.com/photoprism/photoprism/stargazers) on GitHub if you like this project. It provides additional motivation to keep going.
|
||||
It's fair to say that users with basic needs will have no monthly costs. We were also way more effective
|
||||
per dollar than commercial projects and learned a lot on top of it.
|
||||
An earlier version of this document contained a rough number, but at the end of the day it doesn't matter.
|
||||
|
||||
**A big thank you to all current and past sponsors, whose generous support has been and continues to be essential to the success of the project!**
|
||||
Basically all established OSS companies make 90% of their revenue with enterprise customers, that's why private users
|
||||
and single developers typically get everything for free. Obviously that doesn't work if you have only private users
|
||||
that refuse to share their data on top of it. In our opinion it would have made sense to finance this like all
|
||||
public infrastructure, our expenses are peanuts compared to building a road.
|
||||
|
||||
[View Sponsors ›](SPONSORS.md) [View Credits ›](https://docs.photoprism.app/credits/)
|
||||
Looking forward, specific solutions for funding development and maintenance could be to...
|
||||
|
||||
## Getting Support ##
|
||||
- sell a tested & supported version in the app store while our contributors and other developers can
|
||||
continue to use Docker or build from source
|
||||
- offer a geodata, public events and maps subscription since OpenStreetMap doesn't want us to use their development
|
||||
API for production, which is perfectly fine
|
||||
|
||||
Visit [docs.photoprism.app/user-guide](https://docs.photoprism.app/user-guide/) to learn how to [sync](https://docs.photoprism.app/user-guide/sync/webdav/), [organize](https://docs.photoprism.app/user-guide/library/), and [share](https://docs.photoprism.app/user-guide/share/) your pictures. If you need help installing our software at home, you are welcome to post your question in [GitHub Discussions](https://link.photoprism.app/discussions) or ask in our [Community Chat](https://link.photoprism.app/chat).
|
||||
Common problems can be quickly diagnosed and solved using our [Troubleshooting Checklists](https://docs.photoprism.app/getting-started/troubleshooting/). Eligible [members](https://link.photoprism.app/membership) are also welcome to email us for technical support and advice.
|
||||
## Donations ##
|
||||
|
||||
## Upcoming Features and Enhancements ##
|
||||
You're most welcome to support us via [GitHub Sponsors](https://github.com/sponsors/lastzero),
|
||||
especially if you need help with using our software. They will match every donation in the first year.
|
||||
In addition, you can find us on [Patreon](https://www.patreon.com/photoprism) and [PayPal](https://www.paypal.me/photoprism).
|
||||
Our [sponsors](https://github.com/photoprism/photoprism/blob/develop/SPONSORS.md) and
|
||||
[contributors](https://github.com/photoprism/photoprism/graphs/contributors/) will get for free whatever we might
|
||||
have to charge for a geodata subscription later.
|
||||
|
||||
Our [Project Roadmap](https://link.photoprism.app/roadmap) shows what tasks are in progress and what features will be implemented next. You are invited to give ideas you like a thumbs-up, so we know what's most popular.
|
||||
Also please [leave a star](https://github.com/photoprism/photoprism/stargazers) on GitHub if you like this project,
|
||||
it provides additional motivation to keep going.
|
||||
|
||||
Be aware that we have a zero-bug policy and do our best to help users when they need support or have other questions. This comes at a price though, as we can't give exact release dates for new features. Our team receives many more requests than can be implemented, so we want to emphasize that we are in no way obligated to implement the features, enhancements, or other changes you request. We do, however, appreciate your feedback and carefully consider all requests.
|
||||
Ideas backed by a sponsor are marked with a golden [sponsor](https://github.com/photoprism/photoprism/issues?q=is%3Aissue+is%3Aopen+label%3Asponsor) label.
|
||||
Let us know if we mistakenly label an idea as [unfunded](https://github.com/photoprism/photoprism/issues?q=is%3Aissue+is%3Aopen+label%3Aunfunded).
|
||||
|
||||
**Because sustained funding is key to quickly releasing new features, we encourage you to support our mission by [signing up as a sponsor](https://link.photoprism.app/sponsor) or purchasing a [commercial license](https://www.photoprism.app/teams). Ultimately, that's what's best for the product and the community.**
|
||||
Thank you very much! <3
|
||||
|
||||
## GitHub Issues ⚠️ ##
|
||||
## Public and corporate sponsorship ##
|
||||
|
||||
We kindly ask you not to report bugs via GitHub Issues **unless you are certain to have found a fully reproducible and previously unreported issue** that must be fixed directly in the app. Thank you for your careful consideration!
|
||||
We spent weeks asking organizations like [The Prototype Fund](https://prototypefund.de/en/) for help
|
||||
and also tried to cooperate with companies like Mapbox and Cewe.
|
||||
You would think it's easier to get a few dollars with [our background](http://docs.photoprism.org/en/latest/team/)
|
||||
and [working code](https://demo.photoprism.org/).
|
||||
|
||||
- When reporting a problem, always include the software versions you are using and other information about your environment such as [browser, browser plugins](https://docs.photoprism.app/getting-started/troubleshooting/browsers/), operating system, [storage type](https://docs.photoprism.app/getting-started/troubleshooting/performance/#storage), [memory size](https://docs.photoprism.app/getting-started/troubleshooting/performance/#memory), and [processor](https://docs.photoprism.app/getting-started/troubleshooting/performance/#server-cpu)
|
||||
- Note that all issue **subscribers receive an email notification** from GitHub whenever a new comment is added, so these should only be used for sharing important information and not for discussions, questions or expressing personal opinions
|
||||
- [Contact us](https://www.photoprism.app/contact) or [a community member](https://link.photoprism.app/discussions) if you need help, it could be a local configuration problem, or a misunderstanding in how the software works
|
||||
- This gives our team the opportunity to [improve the docs](https://docs.photoprism.app/getting-started/troubleshooting/) and provide best-in-class support to you, instead of handling unclear/duplicate bug reports or triggering a flood of notifications by responding to comments
|
||||
If any of those organizations changes their mind, they are welcome to [reach out to us](mailto:hello@photoprism.org).
|
||||
|
||||
## Connect with the Community ##
|
||||
## Disclaimer ##
|
||||
|
||||
Follow us on [Twitter](https://link.photoprism.app/twitter) and join the [Community Chat](https://link.photoprism.app/chat)
|
||||
to get regular updates, connect with other users, and discuss your ideas. Our [Code of Conduct](https://www.photoprism.app/code-of-conduct) explains the "dos and don’ts" when interacting with other community members.
|
||||
We'd like to remind everyone that we are not full-time marketing specialists but developers who work a lot and
|
||||
enjoy a bit of sarcasm from time to time. Please let us know when there is an issue with our "nuance and tone"
|
||||
and we'll find a solution.
|
||||
|
||||
Feel free to contact us at [hello@photoprism.app](mailto:hello@photoprism.app) with anything that is on your mind. We appreciate your feedback! Due to the high volume of emails we receive, our team may be unable to get back to you immediately. We do our best to respond within five business days or less.
|
||||
|
||||
## Every Contribution Makes a Difference ##
|
||||
|
||||
We welcome [contributions](CONTRIBUTING.md) of any kind, including blog posts, tutorials, translations, testing, writing documentation, and pull requests. Our [Developer Guide](https://docs.photoprism.app/developer-guide/) contains all the information necessary for you to get started.
|
||||
|
||||
----
|
||||
|
||||
*PhotoPrism® is a [registered trademark](https://www.photoprism.app/trademark). By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms), [Privacy Policy](https://www.photoprism.app/privacy), and [Code of Conduct](https://www.photoprism.app/code-of-conduct). Docs are [available](https://link.photoprism.app/github-docs) under the [CC BY-NC-SA 4.0 License](https://creativecommons.org/licenses/by-nc-sa/4.0/); [additional terms](https://github.com/photoprism/photoprism/blob/develop/assets/README.md) may apply.*
|
||||
[wiki:classification]: https://github.com/photoprism/photoprism/wiki/Image-Classification
|
||||
[wiki:xmp]: https://github.com/photoprism/photoprism/wiki/XMP
|
||||
[wiki:geocoding]: https://github.com/photoprism/photoprism/wiki/Geocoding
|
||||
[wiki:raw]: https://github.com/photoprism/photoprism/wiki/Converting-RAW-to-JPEG
|
||||
[help]: https://groups.google.com/a/photoprism.org/forum/#!forum/help
|
||||
[license]: https://github.com/photoprism/photoprism/blob/develop/LICENSE
|
||||
[patreon]: https://www.patreon.com/photoprism
|
||||
[paypal]: https://www.paypal.me/photoprism
|
||||
[goreport]: https://goreportcard.com/report/github.com/photoprism/photoprism
|
||||
[coverage]: https://codecov.io/gh/photoprism/photoprism
|
||||
[ci]: https://travis-ci.org/photoprism/photoprism
|
||||
[docs]: https://docs.photoprism.org/en/latest/
|
||||
[issuehunt]: https://issuehunt.io/repos/119160553
|
||||
[chat]: https://gitter.im/browseyourlife/community
|
||||
[twitter]: https://twitter.com/browseyourlife
|
||||
[unfunded issues]: https://github.com/photoprism/photoprism/issues?q=is%3Aissue+is%3Aopen+label%3Aunfunded
|
||||
[sponsored issues]: https://github.com/photoprism/photoprism/issues?q=is%3Aissue+is%3Aopen+label%3Asponsor
|
||||
|
|
32
SECURITY.md
|
@ -1,32 +0,0 @@
|
|||
# PhotoPrism® Security Policy
|
||||
|
||||
**Please contact us at [security@photoprism.app](mailto:security@photoprism.app) when you have discovered a potential security issue.** You are welcome to also report vulnerabilities in third-party applications that we may not be able to fix directly.
|
||||
|
||||
At a minimum, your report should include the following:
|
||||
|
||||
- version and architecture
|
||||
- vulnerability description
|
||||
- reproduction steps
|
||||
|
||||
We will then try to reproduce the problem, determine the impact and get back to you as soon as possible.
|
||||
Confirmed vulnerabilities will be fixed within 90 days, depending on the severity and whether third-party
|
||||
packages are affected.
|
||||
|
||||
## Responsible Disclosure
|
||||
|
||||
1. Confirm that the vulnerability applies to a current version and is reproducible.
|
||||
2. First share the vulnerability details with us so that users are not put at risk.
|
||||
3. Wait before publishing details until everyone has had a chance to update.
|
||||
4. Respect the privacy of others.
|
||||
|
||||
*Avoid activities that disrupt, degrade, or interrupt our services or compromise other users' data, such as spam, brute force attacks, denial of service attacks, and malicious file distribution.*
|
||||
|
||||
## Reporting Issues as a Business or Organization
|
||||
|
||||
(a) If an email we receive appears to be auto-generated and does not look like a legitimate report that has been manually reviewed in accordance with the requirements of this policy, we may ignore it and you should not expect a response in order to protect our ability to respond to actual issues.
|
||||
|
||||
(b) Unless absolutely necessary, for example to report a major issue that has just been discovered, please send requests or reports during regular business hours and never at night or on weekends, especially if they are sent asynchronously.
|
||||
|
||||
(c) Refrain from sending HTML emails as we consider them insecure and unsuitable for this purpose.
|
||||
|
||||
(d) If you are contacting us as a business or organization, we encourage you to include legal and contact information on your website, as failure to provide legally required information may compromise your eligibility and trustworthiness.
|
110
SPONSORS.md
|
@ -1,97 +1,41 @@
|
|||
# Thank You to All Current and Past Sponsors 💎 #
|
||||
Let's join forces
|
||||
=================
|
||||
|
||||
Your [continued support](https://link.photoprism.app/membership) helps us [provide more features to the public](https://www.photoprism.app/oss/faq#what-functionality-is-generally-available), release [regular updates](https://docs.photoprism.app/release-notes/), and remain independent! 💜
|
||||
You're most welcome to support us via [GitHub Sponsors](https://github.com/sponsors/lastzero),
|
||||
especially if you need help with using our software. They will match every donation in the first year.
|
||||
In addition, you can find us on [Patreon][patreon] and [PayPal][paypal].
|
||||
Our sponsors and contributors will get for free whatever we might have to
|
||||
[charge](https://docs.photoprism.org/en/latest/funding/) for a geodata, public events and maps
|
||||
subscription later.
|
||||
|
||||
You are [welcome to contact us](https://www.photoprism.app/contact) for change requests, membership questions, and business partnerships.
|
||||
Also please [leave a star](https://github.com/photoprism/photoprism/stargazers) here on GitHub if you like this project,
|
||||
it provides additional motivation to keep going.
|
||||
|
||||
[View Membership FAQ ›](https://www.photoprism.app/kb/membership) [Contact Us ›](https://www.photoprism.app/contact)
|
||||
Ideas backed by a sponsor are marked with a golden [sponsor][issues:sponsor] label.
|
||||
Let us know if we mistakenly label an idea as [unfunded][issues:unfunded].
|
||||
|
||||
## Platinum Sponsors ##
|
||||
Thank you very much to all of our sponsors and donors (including those that want to stay private)!
|
||||
|
||||
[**Sid Karunaratne**](https://github.com/sakaru) (Patreon, May 2019)
|
||||
## Sponsors ##
|
||||
|
||||
**Andrew** (Patreon, October 2021)
|
||||
[](https://blog.liquidbytes.net/)
|
||||
|
||||
[**@ppibburr**](https://github.com/ppibburr) (GitHub Sponsors, December 2021)
|
||||
[Sid Karunaratne](https://github.com/sakaru) (Patreon, May 2019)
|
||||
|
||||
[**Arto Bendiken**](https://github.com/artob) (GitHub Sponsors, March 2023)
|
||||
[Simen Eriksen](https://github.com/dennorske) (GitHub Sponsors, December 2019)
|
||||
|
||||
**Marko Eckert** (Patreon, May 2023)
|
||||
[Alex Leahu](https://github.com/alxjsn) (GitHub Sponsors, January 2020)
|
||||
|
||||
**Vitold Romanovski** (May 2023)
|
||||
[Thomas Eg](https://github.com/ThomasEg) (GitHub Sponsors, April 2020)
|
||||
|
||||
**Aaron C. de Bruyn** (September 2023)
|
||||
For a full list of GitHub sponsors, see https://github.com/sponsors/lastzero.
|
||||
|
||||
[**Patrick Kvaksrud**](https://github.com/Kvaksrud) (October 2023)
|
||||
## Donations ##
|
||||
|
||||
## Gold Sponsors ##
|
||||
[David Pennington](https://github.com/Xeoncross), Jun Li, Jonas Aaberg, Dmitry, Fabian Graf,
|
||||
Klemens Guder, [Greg](https://github.com/oziee)
|
||||
|
||||
[**Simen Eriksen**](https://github.com/dennorske) (GitHub Sponsors, December 2019)
|
||||
|
||||
[**Alex Leahu**](https://github.com/alxjsn) (GitHub Sponsors, January 2020)
|
||||
|
||||
[**Thomas Eg**](https://github.com/ThomasEg) (GitHub Sponsors, April 2020)
|
||||
|
||||
[**@mpodshivalin**](https://github.com/mpodshivalin) (GitHub Sponsors, July 2020)
|
||||
|
||||
[**@kvtong93**](https://github.com/kvtong93) (GitHub Sponsors, September 2020)
|
||||
|
||||
[**Thomas Eizinger**](https://github.com/thomaseizinger) (GitHub Sponsors, October 2020)
|
||||
|
||||
[**@FreshMosh**](https://github.com/FreshMosh) (GitHub Sponsors, November 2020)
|
||||
|
||||
**Cooper** (Patreon, November 2020)
|
||||
|
||||
[**Asim Aslam**](https://github.com/asim) (GitHub Sponsors, November 2020)
|
||||
|
||||
**Garn Penrod** (Patreon, November 2020)
|
||||
|
||||
[**@anaxmedia**](https://github.com/anaxmedia) (GitHub Sponsors, November 2020)
|
||||
|
||||
[**Kevin Anderson**](https://github.com/kevinanderson1) (GitHub Sponsors, November 2020)
|
||||
|
||||
[**@reyman**](https://github.com/reyman) (GitHub Sponsors, January 2021)
|
||||
|
||||
[**Ben McCann**](https://github.com/benmccann) (GitHub Sponsors, January 2021)
|
||||
|
||||
[**Steven Chan**](https://github.com/nioq) (GitHub Sponsors, April 2021)
|
||||
|
||||
[**Joseph Jacks**](https://github.com/josephjacks) (GitHub Sponsors, June 2021)
|
||||
|
||||
[**Daniel Hähnke**](https://github.com/DanBenHa) (GitHub Sponsors, July 2021)
|
||||
|
||||
[**@jasontitus**](https://github.com/jasontitus) (GitHub Sponsors, October 2021)
|
||||
|
||||
[**Łukasz Anwajler**](https://github.com/anwajler) (GitHub Sponsors, November 2021)
|
||||
|
||||
[**Gyto6**](https://github.com/gyto6) (GitHub Sponsors, May 2022)
|
||||
|
||||
**Sandro Petruzzi** (Patreon, May 2022)
|
||||
|
||||
[**Toly Rugalev**](https://github.com/AnatolyRugalev) (GitHub Sponsors, March 2023)
|
||||
|
||||
[**Yongho Lee**](https://github.com/lyh16) (Patreon, May 2023)
|
||||
|
||||
**Albert R** (Patreon, August 2023)
|
||||
|
||||
**Peter Galbavy** (Patreon, November 2023)
|
||||
|
||||
## Infrastructure Sponsors ##
|
||||
|
||||
Our project infrastructure is provided by the following companies:
|
||||
|
||||
- [**GitHub**](https://github.com/) hosts our [code repositories](https://github.com/photoprism/photoprism) and also provides many other important services
|
||||
- [**Docker**](https://www.docker.com/) approved us for their [Open Source Program](https://www.docker.com/community/open-source/application/) and hosts all of our app images
|
||||
- [**Element**](https://element.io/) develops and [operates the infrastructure](https://matrix.org/) that our [community chat](https://link.photoprism.app/chat) is based on
|
||||
- [**BrowserStack**](https://www.browserstack.com/) provides [free access](https://www.browserstack.com/open-source) to their device and browser testing infrastructure
|
||||
|
||||
[View Credits ›](https://docs.photoprism.app/credits/)
|
||||
|
||||
## One-Time Donations ##
|
||||
|
||||
[WarpinWolf](https://github.com/WarpinWolf), [David Pennington](https://github.com/Xeoncross), Jun Li, Jonas Aaberg, Dmitry, Fabian Graf, Klemens
|
||||
Guder, [Greg](https://github.com/oziee), Jean-Louis Frenkel, [INIT_6](https://twitter.com/init_3), Sandro Rüegge,
|
||||
William Kray, Ovace Mamnoon, Clément Caplain Moreau, The Gordon Project, [@pluja](https://github.com/pluja),
|
||||
[@swingstate](https://github.com/photoprism/photoprism/issues/808#issuecomment-997467377), [Sola](https://github.com/solacrypto)
|
||||
|
||||
[Make Donation ›](https://link.photoprism.app/donate)
|
||||
[patreon]: https://www.patreon.com/photoprism
|
||||
[paypal]: https://www.paypal.me/photoprism
|
||||
[issues:sponsor]: https://github.com/photoprism/photoprism/issues?q=is%3Aissue+is%3Aopen+label%3Asponsor
|
||||
[issues:unfunded]: https://github.com/photoprism/photoprism/issues?q=is%3Aissue+is%3Aopen+label%3Aunfunded
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
examples
|
||||
README.md
|
||||
.*
|
149
assets/README
|
@ -1,149 +0,0 @@
|
|||
|
||||
PhotoPrism® Documentation and Digital Assets
|
||||
|
||||
This Agreement is between you and PhotoPrism UG ("PhotoPrism", "we" or "us").
|
||||
Visit photoprism.app/contact to view our full contact information as required
|
||||
by law.
|
||||
|
||||
We may update this Agreement as necessary (1) for legal reasons or (2) to
|
||||
improve readability and make clarifications that our users request.
|
||||
|
||||
By using the Documentation and Digital Assets we provide, you agree to the
|
||||
terms of this Agreement.
|
||||
|
||||
Last Updated: April 5, 2023
|
||||
|
||||
DEFINITIONS
|
||||
|
||||
"Software" means any software published and distributed by PhotoPrism, either
|
||||
self-hosted, installed on a device, managed, or as a service.
|
||||
|
||||
"Open Source Software" is any software component or software application,
|
||||
including third-party software, distributed under a Public License.
|
||||
|
||||
"Services" means any backend services, world maps, hosted documentation, remote
|
||||
access, cloud storage, software as a service, support forums, member benefits
|
||||
and/or other services offered by PhotoPrism that are based on or complementary
|
||||
to the Software.
|
||||
|
||||
"Documentation" means all instructions, diagrams, screenshots, manuals, guides,
|
||||
references and/or other written documents related to the Software and the
|
||||
Services.
|
||||
|
||||
"Digital Assets" means icons, fonts, illustrations, graphics, background
|
||||
images, videos, sounds, models, and sample files related to or accompanying the
|
||||
Software and/or Documentation, such as those provided on GitHub, distributed at
|
||||
dl.photoprism.app, or used on docs.photoprism.app.
|
||||
|
||||
"Brand Assets" means trademarks, logos, icons, fonts, corporate designs,
|
||||
product and service names, and any other brand features and elements, whether
|
||||
registered or unregistered.
|
||||
|
||||
"Customer" means an individual, company or partnership that has entered into a
|
||||
written agreement with PhotoPrism to license Software.
|
||||
|
||||
"Affiliate(s)" means any entity that controls, is controlled by, or is under
|
||||
common control with a party, where "control" means the ability to direct the
|
||||
management and policies of an entity.
|
||||
|
||||
"Intellectual Property Rights" means all intellectual property rights,
|
||||
including but not limited to patents, copyrights, trademarks, goodwill, moral
|
||||
rights, trade secrets and all other intellectual and industrial property rights
|
||||
and proprietary rights, including registrations, applications, renewals and
|
||||
extensions of such rights worldwide.
|
||||
|
||||
"License Agreement" means the agreement between PhotoPrism (or a PhotoPrism
|
||||
Affiliate or an authorized reseller of the Software) and Customer under which
|
||||
Customer has acquired or will acquire license rights to use the Software.
|
||||
|
||||
"Public License" means any license that conforms to the Open Source Definition
|
||||
(as promulgated by the Open Source Initiative) or the Free Software Definition
|
||||
(as promulgated by the Free Software Foundation) or a substantially similar
|
||||
license, including any license approved by the Open Source Initiative or a
|
||||
Creative Commons license. "Open Source Licenses" include copyleft licenses.
|
||||
|
||||
TERMS OF USE
|
||||
|
||||
(a) Our public Documentation is available under the terms of the CC BY-NC-SA
|
||||
4.0 License. Other terms may apply to Digital Assets — in particular
|
||||
illustrations, graphics, and videos — embedded in the documentation if they
|
||||
are licensed to us solely for direct distribution. When in doubt, please ask
|
||||
before distributing or using them for other works.
|
||||
|
||||
(b) We hereby grant you a non-exclusive, royalty-free, worldwide,
|
||||
non-sublicensable, non-transferable right to use the Digital Assets in
|
||||
combination with the Software and Services, unless otherwise noted.
|
||||
|
||||
(c) Because some Digital Assets are licensed to us solely for direct
|
||||
distribution, we cannot redistribute them under a more permissive license for
|
||||
other purposes. If the author or copyright holder has not released them under a
|
||||
permissive license, you must obtain a license before using them in your own
|
||||
work, whether commercial or non-commercial in nature.
|
||||
|
||||
(d) All rights not expressly licensed by PhotoPrism under a License Agreement or
|
||||
provided under a Public License are reserved. For the avoidance of doubt, this
|
||||
also applies to promotional materials, legal documents, and any other
|
||||
Intellectual Property Rights. The use, reproduction, and distribution of Open
|
||||
Source Software is subject to the terms of the applicable Public License.
|
||||
|
||||
TRADEMARK AND BRAND ASSETS
|
||||
|
||||
(a) PhotoPrism’s Brand Assets are proprietary assets owned exclusively by
|
||||
PhotoPrism. We reserve the right to object to any use or misuse in any
|
||||
jurisdiction worldwide. Visit photoprism.app/trademark to learn more.
|
||||
|
||||
(b) Contributors, licensees, business partners, and other third parties may
|
||||
never claim ownership of PhotoPrism's Brand Assets or brands confusingly
|
||||
similar to PhotoPrism's Brand Assets in any way, including, without limitation,
|
||||
as a trademark, service mark, company name or designation, domain name, social
|
||||
media profile/handle, or in any other manner.
|
||||
|
||||
(c) You may not include the PhotoPrism trademark in the name of your app,
|
||||
product, or service, whether commercial or non-commercial in nature. This
|
||||
includes online services such as e-commerce, community, blog, information,
|
||||
advertising, and personal home pages, as well as apps, app stores, client apps,
|
||||
or third-party apps that interact with PhotoPrism.
|
||||
|
||||
DISCLAIMER OF WARRANTY
|
||||
|
||||
OUR SOFTWARE, SERVICES AND DOCUMENTATION ARE PROVIDED "AS-IS" AND WITHOUT
|
||||
WARRANTY OF ANY KIND. WE DISCLAIM ALL WARRANTIES, EXPRESSED OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, TITLE,
|
||||
NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
PHOTOPRISM DOES NOT WARRANT THAT THE SOFTWARE, SERVICES OR DOCUMENTATION WILL
|
||||
BE UNINTERRUPTED OR ERROR-FREE OR THAT ALL ERRORS WILL BE CORRECTED. WE
|
||||
DISCLAIM ALL LIABILITY AND RESPONSIBILITY FOR ANY THIRD-PARTY PRODUCTS OR
|
||||
SERVICES OR FOR ANY ACTS OR OMISSIONS OF ANY THIRD-PARTY SUPPLIERS, VENDORS OR
|
||||
SERVICE PROVIDERS.
|
||||
|
||||
LIMITATION OF LIABILITY
|
||||
|
||||
TO THE FULLEST EXTENT PERMITTED BY LAW, WE WILL NOT BE LIABLE FOR ANY DAMAGES
|
||||
ASSOCIATED WITH OUR SOFTWARE, SERVICES OR DOCUMENTATION, INCLUDING WITHOUT
|
||||
LIMITATION ORDINARY, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OF ANY
|
||||
KIND, INCLUDING BUT NOT LIMITED TO DAMAGES RELATING TO LOST DATA OR LOST
|
||||
PROFITS, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
IN NO EVENT SHALL PHOTOPRISM HAVE ANY LIABILITY TO ANY THIRD-PARTY SUPPLIER,
|
||||
VENDOR OR SERVICE PROVIDER. NOTWITHSTANDING ANY OTHER PROVISION IN THESE TERMS,
|
||||
OUR MAXIMUM AGGREGATE LIABILITY IS EUR 50.
|
||||
|
||||
FINAL PROVISIONS
|
||||
|
||||
(a) These terms do not imply any rights other than those expressly granted in
|
||||
these terms.
|
||||
|
||||
(b) In the event that you breach these terms and we do not take any action, we
|
||||
will still be entitled to use our rights and remedies in any other situation
|
||||
where you breach these terms.
|
||||
|
||||
(c) If a provision of these terms is or becomes legally invalid or if there is
|
||||
any gap that needs to be filled, the validity of the remainder of these terms
|
||||
shall not be affected thereby. Invalid provisions shall be replaced by common
|
||||
consent with such provisions which come as close as possible to the intended
|
||||
result of the invalid provision. In the event of gaps, such provisions shall
|
||||
come into force by common consent which comes as close as possible to the
|
||||
intended result of these terms, should the matter have been considered in
|
||||
advance. Any changes of or amendments to these terms must be in writing to
|
||||
become effective.
|
33
assets/config/photoprism.yml
Normal file
|
@ -0,0 +1,33 @@
|
|||
url: "https://demo.photoprism.org/"
|
||||
title: "PhotoPrism"
|
||||
subtitle: "Browse your life"
|
||||
description: "Personal Photo Management powered by Go and Google TensorFlow. Free and open-source."
|
||||
author: "Anonymous"
|
||||
twitter: "@browseyourlife"
|
||||
debug: false
|
||||
read-only: false
|
||||
public: false
|
||||
experimental: false
|
||||
admin-password: photoprism
|
||||
config-path: ~/.config/photoprism
|
||||
cache-path: ~/.cache/photoprism
|
||||
assets-path: ~/.local/share/photoprism
|
||||
resources-path: ~/.local/share/photoprism/resources
|
||||
originals-path: ~/Pictures/Originals
|
||||
import-path: ~/Pictures/Import
|
||||
http-host:
|
||||
http-mode: release
|
||||
http-port: 2342
|
||||
tidb-host: localhost
|
||||
tidb-port: 2343
|
||||
tidb-password: photoprism
|
||||
database-driver: tidb
|
||||
database-dsn: root:photoprism@tcp(localhost:2343)/photoprism?parseTime=true
|
||||
pid-filename: ~/.local/share/photoprism/photoprism.pid
|
||||
log-filename: ~/.local/share/photoprism/photoprism.log
|
||||
detach-server: false
|
||||
sidecar-json: false
|
||||
sidecar-yaml: false
|
||||
sidecar-hidden: true
|
||||
jpeg-quality: 90
|
||||
jpeg-hidden: true
|
27
assets/config/settings.yml
Executable file
|
@ -0,0 +1,27 @@
|
|||
theme: default
|
||||
language: en
|
||||
templates:
|
||||
default: index.tmpl
|
||||
maps:
|
||||
animate: 0
|
||||
style: streets
|
||||
features:
|
||||
archive: true
|
||||
private: true
|
||||
review: true
|
||||
upload: true
|
||||
import: true
|
||||
labels: true
|
||||
places: true
|
||||
download: true
|
||||
edit: true
|
||||
share: true
|
||||
logs: true
|
||||
import:
|
||||
path: /
|
||||
move: false
|
||||
index:
|
||||
path: /
|
||||
convert: true
|
||||
rescan: false
|
||||
group: true
|
Before Width: | Height: | Size: 65 KiB |
|
@ -1,9 +0,0 @@
|
|||
# Sample File Attribution
|
||||
|
||||
| Filename | Author | URL |
|
||||
|-------------------------------|------------|----------------------------------------------------------------------|
|
||||
| pythagoras.gif | Petrus3743 | <https://commons.wikimedia.org/wiki/File:01-Satz_des_Pythagoras.gif> |
|
||||
| fox.profile0.8bpc.yuv420.avif | Link-U | <https://github.com/link-u/avif-sample-images> |
|
||||
|
||||
**Additional File Samples can be found at <https://dl.photoprism.app/samples/>.**
|
||||
|
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 103 KiB |
|
@ -1,70 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "beach_sand.jpg",
|
||||
"ExifToolVersion": 12.56,
|
||||
"FileName": "beach_sand.jpg",
|
||||
"Directory": ".",
|
||||
"FileSize": 105321,
|
||||
"FileModifyDate": "2023:06:20 04:43:41+00:00",
|
||||
"FileAccessDate": "2023:08:06 16:38:50+00:00",
|
||||
"FileInodeChangeDate": "2023:08:04 05:10:37+00:00",
|
||||
"FilePermissions": 100644,
|
||||
"FileType": "JPEG",
|
||||
"FileTypeExtension": "JPG",
|
||||
"MIMEType": "image/jpeg",
|
||||
"JFIFVersion": "1 2",
|
||||
"ExifByteOrder": "MM",
|
||||
"Make": "Apple",
|
||||
"Model": "iPhone SE",
|
||||
"XResolution": 72,
|
||||
"YResolution": 72,
|
||||
"ResolutionUnit": 2,
|
||||
"Software": "10.2.1",
|
||||
"ModifyDate": "2017:02:15 14:13:40",
|
||||
"YCbCrPositioning": 1,
|
||||
"ExposureTime": 0.0004940711462,
|
||||
"ExposureProgram": 2,
|
||||
"ISO": 25,
|
||||
"ExifVersion": "0231",
|
||||
"DateTimeOriginal": "2017:02:15 14:13:40",
|
||||
"CreateDate": "2017:02:15 14:13:40",
|
||||
"ComponentsConfiguration": "1 2 3 0",
|
||||
"ApertureValue": 2.19999999733148,
|
||||
"MeteringMode": 5,
|
||||
"Flash": 16,
|
||||
"FocalLength": 4.2,
|
||||
"SubSecTimeOriginal": 249,
|
||||
"SubSecTimeDigitized": 249,
|
||||
"FlashpixVersion": "0100",
|
||||
"ColorSpace": 65535,
|
||||
"SensingMethod": 2,
|
||||
"ExposureMode": 0,
|
||||
"WhiteBalance": 0,
|
||||
"SceneCaptureType": 0,
|
||||
"LensModel": "iPhone SE back camera 4.15mm f/2.2",
|
||||
"GPSVersionID": "2 3 0 0",
|
||||
"GPSLatitudeRef": "S",
|
||||
"GPSLongitudeRef": "E",
|
||||
"GPSAltitudeRef": 1,
|
||||
"CurrentIPTCDigest": "804bedc723e0e6cd3a41d0a44b074d19",
|
||||
"DocumentNotes": "https://flickr.com/e/Rl7qi7oH%2BSEGDuwWBbZYaBQMEB5oNfPvQ6m3aMrPQ64%3D",
|
||||
"ApplicationRecordVersion": 4,
|
||||
"ImageWidth": 640,
|
||||
"ImageHeight": 480,
|
||||
"EncodingProcess": 2,
|
||||
"BitsPerSample": 8,
|
||||
"ColorComponents": 3,
|
||||
"YCbCrSubSampling": "2 2",
|
||||
"Aperture": 2.19999999733148,
|
||||
"ImageSize": "640 480",
|
||||
"Megapixels": 0.3072,
|
||||
"ShutterSpeed": 0.0004940711462,
|
||||
"SubSecCreateDate": "2017:02:15 14:13:40.249",
|
||||
"SubSecDateTimeOriginal": "2017:02:15 14:13:40.249",
|
||||
"GPSAltitude": -1.990417522,
|
||||
"GPSLatitude": -29.2824777777778,
|
||||
"GPSLongitude": 31.4436361111111,
|
||||
"FocalLength35efl": 4.2,
|
||||
"GPSPosition": "-29.2824777777778 31.4436361111111",
|
||||
"LightValue": 15.2580006188259,
|
||||
"LensID": "iPhone SE back camera 4.15mm f/2.2"
|
||||
}]
|
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 33 KiB |
|
@ -1,85 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "/Users/michael/Downloads/20200511-141648-Berlin-Germany-2020-3ku.mp4",
|
||||
"ExifToolVersion": 11.85,
|
||||
"FileName": "blue-go-video.mp4",
|
||||
"Directory": "/Users/michael/Downloads",
|
||||
"FileSize": "4.4 MB",
|
||||
"FileModifyDate": "2020:05:14 14:02:58+02:00",
|
||||
"FileAccessDate": "2020:05:14 14:02:58+02:00",
|
||||
"FileInodeChangeDate": "2020:05:14 14:02:58+02:00",
|
||||
"FilePermissions": "rw-r--r--",
|
||||
"FileType": "MP4",
|
||||
"FileTypeExtension": "mp4",
|
||||
"MIMEType": "video/mp4",
|
||||
"MajorBrand": "MP4 v2 [ISO 14496-14]",
|
||||
"MinorVersion": "0.0.0",
|
||||
"CompatibleBrands": ["isom","mp42"],
|
||||
"MovieHeaderVersion": 0,
|
||||
"CreateDate": "2020:05:11 14:16:48",
|
||||
"ModifyDate": "2020:05:11 14:16:48",
|
||||
"TimeScale": 1000,
|
||||
"Duration": "2.42 s",
|
||||
"PreferredRate": 1,
|
||||
"PreferredVolume": "100.00%",
|
||||
"PreviewTime": "0 s",
|
||||
"PreviewDuration": "0 s",
|
||||
"PosterTime": "0 s",
|
||||
"SelectionTime": "0 s",
|
||||
"SelectionDuration": "0 s",
|
||||
"CurrentTime": "0 s",
|
||||
"NextTrackID": 3,
|
||||
"GPSCoordinates": "52 deg 27' 34.56\" N, 13 deg 19' 18.48\" E",
|
||||
"AndroidVersion": 10,
|
||||
"TrackHeaderVersion": 0,
|
||||
"TrackCreateDate": "2020:05:11 14:16:48",
|
||||
"TrackModifyDate": "2020:05:11 14:16:48",
|
||||
"TrackID": 1,
|
||||
"TrackDuration": "2.42 s",
|
||||
"TrackLayer": 0,
|
||||
"TrackVolume": "0.00%",
|
||||
"ImageWidth": 1920,
|
||||
"ImageHeight": 1080,
|
||||
"GraphicsMode": "srcCopy",
|
||||
"OpColor": "0 0 0",
|
||||
"CompressorID": "avc1",
|
||||
"SourceImageWidth": 1920,
|
||||
"SourceImageHeight": 1080,
|
||||
"XResolution": 72,
|
||||
"YResolution": 72,
|
||||
"BitDepth": 24,
|
||||
"PixelAspectRatio": "65536:65536",
|
||||
"ColorRepresentation": "nclx 1 1 1",
|
||||
"VideoFrameRate": 28.101,
|
||||
"MatrixStructure": "1 0 0 0 1 0 0 0 1",
|
||||
"MediaHeaderVersion": 0,
|
||||
"MediaCreateDate": "2020:05:11 14:16:48",
|
||||
"MediaModifyDate": "2020:05:11 14:16:48",
|
||||
"MediaTimeScale": 48000,
|
||||
"MediaDuration": "2.41 s",
|
||||
"HandlerType": "Audio Track",
|
||||
"HandlerDescription": "SoundHandle",
|
||||
"Balance": 0,
|
||||
"AudioFormat": "mp4a",
|
||||
"AudioChannels": 2,
|
||||
"AudioBitsPerSample": 16,
|
||||
"AudioSampleRate": 48000,
|
||||
"MediaDataSize": 3818513,
|
||||
"MediaDataOffset": 810340,
|
||||
"ImageSize": "1920x1080",
|
||||
"Megapixels": 2.1,
|
||||
"AvgBitrate": "12.6 Mbps",
|
||||
"GPSLatitude": "52 deg 27' 34.56\" N",
|
||||
"GPSLongitude": "13 deg 19' 18.48\" E",
|
||||
"Rotation": 90,
|
||||
"GPSPosition": "52 deg 27' 34.56\" N, 13 deg 19' 18.48\" E",
|
||||
"Title": "Blue Gopher",
|
||||
"Description": "Cute gopher",
|
||||
"Comment": "We love go",
|
||||
"Subject": "gopher",
|
||||
"Keywords": "blue, desk",
|
||||
"Artist": "Micha",
|
||||
"CameraOwner": "Micha",
|
||||
"CameraSerial": "123",
|
||||
"DocumentID": "12398365",
|
||||
"InstanceID": "9058055",
|
||||
}]
|
|
@ -1,6 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "/Users/michael/Downloads/20200511-141648-Berlin-Germany-2020-3ku.mp4",
|
||||
"ExifToolVersion": 11.85,
|
||||
"FileName": "blue-go-video.mp4",
|
||||
"Directory": "/Users/michael/Downloads"
|
||||
}]
|
Before Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 75 KiB |
|
@ -1,25 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "example.gif",
|
||||
"ExifToolVersion": 12.40,
|
||||
"FileName": "example.gif",
|
||||
"Directory": ".",
|
||||
"FileSize": 5760,
|
||||
"FileModifyDate": "2021:11:01 14:39:36+00:00",
|
||||
"FileAccessDate": "2022:04:12 15:49:52+00:00",
|
||||
"FileInodeChangeDate": "2022:03:02 20:29:31+00:00",
|
||||
"FilePermissions": 100666,
|
||||
"FileType": "GIF",
|
||||
"FileTypeExtension": "GIF",
|
||||
"MIMEType": "image/gif",
|
||||
"GIFVersion": "89a",
|
||||
"ImageWidth": 100,
|
||||
"ImageHeight": 67,
|
||||
"HasColorMap": 1,
|
||||
"ColorResolutionDepth": 8,
|
||||
"BitsPerPixel": 8,
|
||||
"BackgroundColor": 0,
|
||||
"AnimationIterations": 0,
|
||||
"TransparentColor": 255,
|
||||
"ImageSize": "100 67",
|
||||
"Megapixels": 0.0067
|
||||
}]
|
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 78 KiB |
|
@ -1,153 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "iphone_15_pro.heic",
|
||||
"ExifToolVersion": 12.40,
|
||||
"FileName": "iphone_15_pro.heic",
|
||||
"Directory": ".",
|
||||
"FileSize": 886825,
|
||||
"FileModifyDate": "2023:10:31 11:48:48+01:00",
|
||||
"FileAccessDate": "2023:10:31 11:51:22+01:00",
|
||||
"FileInodeChangeDate": "2023:10:31 11:50:11+01:00",
|
||||
"FilePermissions": 100664,
|
||||
"FileType": "HEIC",
|
||||
"FileTypeExtension": "HEIC",
|
||||
"MIMEType": "image/heic",
|
||||
"MajorBrand": "heic",
|
||||
"MinorVersion": "0.0.0",
|
||||
"CompatibleBrands": ["mif1","MiHE","MiPr","miaf","MiHB","heic"],
|
||||
"HandlerType": "pict",
|
||||
"PrimaryItemReference": 49,
|
||||
"MetaImageSize": "0 1287 4032 3024",
|
||||
"XMPToolkit": "XMP Core 6.0.0",
|
||||
"HDRGainMapHeadroom": 3.847906,
|
||||
"HDRGainMapVersion": 131072,
|
||||
"ExifByteOrder": "MM",
|
||||
"Make": "Apple",
|
||||
"Model": "iPhone 15 Pro",
|
||||
"Orientation": 6,
|
||||
"XResolution": 72,
|
||||
"YResolution": 72,
|
||||
"ResolutionUnit": 2,
|
||||
"Software": 17.1,
|
||||
"ModifyDate": "2023:10:31 11:44:43",
|
||||
"HostComputer": "iPhone 15 Pro",
|
||||
"ExposureTime": 0.01666666667,
|
||||
"FNumber": 2.2,
|
||||
"ExposureProgram": 2,
|
||||
"ISO": 400,
|
||||
"ExifVersion": "0232",
|
||||
"DateTimeOriginal": "2023:10:31 11:44:43",
|
||||
"CreateDate": "2023:10:31 11:44:43",
|
||||
"OffsetTime": "+01:00",
|
||||
"OffsetTimeOriginal": "+01:00",
|
||||
"OffsetTimeDigitized": "+01:00",
|
||||
"ShutterSpeedValue": 0.0165679999782223,
|
||||
"ApertureValue": 2.20000000038133,
|
||||
"BrightnessValue": 2.15000162,
|
||||
"ExposureCompensation": 0,
|
||||
"MeteringMode": 5,
|
||||
"Flash": 16,
|
||||
"FocalLength": 2.22,
|
||||
"SubjectArea": "2015 1511 2323 1330",
|
||||
"RunTimeFlags": 1,
|
||||
"RunTimeValue": 154455128730208,
|
||||
"RunTimeScale": 1000000000,
|
||||
"RunTimeEpoch": 0,
|
||||
"AccelerationVector": "-0.004213878416 -1.002046108 -0.01470538881",
|
||||
"Warning": "[minor] Bad format (16) for MakerNotes entry 10",
|
||||
"SubSecTimeOriginal": 432,
|
||||
"SubSecTimeDigitized": 432,
|
||||
"ColorSpace": 65535,
|
||||
"ExifImageWidth": 4032,
|
||||
"ExifImageHeight": 3024,
|
||||
"SensingMethod": 2,
|
||||
"SceneType": 1,
|
||||
"ExposureMode": 0,
|
||||
"WhiteBalance": 0,
|
||||
"FocalLengthIn35mmFormat": 14,
|
||||
"LensInfo": "2.22 9 1.779999971 2.8",
|
||||
"LensMake": "Apple",
|
||||
"LensModel": "iPhone 15 Pro back triple camera 2.22mm f/2.2",
|
||||
"CompositeImage": 2,
|
||||
"GPSLatitudeRef": "N",
|
||||
"GPSLongitudeRef": "E",
|
||||
"GPSAltitudeRef": 0,
|
||||
"GPSTimeStamp": "10:44:43",
|
||||
"GPSSpeedRef": "K",
|
||||
"GPSSpeed": 0,
|
||||
"GPSImgDirectionRef": "T",
|
||||
"GPSImgDirection": 101.3112946,
|
||||
"GPSDestBearingRef": "T",
|
||||
"GPSDestBearing": 101.3112946,
|
||||
"GPSDateStamp": "2023:10:31",
|
||||
"GPSHPositioningError": 14.275587,
|
||||
"ProfileCMMType": "appl",
|
||||
"ProfileVersion": 1024,
|
||||
"ProfileClass": "mntr",
|
||||
"ColorSpaceData": "RGB ",
|
||||
"ProfileConnectionSpace": "XYZ ",
|
||||
"ProfileDateTime": "2022:01:01 00:00:00",
|
||||
"ProfileFileSignature": "acsp",
|
||||
"PrimaryPlatform": "APPL",
|
||||
"CMMFlags": 0,
|
||||
"DeviceManufacturer": "APPL",
|
||||
"DeviceModel": "",
|
||||
"DeviceAttributes": "0 0",
|
||||
"RenderingIntent": 0,
|
||||
"ConnectionSpaceIlluminant": "0.9642 1 0.82491",
|
||||
"ProfileCreator": "appl",
|
||||
"ProfileID": "236 253 163 142 56 133 71 195 109 180 189 79 122 218 24 47",
|
||||
"ProfileDescription": "Display P3",
|
||||
"ProfileCopyright": "Copyright Apple Inc., 2022",
|
||||
"MediaWhitePoint": "0.96419 1 0.82489",
|
||||
"RedMatrixColumn": "0.51512 0.2412 -0.00105",
|
||||
"GreenMatrixColumn": "0.29198 0.69225 0.04189",
|
||||
"BlueMatrixColumn": "0.1571 0.06657 0.78407",
|
||||
"RedTRC": "(Binary data 32 bytes, use -b option to extract)",
|
||||
"ChromaticAdaptation": "1.04788 0.02292 -0.0502 0.02959 0.99048 -0.01706 -0.00923 0.01508 0.75168",
|
||||
"BlueTRC": "(Binary data 32 bytes, use -b option to extract)",
|
||||
"GreenTRC": "(Binary data 32 bytes, use -b option to extract)",
|
||||
"HEVCConfigurationVersion": 1,
|
||||
"GeneralProfileSpace": 0,
|
||||
"GeneralTierFlag": 0,
|
||||
"GeneralProfileIDC": 3,
|
||||
"GenProfileCompatibilityFlags": 1879048192,
|
||||
"ConstraintIndicatorFlags": "176 0 0 0 0 0",
|
||||
"GeneralLevelIDC": 90,
|
||||
"MinSpatialSegmentationIDC": 0,
|
||||
"ParallelismType": 0,
|
||||
"ChromaFormat": 1,
|
||||
"BitDepthLuma": 8,
|
||||
"BitDepthChroma": 8,
|
||||
"AverageFrameRate": 0,
|
||||
"ConstantFrameRate": 0,
|
||||
"NumTemporalLayers": 1,
|
||||
"TemporalIDNested": 0,
|
||||
"ImageWidth": 4032,
|
||||
"ImageHeight": 3024,
|
||||
"ImageSpatialExtent": "4032 3024",
|
||||
"Rotation": 270,
|
||||
"ImagePixelDepth": 8,
|
||||
"AuxiliaryImageType": "urn:com:apple:photo:2020:aux:hdrgainmap",
|
||||
"MediaDataSize": 882139,
|
||||
"MediaDataOffset": 4686,
|
||||
"RunTimeSincePowerUp": 154455.128730208,
|
||||
"Aperture": 2.2,
|
||||
"ImageSize": "4032 3024",
|
||||
"Megapixels": 12.192768,
|
||||
"ScaleFactor35efl": 6.30630630630631,
|
||||
"ShutterSpeed": 0.01666666667,
|
||||
"SubSecCreateDate": "2023:10:31 11:44:43.432+01:00",
|
||||
"SubSecDateTimeOriginal": "2023:10:31 11:44:43.432+01:00",
|
||||
"SubSecModifyDate": "2023:10:31 11:44:43+01:00",
|
||||
"GPSAltitude": 50.15664187,
|
||||
"GPSDateTime": "2023:10:31 10:44:43Z",
|
||||
"GPSLatitude": 52.4596055555556,
|
||||
"GPSLongitude": 13.3218416666667,
|
||||
"CircleOfConfusion": "0.00476447847114884",
|
||||
"FOV": 104.250120754113,
|
||||
"FocalLength35efl": 14,
|
||||
"GPSPosition": "52.4596055555556 13.3218416666667",
|
||||
"HyperfocalDistance": 0.470184057236731,
|
||||
"LightValue": 6.18189764281985,
|
||||
"LensID": "iPhone 15 Pro back triple camera 2.22mm f/2.2"
|
||||
}]
|
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 187 KiB |
|
@ -1,28 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "pythagoras.gif",
|
||||
"ExifToolVersion": 12.40,
|
||||
"FileName": "pythagoras.gif",
|
||||
"Directory": ".",
|
||||
"FileSize": 191371,
|
||||
"FileModifyDate": "2022:04:13 08:42:33+00:00",
|
||||
"FileAccessDate": "2022:04:13 10:52:43+00:00",
|
||||
"FileInodeChangeDate": "2022:04:13 08:42:42+00:00",
|
||||
"FilePermissions": 100664,
|
||||
"FileType": "GIF",
|
||||
"FileTypeExtension": "GIF",
|
||||
"MIMEType": "image/gif",
|
||||
"GIFVersion": "89a",
|
||||
"ImageWidth": 591,
|
||||
"ImageHeight": 639,
|
||||
"HasColorMap": 1,
|
||||
"ColorResolutionDepth": 7,
|
||||
"BitsPerPixel": 8,
|
||||
"BackgroundColor": 255,
|
||||
"AnimationIterations": 0,
|
||||
"Comment": "Created with GIMP",
|
||||
"TransparentColor": 255,
|
||||
"FrameCount": 201,
|
||||
"Duration": 49.8,
|
||||
"ImageSize": "591 639",
|
||||
"Megapixels": 0.377649
|
||||
}]
|
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 6.9 MiB |
|
@ -1,82 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "/go/src/github.com/photoprism/photoprism/storage/import/samsung-motion-photo.jpg",
|
||||
"ExifToolVersion": 12.56,
|
||||
"FileName": "samsung-motion-photo.jpg",
|
||||
"Directory": "/go/src/github.com/photoprism/photoprism/storage/import",
|
||||
"FileSize": 7221645,
|
||||
"FileModifyDate": "2023:07:27 02:03:13+00:00",
|
||||
"FileAccessDate": "2023:08:13 17:11:04+00:00",
|
||||
"FileInodeChangeDate": "2023:08:13 17:11:02+00:00",
|
||||
"FilePermissions": 100644,
|
||||
"FileType": "JPEG",
|
||||
"FileTypeExtension": "JPG",
|
||||
"MIMEType": "image/jpeg",
|
||||
"ExifByteOrder": "II",
|
||||
"Make": "samsung",
|
||||
"Model": "SM-G973F",
|
||||
"Orientation": 1,
|
||||
"XResolution": 72,
|
||||
"YResolution": 72,
|
||||
"ResolutionUnit": 2,
|
||||
"Software": "G973FXXU4CTC9",
|
||||
"ModifyDate": "2020:04:23 18:33:41",
|
||||
"YCbCrPositioning": 1,
|
||||
"ExposureTime": 0.0007575757576,
|
||||
"FNumber": 2.4,
|
||||
"ExposureProgram": 2,
|
||||
"ISO": 50,
|
||||
"ExifVersion": "0220",
|
||||
"DateTimeOriginal": "2020:04:23 18:33:41",
|
||||
"CreateDate": "2020:04:23 18:33:41",
|
||||
"ShutterSpeedValue": 0.999475026346474,
|
||||
"ApertureValue": 2.39495740923786,
|
||||
"BrightnessValue": 22.58,
|
||||
"ExposureCompensation": 0,
|
||||
"MaxApertureValue": 2.39495740923786,
|
||||
"MeteringMode": 2,
|
||||
"Flash": 0,
|
||||
"FocalLength": 4.32,
|
||||
"ColorSpace": 1,
|
||||
"ExifImageWidth": 4032,
|
||||
"ExifImageHeight": 3024,
|
||||
"ExposureMode": 0,
|
||||
"WhiteBalance": 0,
|
||||
"DigitalZoomRatio": 1,
|
||||
"FocalLengthIn35mmFormat": 26,
|
||||
"SceneCaptureType": 0,
|
||||
"ImageUniqueID": "L12XLLD01VM",
|
||||
"GPSLatitudeRef": "N",
|
||||
"GPSLongitudeRef": "W",
|
||||
"Compression": 6,
|
||||
"ThumbnailOffset": 888,
|
||||
"ThumbnailLength": 50555,
|
||||
"XMPToolkit": "Adobe XMP Core 5.1.0-jc003",
|
||||
"MicroVideo": 1,
|
||||
"MicroVideoVersion": 1,
|
||||
"MicroVideoOffset": 4535831,
|
||||
"MicroVideoPresentationTimestampUs": -1,
|
||||
"ImageWidth": 4032,
|
||||
"ImageHeight": 3024,
|
||||
"EncodingProcess": 0,
|
||||
"BitsPerSample": 8,
|
||||
"ColorComponents": 3,
|
||||
"YCbCrSubSampling": "2 2",
|
||||
"TimeStamp": "2020:04:23 17:33:41.809+00:00",
|
||||
"MCCData": 234,
|
||||
"EmbeddedVideoType": "MotionPhoto_Data",
|
||||
"EmbeddedVideoFile": "(Binary data 4535775 bytes, use -b option to extract)",
|
||||
"Aperture": 2.4,
|
||||
"ImageSize": "4032 3024",
|
||||
"Megapixels": 12.192768,
|
||||
"ScaleFactor35efl": 6.01851851851852,
|
||||
"ShutterSpeed": 0.0007575757576,
|
||||
"ThumbnailImage": "(Binary data 50555 bytes, use -b option to extract)",
|
||||
"GPSLatitude": 51.5049828,
|
||||
"GPSLongitude": -0.0787347997222222,
|
||||
"CircleOfConfusion": "0.00499230176602706",
|
||||
"FOV": 69.3903656740024,
|
||||
"FocalLength35efl": 26,
|
||||
"GPSPosition": "51.5049828 -0.0787347997222222",
|
||||
"HyperfocalDistance": 1.55759815100044,
|
||||
"LightValue": 13.8923910258672
|
||||
}]
|
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 126 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 80 KiB |
|
@ -1,38 +0,0 @@
|
|||
# Backend Translations
|
||||
|
||||
PhotoPrism uses [gettext](https://en.wikipedia.org/wiki/Gettext) for localizing frontend and backend.
|
||||
It's one of the most widely adopted standards for translating user interfaces.
|
||||
|
||||
Human-readable messages like `File not found` are used as ids for finding matching translations,
|
||||
and used as defaults whenever there is no translation available.
|
||||
|
||||
Messages may optionally contain placeholders, like `Found %d files`, for numbers and
|
||||
other variables.
|
||||
|
||||
We strongly recommend [Poedit](https://poedit.net/download) for creating and updating translations.
|
||||
Download is free for Mac, Windows, and Linux.
|
||||
It's source code can be obtained on [GitHub](https://github.com/vslavik/poedit).
|
||||
|
||||
Only asynchronous notifications and certain API responses need translation to provide a
|
||||
consistent user experience.
|
||||
Technical log messages should be in English to avoid ambiguities and (even slightly) wrong translations.
|
||||
|
||||
`default.po` files in subdirectories contain localized messages for each
|
||||
[language](https://www.gnu.org/software/gettext/manual/html_node/Usual-Language-Codes.html) identified
|
||||
by their [locale](https://www.gnu.org/software/gettext/manual/html_node/Locale-Names.html),
|
||||
for example `de/default.po` for German and `pt_BR/default.po` for Brazilian Portuguese.
|
||||
You can open, edit, and save them with Poedit. Please also add and commit binary `*.mo` files,
|
||||
which will be automatically created by Poedit.
|
||||
|
||||
To add a new translation, open `messages.pot`, click on "Create New Translation" at the bottom and select
|
||||
the language. Now you can start translating.
|
||||
When done, create a new directory (using the locale as name) and save your translation there as `default.po`.
|
||||
|
||||
The POT file `/assets/locales/messages.pot` will be automatically updated when
|
||||
running `go generate` in `/internal/i18n` or `make generate` in the main project directory.
|
||||
Note that this will only work when you have gettext installed on your system.
|
||||
We recommend using our latest development image as described in the Developer Guide.
|
||||
|
||||
Apply changes to existing translations by clicking on "Catalogue" > "Update from POT File..."
|
||||
in the Poedit app menu.
|
||||
|
|
@ -1,377 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
|
||||
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: af\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15.2\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Iets het verkeerd geloop, probeer weer"
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr "Kan dit nie doen nie"
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Veranderinge kon nie gestoor word nie"
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Kan nie verwyder word nie"
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s bestaan reeds"
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr "Nie gevind"
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr "Lêer nie gevind nie"
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr "Lêer te groot"
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr "Ongesteunde formaat"
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Oorspronklike omslag is leeg"
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr "Seleksie nie gevind nie"
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr "Entiteit nie gevind nie"
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr "Rekening nie gevind nie"
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr "Verbruiker nie gevind nie"
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr "Merker nie gevind nie"
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr "Album nie gevind nie"
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr "Onderwerp nie gevind nie"
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr "Persoon nie gevind nie"
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr "Gesig nie gevind nie"
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Nie beskikbaar in publieke modus nie"
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Nie beskikbaar in leesalleen modus nie"
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Teken asseblief in op jou rekening"
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr "Toegang geweier"
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Oplegging mag aanstoot gee"
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr "Oplegging misluk"
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr "Geen items gekies nie"
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Kon nie lêer skep nie. Gaan asseblief toestemmings na"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Kon nie vouer skep nie. Gaan asseblief toestemmings na"
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Kon nie konnekteer nie, probeer asseblief weer"
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Ongeldige wagwoord, probeer asseblief weer"
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr "Eienskap gedeaktiveer"
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr "Geen merker geselekteer"
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr "Geen albums geselekteer nie"
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr "Geen lêers beskikbaar vir aflaai nie"
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Kon nie zip-lêer skep nie"
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Ongeldige magtiging"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr "Ongeldige skakel"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr "Ongeldige naam"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Besig, probeer asseblief later weer"
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Die opwek tydperk is %s, maar moet 1 uur of minder wees"
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Jou rekening kon nie gekoppel word nie"
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Veranderinge suksesvol gestoor"
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr "Album geskep"
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr "Album gestoor"
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s uitgevee"
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albuminhoud gekloon"
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr "Lêer verwyder uit stapel"
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr "Lêer uitgevee"
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Seleksie bygevoeg na %s"
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Een inskrywing bygevoeg na %s"
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d inskrywings by %s gevoeg"
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Een inskrywing verwyder uit %s"
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d inskrywings verwyder uit %s"
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr "Rekening geskep"
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr "Rekening gestoor"
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr "Rekening uitgevee"
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr "Stellings gestoor"
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr "Wagwoord verander"
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Invoer voltooi in %d s"
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr "Invoer gekanselleer"
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "inhoudsopgawe voltooi in %d s"
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indekseer van oorspronklikes …"
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indekseer lêers in %s"
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksering gekanselleer"
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d lêers en %d foto's verwyder"
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Skuif lêers van %s af"
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopieer lêers van %s"
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr "Merkers uitgevee"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr "Merkers gestoor"
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr "Onderwerp gestoor"
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr "Onderwerp uitgevee"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr "Persoon gestoor"
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr "Persoon uitgevee"
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr "Lêer opgelaai"
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d lêers opgelaai in %d s"
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr "Verwerk oplegging..."
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Oplegging geprosesseer"
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr "Seleksie goedgekeur"
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr "Seleksie geargiveer"
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr "Seleksie herstel"
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Seleksie gemerk as privaat"
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albums uitgevee"
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip geskep in %d s"
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Permanent uitgevee"
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s geherstel"
|
||||
|
||||
#~ msgid "Invalid request"
|
||||
#~ msgstr "Ongeldige versoek"
|
||||
|
||||
#~ msgid "Unexpected error, please try again"
|
||||
#~ msgstr "Onverwagte fout, probeer asseblief weer"
|
|
@ -1,378 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
|
||||
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ar\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\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 ? 4 : 5;\n"
|
||||
"X-Generator: Weblate 4.15.2\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "حدث خطأ ما حاول مرة أخرى"
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr "غير قادر على فعل ذلك"
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "لا يمكن حفظ التغييرات"
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr "لا يمكن حذفه"
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s موجود بالفعل"
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr "لم يتم العثور على"
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr "لم يتم العثور على الملف"
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr "الملف كبير جدًا"
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr "صيغة غير مدعومة"
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "مجلد النسخ الأصلية فارغ"
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr "الاختيار غير موجود"
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr "الكيان غير موجود"
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr "الحساب غير موجود"
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr "المستخدم غير موجود"
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr "التصنيف غير موجود"
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr "الألبوم غير موجود"
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr "الموضوع غير موجود"
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr "لم يتم العثور على الشخص"
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr "الوجه غير موجود"
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr "غير متاح في الوضع العام"
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "غير متوفر في وضع القراءة فقط"
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr "يرجى تسجيل الدخول إلى حسابك"
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr "طلب الاذن مرفوض"
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "تحميل قد يكون مسيئا"
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr "التحميل فشل"
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr "لم يتم تحديد الاختيار"
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "فشل إنشاء الملف ، يرجى التحقق من الأذونات"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "فشل إنشاء المجلد ، يرجى التحقق من الأذونات"
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "تعذر الاتصال ، يرجى المحاولة مرة أخرى"
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "كلمة السر غير مطابقة، برجاء حاول مرة أخرى"
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr "الخاصية معطلة"
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr "لم يتم تحديد تسميات"
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr "لم يتم تحديد ألبومات"
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr "لا توجد ملفات متاحة للتنزيل"
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "فشل إنشاء ملف مضغوط"
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr "بيانات الاعتماد غير صالحة"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr "ارتباط غير صالح"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr "اسم غير صحيح"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "مشغول ، يرجى المحاولة مرة أخرى في وقت لاحق"
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "فترة التنبيه هي %s ، لكن يجب أن تكون ساعة واحدة أو أقل"
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "لا يمكن ربط حسابك"
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "تم حفظ التغييرات بنجاح"
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr "تم إنشاء الألبوم"
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr "تم حفظ الألبوم"
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "تم حذف الألبوم %s"
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr "تم نسخ محتويات الألبوم"
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr "تمت إزالة الملف من المكدس"
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr "تم حذف الملف"
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "تمت إضافة التحديد إلى %s"
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "تمت إضافة إدخال واحد إلى %s"
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "تمت إضافة %d مدخلات إلى %s"
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "تمت إزالة إدخال واحد من %s"
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "تمت إزالة %d مدخلات من %s"
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr "تم إنشاء الحساب"
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr "تم حفظ الحساب"
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr "تم حذف الحساب"
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr "تم حفظ الإعدادات"
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr "تم تغيير كلمة السر"
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "اكتمل الاستيراد في %d ثانية"
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr "تم إلغاء الاستيراد"
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "اكتملت الفهرسة في %d ثانية"
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr "تتم فهرسة الصور الأصلية ..."
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "فهرسة الملفات في %s"
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr "تم إلغاء الفهرسة"
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "تمت إزالة %d ملفات و %d صورة"
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "نقل الملفات من %s"
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "نسخ ملفات من %s"
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr "تم حذف التصنيفات"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr "تم حفظ التصنيف"
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr "تم حفظ الموضوع"
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr "تم حذف الموضوع"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr "حفظ الشخص"
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr "تم حذف الشخص"
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr "تم تحميل الملف"
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "تم تحميل %d ملف في %d ثانية"
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr "جارٍ معالجة التحميل ..."
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr "تمت معالجة التحميل"
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr "تمت الموافقة على الاختيار"
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr "تمت أرشفة الاختيار"
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr "تمت استعادة التحديد"
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr "تم تحديد الاختيار على أنه خاص"
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr "تم حذف الألبومات"
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "إنشاء الملف المضغوط خلال %d ثوانٍ"
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr "تم الحذف بشكل نهائي"
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "تمت استعادة %s"
|
||||
|
||||
#~ msgid "Invalid request"
|
||||
#~ msgstr "طلب غير صالح"
|
||||
|
||||
#~ msgid "Unexpected error, please try again"
|
||||
#~ msgstr "خطأ غير متوقع ، يرجى المحاولة مرة أخرى"
|
|
@ -1,372 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
|
||||
"PO-Revision-Date: 2023-02-26 21:43+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: be\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.15.2\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Нешта пайшло не так, паўтарыце спробу"
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr "Немагчыма зрабіць гэта"
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Не ўдалося захаваць змены"
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Немагчыма выдаліць"
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s ужо існуе"
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr "Не знойдзена"
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr "Файл не знойдзены"
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr "Файл занадта вялікі"
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr "Фармат не падтрымліваецца"
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Тэчка арыгіналаў пустая"
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr "Выбар не знойдзены"
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr "Аб'ект не знойдзены"
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr "Уліковы запіс не знойдзены"
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr "Карыстальнік не знойдзены"
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr "Цэтлік не знойдзены"
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr "Альбом не знойдзены"
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr "Тэма не знойдзена"
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr "Чалавек не знойдзены"
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr "Твар не знойдзены"
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Недаступна ў публічным рэжыме"
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Недаступна ў рэжыме толькі для чытання"
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Калі ласка, увайдзіце ў свой уліковы запіс"
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr "У доступе адмоўлена"
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Запампоўка можа быць абразлівай"
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr "Памылка загрузкі"
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr "Элементы не выбраны"
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Не ўдалося стварыць файл, праверце дазволы"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Не атрымалася стварыць папку, праверце дазволы"
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Немагчыма падключыцца, паспрабуйце яшчэ раз"
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Няправільны пароль, паспрабуйце яшчэ раз"
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr "Функцыя адключана"
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr "Меткі не выбраны"
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr "Альбомы не выбраны"
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr "Няма даступных файлаў для спампоўкі"
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Не ўдалося стварыць zip-файл"
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Няправільныя ўліковыя даныя"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr "Няправільная спасылка"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr "Няправільнае імя"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Заняты, паўтарыце спробу пазней"
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Інтэрвал абуджэння складае %s, але павінен быць не больш за 1 гадзіну"
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Ваш уліковы запіс не можа быць падключаны"
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Змены паспяхова захаваны"
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr "Альбом створаны"
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr "Альбом захаваны"
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Альбом %s выдалены"
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Змест альбома кланаваны"
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr "Файл выдалены са стэка"
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr "Файл выдалены"
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Выбар дададзены ў %s"
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Адзін запіс дададзены ў %s"
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d запісы дададзены ў %s"
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Адзін запіс выдалены з %s"
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "Запісы %d выдалены з %s"
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr "Уліковы запіс створаны"
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr "Уліковы запіс захаваны"
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr "Уліковы запіс выдалены"
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr "Налады захаваны"
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr "Пароль зменены"
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Імпарт завершаны праз %d с"
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr "Імпарт адменены"
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Індэксацыя завершана ў %d с"
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Індэксаванне арыгіналаў..."
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Індэксацыя файлаў у %s"
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Індэксацыя адменена"
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Выдалены файлы %d і фатаграфіі %d."
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Перамяшчэнне файлаў з %s"
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Капіраванне файлаў з %s"
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr "Цэтлікі выдалены"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr "Цэтлік захаваны"
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr "Тэма захавана"
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr "Тэма выдалена"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr "Чалавек выратаваны"
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr "Асоба выдалена"
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr "Файл запампаваны"
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d файлы, загружаныя ў %d с"
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr "Апрацоўка запампоўкі..."
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Загрузка апрацавана"
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr "Выбар ухвалены"
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr "Выбранае заархівавана"
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr "Выбар адноўлены"
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Выбар пазначаны як прыватны"
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr "Альбомы выдалены"
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip створаны ў %d с"
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Выдалены назаўсёды"
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s быў адноўлены"
|
|
@ -1,377 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
|
||||
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: bg\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15.2\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Нещо се е объркало, опитайте отново"
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr "Не можете да го направите"
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Промените не могат да бъдат запазени"
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Не може да бъде изтрит"
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s вече съществува"
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr "Не е намерен"
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr "Файлът не е намерен"
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr "Твърде голям файл"
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr "Неподдържан формат"
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Папката с оригинали е празна"
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr "Изборът не е намерен"
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr "Субектът не е намерен"
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr "Акаунтът не е намерен"
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr "Потребителят не е намерен"
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr "Етикетът не е намерен"
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr "Албумът не е намерен"
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr "Темата не е намерена"
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr "Лицето не е намерено"
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr "Лицето не е намерено"
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Не е наличен в публичен режим"
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Не е наличен в режим само за четене"
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Моля, влезте в профила си"
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr "Достъп отказан"
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Качването може да е обидно"
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr "Файловете не успяха да се качат"
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr "Няма избрани елементи"
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Неуспешно създаване на файл, моля, проверете разрешенията"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Неуспешно създаване на папка, моля, проверете разрешенията"
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Не може да се свърже, опитайте отново"
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Невалидна парола, моля, опитайте отново"
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr "Функцията е деактивирана"
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr "Няма избрани етикети"
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr "Няма избрани албуми"
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr "Няма налични файлове за изтегляне"
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Неуспешно създаване на zip файл"
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Невалидни креденции"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr "Невалидна връзка"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr "Невалидно име"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Заето, моля, опитайте отново по-късно"
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Интервалът на събуждане е %s, но трябва да е 1 час или по-малко"
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Вашият акаунт не може да бъде свързан"
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Промените са успешно записани"
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr "Създаден албум"
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr "Запазен албум"
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Албум %s изтрит"
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Съдържанието на албума беше клонирано"
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr "Премахване на файла от стека"
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr "Изтрит файл"
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Добавяне на селекция към %s"
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Добавяне на един запис към %s"
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d добавени записи към %s"
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Отстранен е един запис от %s"
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d премахнати записи от %s"
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr "Създаден акаунт"
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr "Акаунтът запазен"
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr "Изтрит акаунт"
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr "Запазени настройки"
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr "Паролата е променена"
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Импортът е завършен за %d s"
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr "Вносът е отменен"
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Индексирането е завършено за %d сек"
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Индексиране на оригинали..."
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Индексиране на файлове в %s"
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Отменено индексиране"
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Премахнати са %d файлове и %d снимки"
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Преместване на файлове от %s"
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Копиране на файлове от %s"
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr "Изтрити етикети"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr "Запазен етикет"
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr "Тема: запазени"
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr "Изтрит предмет"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr "Запазено лице"
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr "Изтрито лице"
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr "Качен файл"
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d файлове, качени за %d сек"
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr "Обработка на качването..."
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Качването е обработено"
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr "Одобрена селекция"
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr "Архивирана селекция"
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr "Възстановена селекция"
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Селекция, отбелязана като частна"
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr "Изтрити албуми"
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip създаден за %d s"
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Постоянно изтрити"
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s е възстановена"
|
||||
|
||||
#~ msgid "Invalid request"
|
||||
#~ msgstr "Невалидна заявка"
|
||||
|
||||
#~ msgid "Unexpected error, please try again"
|
||||
#~ msgstr "Неочаквана грешка, моля, опитайте отново"
|
|
@ -1,377 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
|
||||
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ca\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15.2\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "S'ha produït un error, torna-ho a provar"
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr "Incapaç de fer-ho"
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "No s'han pogut desar els canvis"
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr "No s'ha pogut suprimir"
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s El nom ja existeix"
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr "No trobat"
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr "No s'ha trobat el fitxer"
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr "Fitxer massa gran"
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr "Format no compatible"
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "La carpeta d'originals està buida"
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr "No s'ha trobat la selecció"
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr "No s'ha trobat l'entitat"
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr "Compte no trobat"
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr "Usuari no trobat"
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr "No s'ha trobat l'etiqueta"
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr "No s'ha trobat l'àlbum"
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr "No s'ha trobat el tema"
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr "Persona no trobada"
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr "No s'ha trobat la cara"
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr "No disponible en mode públic"
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "No disponible en mode només de lectura"
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Si us plau, inicieu sessió al vostre compte"
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr "Permís denegat"
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "La càrrega pot ser ofensiva"
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr "La càrrega ha fallat"
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr "No s'ha seleccionat cap element"
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "No s'ha pogut crear el fitxer, comproveu els permisos"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "No s'ha pogut crear la carpeta, comproveu els permisos"
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "No s'ha pogut connectar, torna-ho a provar"
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "La contrasenya no és vàlida, torneu-ho a provar"
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funció desactivada"
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr "No s'ha seleccionat cap etiqueta"
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr "No s'ha seleccionat cap àlbum"
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr "No hi ha fitxers disponibles per a la baixada"
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "No s'ha pogut crear el fitxer zip"
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Credencials incorrectes"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr "Enllaç no vàlid"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr "Nom no vàlid"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Ocupat, torna-ho a provar més tard"
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "L'interval d'activació és %s, però ha de ser d'1 h o menys"
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "No s'ha pogut connectar el vostre compte"
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Els canvis s'han desat correctament"
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr "Àlbum creat"
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr "Àlbum desat"
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "S'ha suprimit l'àlbum %s"
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Contingut de l'àlbum clonat"
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr "S'ha eliminat el fitxer de la pila"
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr "S'ha suprimit el fitxer"
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "S'ha afegit una selecció a %s"
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "S'ha afegit una entrada a %s"
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d entrades afegides a %s"
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "S'ha eliminat una entrada de %s"
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "S'han eliminat %d entrades de %s"
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr "Compte creat"
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr "Compte desat"
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr "Compte suprimit"
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr "Configuració desada"
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr "S’ha canviat la contrasenya"
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importació completada en %d s"
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr "Importació cancel·lada"
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexació completada en %d s"
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr "S'estan indexant els originals..."
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexant fitxers a %s"
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr "S'ha cancel·lat la indexació"
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "S'han eliminat %d fitxers i %d fotos"
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "S'estan movent fitxers de %s"
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "S'estan copiant fitxers de %s"
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr "S'han suprimit les etiquetes"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr "S'ha desat l'etiqueta"
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr "Assumpte desat"
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr "S'ha suprimit el tema"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr "Persona salvada"
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr "S'ha suprimit la persona"
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr "Fitxer penjat"
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d fitxers penjats en %d s"
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr "S'està processant la càrrega..."
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr "S'ha processat la càrrega"
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr "Selecció aprovada"
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr "Selecció arxivada"
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr "S'ha restaurat la selecció"
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr "La selecció s'ha marcat com a privada"
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr "Àlbums suprimits"
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip creat en %d s"
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Esborrat permanentment"
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s s'ha restaurat"
|
||||
|
||||
#~ msgid "Invalid request"
|
||||
#~ msgstr "La sol·licitud no és vàlida"
|
||||
|
||||
#~ msgid "Unexpected error, please try again"
|
||||
#~ msgstr "Error inesperat, torneu-ho a provar"
|
|
@ -1,381 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
|
||||
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"Language-Team: Czech <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/cs/>\n"
|
||||
"Language: cs\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.15.2\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Něco se pokazilo, zkuste to znovu"
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr "Nelze to udělat"
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Změny nemohly být uloženy"
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Nemohlo být vymazáno"
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s již existuje"
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr "Nenalezeno"
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr "Soubor nenalezen"
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr "Příliš velký soubor"
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr "Nepodporovaný formát"
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Složka Originály je prázdná"
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr "Výběr nenalezen"
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr "Subjekt nebyl nalezen"
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr "Účet nenalezen"
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr "Uživatel nenalezen"
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr "Štítek nenalezen"
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr "Album nenalezeno"
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr "Předmět nebyl nalezen"
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr "Osoba nebyla nalezena"
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr "Obličej nebyl nalezen"
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Není k dispozici ve veřejném módu"
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Není k dispozici v režimu pouze pro čtení"
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Přihlaste se ke svému účtu"
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr "Přístup zamítnut"
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Nahrané soubory by mohly být urážlivé"
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr "Nahrávání selhalo"
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr "Nebyly vybrány žádné položky"
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Vytváření souboru selhalo, zkontrolujte prosím oprávnění"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Vytváření složky selhalo, zkontrolujte prosím oprávnění"
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Nemohlo být připojeno, zkuste to prosím znovu"
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Neplatné heslo, zkuste to prosím znovu"
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funkce deaktivovaná"
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr "Nebyly vybrány žádné štítky"
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr "Nebyla vybrána žádná alba"
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr "Žádné soubory ke stažení k dispozici"
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Nebylo možné vytvořit soubor ZIP"
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Neplatné údaje"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr "Neplatný odkaz"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr "Neplatný jméno"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Zaneprázdněn, zkuste to prosím později"
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Interval buzení je %s, ale musí být 1h nebo kratší"
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Váš účet se nepodařilo připojit"
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Změny byly úspěšně uloženy"
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr "Album vytvořeno"
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr "Album uloženo"
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s vymazáno"
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Obsah alba naklonován"
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr "Soubor odstraněn ze stohu"
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr "Soubor vymazán"
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Výběr přidán do %s"
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Jeden záznam přidán do %s"
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d záznamů přidáno do %s"
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Jeden záznam odstraněn z %s"
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d záznamů odstraněno z %s"
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr "Účet vytvořen"
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr "Účet uložen"
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr "Účet vymazán"
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr "Nastavení uloženo"
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr "Heslo změněno"
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import dokončen za %d s"
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr "Import zrušen"
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexování dokončeno za %d s"
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexování originálů..."
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexování souborů v %s"
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexování zrušeno"
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Odstraněno %d souborů a %d fotografií"
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Přesouvání souborů z %s"
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopírování souborů z %s"
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr "Štítky vymazány"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr "Štítek uložen"
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr "Předmět uložen"
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr "Předmět smazán"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr "Uložená osoba"
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr "Vymazaná osoba"
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr "Soubor odeslán"
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d souborů nahráno za %d s"
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr "Zpracování nahrávání..."
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Nahrávání bylo zpracováno"
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr "Výběr potvrzen"
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr "Výběr archivován"
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr "Výběr obnoven"
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Výběr označen jako Soukromý"
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr "Alba vymazána"
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "ZIP vytvořen za %d s"
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Trvale smazáno"
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s bylo obnoveno"
|
||||
|
||||
#~ msgid "Invalid request"
|
||||
#~ msgstr "Neplatný požadavek"
|
||||
|
||||
#~ msgid "Unexpected error, please try again"
|
||||
#~ msgstr "Neočekávaná chyba, zkuste to prosím znovu"
|
||||
|
||||
#~ msgid "Not found on server, deleted?"
|
||||
#~ msgstr "Na serveru nenalezeno, vymazáno?"
|
|
@ -1,378 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
|
||||
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"Language-Team: Danish <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/da/>\n"
|
||||
"Language: da\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15.2\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Noget gik galt, prøv igen"
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr "Det kan ikke lade sig gøre"
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Ændringer kunne ikke gemmes"
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Kunne ikke slettes"
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s findes allerede"
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr "Ikke fundet"
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr "Fil ikke fundet"
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr "Filen er for stor"
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr "Ikke understøttet format"
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Mappen Originaler er tom"
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr "Valg ikke fundet"
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr "Enhed ikke fundet"
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr "Konto ikke fundet"
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr "Bruger ikke fundet"
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr "Etiket ikke fundet"
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr "Album ikke fundet"
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr "Emne ikke fundet"
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr "Person ikke fundet"
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr "Ansigt ikke fundet"
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Ikke tilgængelig i offentlig tilstand"
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Ikke tilgængelig i skrivebeskyttet tilstand"
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Log ind på din konto"
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr "Tilladelse nægtet"
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Upload kan være stødende"
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr "Upload mislykkedes"
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr "Ingen emner valgt"
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Oprettelse af fil mislykkedes, tjek venligst tilladelser"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Oprettelse af mappe mislykkedes, tjek venligst tilladelser"
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Kunne ikke oprette forbindelse, prøv venligst igen"
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Ugyldig adgangskode, prøv venligst igen"
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funktion deaktiveret"
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr "Ingen etiketter valgt"
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr "Ingen album valgt"
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr "Ingen filer til rådighed til download"
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Det lykkedes ikke at oprette zip-fil"
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Ugyldige legitimationsoplysninger"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr "Ugyldigt link"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr "Ugyldigt navn"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Optaget, prøv venligst igen senere"
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Vækningsintervallet er %s, men skal være 1 time eller mindre"
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Der kunne ikke oprettes forbindelse til din konto"
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Ændringer gemt med succes"
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr "Album oprettet"
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr "Album gemt"
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s slettet"
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Albumindhold klonet"
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr "Fil fjernet fra stakken"
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr "Fil slettet"
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Valg tilføjet til %s"
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "En post tilføjet til %s"
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d poster tilføjet til %s"
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "En post fjernet fra %s"
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d poster fjernet fra %s"
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr "Konto oprettet"
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr "Gemte konto"
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr "Konto slettet"
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr "Indstillinger gemt"
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr "Adgangskode ændret"
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import afsluttet efter %d s"
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr "Import annulleret"
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indeksering afsluttet efter %d s"
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indeksering af originaler..."
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indeksering af filer i %s"
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indeksering annulleret"
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Fjernede %d filer og %d fotos"
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Flytter filer fra %s"
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopierer filer fra %s"
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etiketter slettet"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr "Etikette gemt"
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr "Emne gemt"
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr "Emne slettet"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr "Person gemt"
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr "Person slettet"
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr "Fil uploadet"
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d filer uploadet på %d s"
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr "Behandling af upload..."
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Upload er blevet behandlet"
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr "Udvælgelse godkendt"
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr "Udvælgelse arkiveret"
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr "Udvalgte gendannet"
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Udvalgte er markeret som privat"
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr "Albums slettet"
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip filen blev lavet på %d s"
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Permanent slettet"
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s er blevet genoprettet"
|
||||
|
||||
#~ msgid "Invalid request"
|
||||
#~ msgstr "Ugyldig anmodning"
|
||||
|
||||
#~ msgid "Unexpected error, please try again"
|
||||
#~ msgstr "Uventet fejl, prøv venligst igen"
|
|
@ -1,382 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-03-09 13:14+0000\n"
|
||||
"PO-Revision-Date: 2023-03-29 12:10+0000\n"
|
||||
"Last-Translator: Admin <hello@photoprism.app>\n"
|
||||
"Language-Team: German <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/de/>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.16.2\n"
|
||||
"X-Poedit-Basepath: .\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Etwas ist schief gelaufen, versuche es noch einmal"
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr "Dies ist nicht möglich"
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Fehler beim Speichern der Daten"
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Konnte nicht gelöscht werden"
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s existiert bereits"
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr "Nicht gefunden"
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr "Datei konnte nicht gefunden werden"
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr "Datei zu groß"
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr "Nicht unterstütztes Format"
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Originals-Verzeichnis ist leer"
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr "Auswahl nicht gefunden"
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr "Keine Daten gefunden"
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr "Unbekannter Account"
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr "Nutzer nicht gefunden"
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr "Kategorie nicht gefunden"
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr "Album nicht gefunden"
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr "Unbekanntes Motiv"
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr "Unbekannte Person"
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr "Unbekanntes Gesicht"
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Im öffentlichen Modus nicht verfügbar"
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "Im Nur-Lese-Modus nicht verfügbar"
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Bitte melde dich an"
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr "Erlaubnis verweigert"
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Inhalt könnte anstößig sein und wurde abgelehnt"
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr "Upload fehlgeschlagen"
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr "Nichts ausgewählt"
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Datei konnte nicht erstellt werden"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Ordner konnte nicht erstellt werden"
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Verbindung fehlgeschlagen"
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Ungültiges Passwort"
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr "Funktion deaktiviert"
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr "Keine Kategorien ausgewählt"
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr "Keine Alben ausgewählt"
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr "Keine Dateien zum Download verfügbar"
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Zip-Datei konnte nicht erstellt werden"
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Ungültige Zugangsdaten"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr "Ungültiger Link"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr "Ungültiger Name"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Beschäftigt, bitte später erneut versuchen"
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Worker-Intervall ist %s, muss aber 1h oder weniger betragen"
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Das Konto konnte nicht verbunden werden"
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Änderungen erfolgreich gespeichert"
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr "Album erstellt"
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr "Album gespeichert"
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Album %s gelöscht"
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Album-Einträge kopiert"
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr "Datei aus Stapel entfernt"
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr "Datei gelöscht"
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Auswahl zu %s hinzugefügt"
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Ein Eintrag zu %s hinzugefügt"
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d Einträge zu %s hinzugefügt"
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Ein Eintrag aus %s entfernt"
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d Einträge aus %s entfernt"
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr "Konto hinzugefügt"
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr "Konto gespeichert"
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr "Konto gelöscht"
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr "Einstellungen gespeichert"
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr "Passwort geändert"
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Import in %d s abgeschlossen"
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr "Import abgebrochen"
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexierung in %d s abgeschlossen"
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexiere Dateien…"
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexiere Dateien in %s"
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexierung abgebrochen"
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "%d Dateien und %d Bilder wurden entfernt"
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Verschiebe Dateien von %s"
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Kopiere Dateien von %s"
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr "Kategorien gelöscht"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr "Kategorie gespeichert"
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr "Motiv gespeichert"
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr "Motiv gelöscht"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr "Person gespeichert"
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr "Person gelöscht"
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr "Datei hochgeladen"
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d Dateien hochgeladen in %d s"
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr "Verarbeitung des Uploads..."
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Der Upload wurde verarbeitet"
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr "Auswahl übernommen"
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr "Auswahl archiviert"
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr "Auswahl wiederhergestellt"
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Auswahl als privat markiert"
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr "Alben gelöscht"
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip-Datei erstellt in %d s"
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Endgültig gelöscht"
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s wurde wiederhergestellt"
|
||||
|
||||
#~ msgid "Invalid request"
|
||||
#~ msgstr "Ungültige Anfrage"
|
||||
|
||||
#~ msgid "Unexpected error, please try again"
|
||||
#~ msgstr "Unerwarteter Fehler, bitte erneut versuchen"
|
||||
|
||||
#~ msgid "Not found on server, deleted?"
|
||||
#~ msgstr "Nicht auf Server gefunden, gelöscht?"
|
|
@ -1,377 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-03-09 13:14+0000\n"
|
||||
"PO-Revision-Date: 2023-10-16 16:35+0000\n"
|
||||
"Last-Translator: dtsolakis <dtsola@eranet.gr>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: el\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.0.2\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Κάτι πήγε στραβά, δοκιμάστε ξανά"
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr "Αυτό δεν είναι εφικτό"
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "Οι αλλαγές δεν μπόρεσαν να αποθηκευτούν"
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr "Δεν μπόρεσε να διαγραφεί"
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s υπάρχει ήδη"
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr "Δεν βρέθηκε"
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr "Το αρχείο δεν βρέθηκε"
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr "Πολύ μεγάλο αρχείο"
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr "Μη υποστηριζόμενη μορφή"
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "Ο φάκελος Πρωτότυπα είναι άδειος"
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr "Η επιλογή δεν βρέθηκε"
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr "Η οντότητα δεν βρέθηκε"
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr "Ο λογαριασμός δεν βρέθηκε"
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr "Ο χρήστης δεν βρέθηκε"
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr "Η ετικέτα δεν βρέθηκε"
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr "Η Συλλογή δεν βρέθηκε"
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr "Το Θέμα δεν βρέθηκε"
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr "Το Άτομο δεν βρέθηκε"
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr "Το Πρόσωπο δεν βρέθηκε"
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr "Μη διαθέσιμο κατά τη δημόσια λειτουργία"
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "μη διαθέσιμο στην κατάσταση \"μόνο για ανάγνωση\""
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Παρακαλούμε συνδεθείτε και δοκιμάστε ξανά"
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr "Το Άτομο διαγράφηκε"
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "Η φόρτωση μπορεί να είναι προσβλητική"
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr "Αποτυχία αποστολής"
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr "Δεν έχουν επιλεγεί αντικείμενα"
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Απέτυχε η δημιουργία αρχείου, παρακαλούμε ελέγξτε τα δικαιώματα"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Απέτυχε η δημιουργία φακέλου, παρακαλούμε ελέγξτε τα δικαιώματα"
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "Δεν ήταν δυνατή η σύνδεση, παρακαλώ δοκιμάστε ξανά"
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Μη έγκυρος κωδικός πρόσβασης, παρακαλώ δοκιμάστε ξανά"
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr "Λειτουργία απενεργοποιημένη"
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr "Δεν έχουν επιλεγεί ετικέτες"
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr "Δεν έχουν επιλεγεί συλλογές"
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr "Δεν υπάρχουν διαθέσιμα αρχεία για λήψη"
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Απέτυχε η δημιουργία αρχείου zip"
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Μη έγκυρα διαπιστευτήρια"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr "Μη έγκυρος σύνδεσμος"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr "Μη έγκυρο όνομα"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Απασχολημένος, προσπαθήστε ξανά αργότερα"
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "Το διάστημα αφύπνισης είναι %s, αλλά πρέπει να είναι 1 ώρα ή λιγότερο"
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Ο λογαριασμός σας δεν μπόρεσε να συνδεθεί"
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Οι αλλαγές αποθηκεύτηκαν επιτυχώς"
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr "Η Συλλογή δημιουργήθηκε"
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr "Η Συλλογή αποθηκεύθηκε"
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Η Συλλογή %s διαγράφηκε"
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Τα περιεχόμενα της Συλλογής αντιγράφηκαν"
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr "Αφαίρεση αρχείου από τη στοίβα"
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr "Το αρχείο διαγράφηκε"
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Η επιλογή προστέθηκε στο %s"
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Μία εγγραφή προστέθηκε στο %s"
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d καταχωρήσεις προστέθηκαν στο %s"
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Μία καταχώρηση αφαιρέθηκε από %s"
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d καταχωρήσεις αφαιρέθηκαν από %s"
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr "Ο Λογαριασμός δημιουργήθηκε"
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr "Ο Λογαριασμός αποθηκεύθηκε"
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr "Ο Λογαριασμός διαγράφηκε"
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr "Οι ρυθμίσεις αποθηκεύτηκαν"
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr "Ο κωδικός πρόσβασης άλλαξε"
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Η εισαγωγή ολοκληρώθηκε σε %d s"
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr "Η εισαγωγή ακυρώθηκε"
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Η δημιουργία ευρετηρίου σε %d s"
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Δημιουργία ευρετηρίου για τα πρωτότυπα..."
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Δημιουργία ευρετηρίου αρχείων σε %s"
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Η δημιουργία ευρετηρίου ακυρώθηκε"
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Αφαίρεση %d αρχείων και %d φωτογραφιών"
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Μετακίνηση αρχείων από %s"
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Αντιγραφή αρχείων από %s"
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr "Οι Ετικέτες διαγράφηκαν"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr "Η Ετικέτα αποθηκεύτηκε"
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr "Το Θέμα αποθηκεύθηκε"
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr "Το Θέμα διαγράφηκε"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr "Το Άτομο αποθηκεύθηκε"
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr "Το Άτομο διαγράφηκε"
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr "Το αρχείο διαγράφηκε"
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d αρχεία μεταφορτώθηκαν σε %d s"
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr "Επεξεργασία μεταφόρτωσης..."
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr "Η φόρτωση έχει ολοκληρωθεί"
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr "Η επιλογή εγκρίθηκε"
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr "Η επιλογή αρχειοθετήθηκε"
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr "Η επιλογή αποκαταστάθηκε"
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Η επιλογή χαρακτηρίστηκε ως ιδιωτική"
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr "Οι Συλλογές διαγράφηκαν"
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Το αρχείο συμπίεσης δημιουργήθηκε σε %d s"
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Διαγράφηκε μόνιμα"
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s έχει αποκατασταθεί"
|
||||
|
||||
#~ msgid "Invalid request"
|
||||
#~ msgstr "Μη έγκυρο αίτημα"
|
||||
|
||||
#~ msgid "Unexpected error, please try again"
|
||||
#~ msgstr "Απρόσμενο σφάλμα, δοκιμάστε ξανά"
|
|
@ -1,371 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
|
||||
"PO-Revision-Date: 2022-10-31 16:44+0100\n"
|
||||
"Last-Translator: Michael Mayer <michael@photoprism.org>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr ""
|
|
@ -1,381 +0,0 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-02-09 12:51+0000\n"
|
||||
"PO-Revision-Date: 2023-02-09 13:13+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"Language-Team: Spanish <https://translate.photoprism.app/projects/photoprism/"
|
||||
"backend/es/>\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15.2\n"
|
||||
|
||||
#: messages.go:94
|
||||
msgid "Something went wrong, try again"
|
||||
msgstr "Algo ha ido mal, inténtalo de nuevo"
|
||||
|
||||
#: messages.go:95
|
||||
msgid "Unable to do that"
|
||||
msgstr "Incapaz de hacerlo"
|
||||
|
||||
#: messages.go:96
|
||||
msgid "Changes could not be saved"
|
||||
msgstr "No se pudieron guardar los cambios"
|
||||
|
||||
#: messages.go:97
|
||||
msgid "Could not be deleted"
|
||||
msgstr "No se pudo borrar"
|
||||
|
||||
#: messages.go:98
|
||||
#, c-format
|
||||
msgid "%s already exists"
|
||||
msgstr "%s ya existe"
|
||||
|
||||
#: messages.go:99
|
||||
msgid "Not found"
|
||||
msgstr "No encontrado"
|
||||
|
||||
#: messages.go:100
|
||||
msgid "File not found"
|
||||
msgstr "No se encuentra el archivo"
|
||||
|
||||
#: messages.go:101
|
||||
msgid "File too large"
|
||||
msgstr "Archivo demasiado grande"
|
||||
|
||||
#: messages.go:102
|
||||
msgid "Unsupported format"
|
||||
msgstr "Formato no admitido"
|
||||
|
||||
#: messages.go:103
|
||||
msgid "Originals folder is empty"
|
||||
msgstr "La carpeta de originales está vacía"
|
||||
|
||||
#: messages.go:104
|
||||
msgid "Selection not found"
|
||||
msgstr "Selección no encontrada"
|
||||
|
||||
#: messages.go:105
|
||||
msgid "Entity not found"
|
||||
msgstr "Entidad no encontrada"
|
||||
|
||||
#: messages.go:106
|
||||
msgid "Account not found"
|
||||
msgstr "Cuenta no encontrada"
|
||||
|
||||
#: messages.go:107
|
||||
msgid "User not found"
|
||||
msgstr "Usuario no encontrado"
|
||||
|
||||
#: messages.go:108
|
||||
msgid "Label not found"
|
||||
msgstr "Etiqueta no encontrada"
|
||||
|
||||
#: messages.go:109
|
||||
msgid "Album not found"
|
||||
msgstr "Álbum no encontrado"
|
||||
|
||||
#: messages.go:110
|
||||
msgid "Subject not found"
|
||||
msgstr "Asunto no encontrado"
|
||||
|
||||
#: messages.go:111
|
||||
msgid "Person not found"
|
||||
msgstr "Persona no encontrada"
|
||||
|
||||
#: messages.go:112
|
||||
msgid "Face not found"
|
||||
msgstr "Cara no encontrada"
|
||||
|
||||
#: messages.go:113
|
||||
msgid "Not available in public mode"
|
||||
msgstr "No disponible en modo público"
|
||||
|
||||
#: messages.go:114
|
||||
msgid "Not available in read-only mode"
|
||||
msgstr "No está disponible en modo de sólo lectura"
|
||||
|
||||
#: messages.go:115
|
||||
msgid "Please log in to your account"
|
||||
msgstr "Por favor inicie sesión"
|
||||
|
||||
#: messages.go:116
|
||||
msgid "Permission denied"
|
||||
msgstr "Permiso denegado"
|
||||
|
||||
#: messages.go:117
|
||||
msgid "Upload might be offensive"
|
||||
msgstr "El archivo subido puede ser ofensivo"
|
||||
|
||||
#: messages.go:118
|
||||
msgid "Upload failed"
|
||||
msgstr "Carga fallida"
|
||||
|
||||
#: messages.go:119
|
||||
msgid "No items selected"
|
||||
msgstr "Ningún elemento seleccionado"
|
||||
|
||||
#: messages.go:120
|
||||
msgid "Failed creating file, please check permissions"
|
||||
msgstr "Fallo al crear el archivo, por favor, compruebe los permisos"
|
||||
|
||||
#: messages.go:121
|
||||
msgid "Failed creating folder, please check permissions"
|
||||
msgstr "Fallo al crear la carpeta, por favor, compruebe los permisos"
|
||||
|
||||
#: messages.go:122
|
||||
msgid "Could not connect, please try again"
|
||||
msgstr "No se pudo conectar, por favor vuelva a intentarlo"
|
||||
|
||||
#: messages.go:123
|
||||
msgid "Invalid password, please try again"
|
||||
msgstr "Contraseña inválida, por favor vuelva a intentarlo"
|
||||
|
||||
#: messages.go:124
|
||||
msgid "Feature disabled"
|
||||
msgstr "Característica desactivada"
|
||||
|
||||
#: messages.go:125
|
||||
msgid "No labels selected"
|
||||
msgstr "Ninguna etiqueta seleccionada"
|
||||
|
||||
#: messages.go:126
|
||||
msgid "No albums selected"
|
||||
msgstr "Ningún álbum seleccionado"
|
||||
|
||||
#: messages.go:127
|
||||
msgid "No files available for download"
|
||||
msgstr "Ningún archivo disponible para descargar"
|
||||
|
||||
#: messages.go:128
|
||||
msgid "Failed to create zip file"
|
||||
msgstr "Fallo al crear el archivo zip"
|
||||
|
||||
#: messages.go:129
|
||||
msgid "Invalid credentials"
|
||||
msgstr "Credenciales no válidas"
|
||||
|
||||
#: messages.go:130
|
||||
msgid "Invalid link"
|
||||
msgstr "Enlace inválido"
|
||||
|
||||
#: messages.go:131
|
||||
msgid "Invalid name"
|
||||
msgstr "Nombre inválido"
|
||||
|
||||
#: messages.go:132
|
||||
msgid "Busy, please try again later"
|
||||
msgstr "Ocupado, por favor vuelva a intentarlo más tarde"
|
||||
|
||||
#: messages.go:133
|
||||
#, c-format
|
||||
msgid "The wakeup interval is %s, but must be 1h or less"
|
||||
msgstr "El intervalo de activación es %s, pero debe ser 1h o menos"
|
||||
|
||||
#: messages.go:134
|
||||
msgid "Your account could not be connected"
|
||||
msgstr "Su cuenta no pudo ser conectada"
|
||||
|
||||
#: messages.go:137
|
||||
msgid "Changes successfully saved"
|
||||
msgstr "Cambios guardados con éxito"
|
||||
|
||||
#: messages.go:138
|
||||
msgid "Album created"
|
||||
msgstr "Álbum creado"
|
||||
|
||||
#: messages.go:139
|
||||
msgid "Album saved"
|
||||
msgstr "Álbum guardado"
|
||||
|
||||
#: messages.go:140
|
||||
#, c-format
|
||||
msgid "Album %s deleted"
|
||||
msgstr "Álbum %s borrado"
|
||||
|
||||
#: messages.go:141
|
||||
msgid "Album contents cloned"
|
||||
msgstr "Contenidos del álbum clonados"
|
||||
|
||||
#: messages.go:142
|
||||
msgid "File removed from stack"
|
||||
msgstr "Archivo eliminado de la pila"
|
||||
|
||||
#: messages.go:143
|
||||
msgid "File deleted"
|
||||
msgstr "Archivo eliminado"
|
||||
|
||||
#: messages.go:144
|
||||
#, c-format
|
||||
msgid "Selection added to %s"
|
||||
msgstr "Selección añadida a %s"
|
||||
|
||||
#: messages.go:145
|
||||
#, c-format
|
||||
msgid "One entry added to %s"
|
||||
msgstr "Una entrada añadida a %s"
|
||||
|
||||
#: messages.go:146
|
||||
#, c-format
|
||||
msgid "%d entries added to %s"
|
||||
msgstr "%d entradas añadidas a %s"
|
||||
|
||||
#: messages.go:147
|
||||
#, c-format
|
||||
msgid "One entry removed from %s"
|
||||
msgstr "Una entrada eliminada de %s"
|
||||
|
||||
#: messages.go:148
|
||||
#, c-format
|
||||
msgid "%d entries removed from %s"
|
||||
msgstr "%d entradas eliminadas de %s"
|
||||
|
||||
#: messages.go:149
|
||||
msgid "Account created"
|
||||
msgstr "Cuenta creada"
|
||||
|
||||
#: messages.go:150
|
||||
msgid "Account saved"
|
||||
msgstr "Cuenta guardada"
|
||||
|
||||
#: messages.go:151
|
||||
msgid "Account deleted"
|
||||
msgstr "Cuenta borrada"
|
||||
|
||||
#: messages.go:152
|
||||
msgid "Settings saved"
|
||||
msgstr "Ajustes guardados"
|
||||
|
||||
#: messages.go:153
|
||||
msgid "Password changed"
|
||||
msgstr "Contraseña cambiada"
|
||||
|
||||
#: messages.go:154
|
||||
#, c-format
|
||||
msgid "Import completed in %d s"
|
||||
msgstr "Importación completada en %d"
|
||||
|
||||
#: messages.go:155
|
||||
msgid "Import canceled"
|
||||
msgstr "Importación cancelada"
|
||||
|
||||
#: messages.go:156
|
||||
#, c-format
|
||||
msgid "Indexing completed in %d s"
|
||||
msgstr "Indexación completada em %d"
|
||||
|
||||
#: messages.go:157
|
||||
msgid "Indexing originals..."
|
||||
msgstr "Indexando originales..."
|
||||
|
||||
#: messages.go:158
|
||||
#, c-format
|
||||
msgid "Indexing files in %s"
|
||||
msgstr "Indexando archivos en %s"
|
||||
|
||||
#: messages.go:159
|
||||
msgid "Indexing canceled"
|
||||
msgstr "Indexación cancelada"
|
||||
|
||||
#: messages.go:160
|
||||
#, c-format
|
||||
msgid "Removed %d files and %d photos"
|
||||
msgstr "Eliminados %d archivos y %d fotos"
|
||||
|
||||
#: messages.go:161
|
||||
#, c-format
|
||||
msgid "Moving files from %s"
|
||||
msgstr "Moviendo achivos desde %s"
|
||||
|
||||
#: messages.go:162
|
||||
#, c-format
|
||||
msgid "Copying files from %s"
|
||||
msgstr "Copiando archivos desde %s"
|
||||
|
||||
#: messages.go:163
|
||||
msgid "Labels deleted"
|
||||
msgstr "Etiquetas borradas"
|
||||
|
||||
#: messages.go:164
|
||||
msgid "Label saved"
|
||||
msgstr "Etiqueta guardada"
|
||||
|
||||
#: messages.go:165
|
||||
msgid "Subject saved"
|
||||
msgstr "Asunto guardado"
|
||||
|
||||
#: messages.go:166
|
||||
msgid "Subject deleted"
|
||||
msgstr "Sujeto eliminado"
|
||||
|
||||
#: messages.go:167
|
||||
msgid "Person saved"
|
||||
msgstr "Persona salvada"
|
||||
|
||||
#: messages.go:168
|
||||
msgid "Person deleted"
|
||||
msgstr "Persona eliminada"
|
||||
|
||||
#: messages.go:169
|
||||
msgid "File uploaded"
|
||||
msgstr "Archivo cargado"
|
||||
|
||||
#: messages.go:170
|
||||
#, c-format
|
||||
msgid "%d files uploaded in %d s"
|
||||
msgstr "%d archivos subidos en %d"
|
||||
|
||||
#: messages.go:171
|
||||
msgid "Processing upload..."
|
||||
msgstr "Procesando la carga..."
|
||||
|
||||
#: messages.go:172
|
||||
msgid "Upload has been processed"
|
||||
msgstr "La carga ha sido procesada"
|
||||
|
||||
#: messages.go:173
|
||||
msgid "Selection approved"
|
||||
msgstr "Selección aprobada"
|
||||
|
||||
#: messages.go:174
|
||||
msgid "Selection archived"
|
||||
msgstr "Selección archivada"
|
||||
|
||||
#: messages.go:175
|
||||
msgid "Selection restored"
|
||||
msgstr "Selección restaurada"
|
||||
|
||||
#: messages.go:176
|
||||
msgid "Selection marked as private"
|
||||
msgstr "Selección marcada como privada"
|
||||
|
||||
#: messages.go:177
|
||||
msgid "Albums deleted"
|
||||
msgstr "Álbumes borrados"
|
||||
|
||||
#: messages.go:178
|
||||
#, c-format
|
||||
msgid "Zip created in %d s"
|
||||
msgstr "Zip creado en %d"
|
||||
|
||||
#: messages.go:179
|
||||
msgid "Permanently deleted"
|
||||
msgstr "Eliminado permanentemente"
|
||||
|
||||
#: messages.go:180
|
||||
#, c-format
|
||||
msgid "%s has been restored"
|
||||
msgstr "%s ha sido restaurado"
|
||||
|
||||
#~ msgid "Invalid request"
|
||||
#~ msgstr "Petición no válida"
|
||||
|
||||
#~ msgid "Unexpected error, please try again"
|
||||
#~ msgstr "Error inesperado, por favor vuelva a intentarlo"
|
||||
|
||||
#~ msgid "Not found on server, deleted?"
|
||||
#~ msgstr "No encontrado en el servidor, ¿fue borrado?"
|